機械学習で動画に映る対象物を検出するレシピ20選(2022年8月版)

# はじめに
※本記事は2022年8月に新着レシピを8個追加いたしました。
**[AxrossRecipe](https://axross-recipe.com/recipes)** とは、エンジニアの"教育"と"実務"のギャップに着目し、「学んだが活用できない人を減らしたい」という想いのもと、ソフトバンクと社内起業制度にて立ち上げたサービスです。

現役エンジニアによる実践ノウハウが"レシピ"として教材化されており、動くものをつくりながら、具体的な目的やテーマをもってプログラミングを学ぶことができます。

AxrossRecipe：https://axross-recipe.com


今回は、動画に映る人や物に対して、AI/機械学習を用いて対象物を抽出する **物体検出** の代表的な手法と、Axrossで学べる関連レシピをご紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/c9b6180f-45d9-2884-921c-cd66f65dcb1d.png)


# 物体検出とは

動画像の中から定められた物体の位置と種類、個数を特定する技術です。動画像から物体の種類を分類するのは、画像分類でも行えますが、物体検出ではそれに加え、

* 物体の領域の位置を矩形で予測し絞り込む方法
* 認識対象以外の物体を排除する方法

というような手法を取り入れることで、動画像に映る対象物の位置・個数の検出を可能にしています。

物体検出は、製造業や建設業、流通小売、医療、セキュリティなど業種を問わず幅広い分野で活用されています。

例えば、自動運転車における歩行者の検出、ドローンを活用した高所設備のメンテナンス、スタジアムのマスク着用率の計測、監視カメラの動画における人の購買行動分析、CT医療画像から体の異常部位の検出、Google Lensによる画像検索...、挙げたらきりがないです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/a2e6186d-4326-c326-2b70-3014156554c0.png)

物体検出は、主に「**CNN（畳み込みニューラルネットワーク）**」を利用しています。CNNとは、ディープラーニングで用いられるネットワークの中で画像からパターンや物体を認識するための有名な手法の１つです。

畳み込み演算とプーリング＋活性化関数を活用した画像の特徴の強調を繰り返すことで、画像の部分的な特徴と全体的な特徴を学習していき、画像の特徴量の学習を最適化していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/25ecff6e-5a0f-2fac-f484-f32aa7d9da2c.png)
出典：[CNN（Convolutional Neural Network： 畳み込みニューラルネットワーク）とは？](https://www.atmarkit.co.jp/ait/articles/1901/06/news032.html)


# 物体検出の手法
AI/機械学習を用いて、動画に映る人や物のような対象物を検出する代表的な手法をいくつか紹介します。

## YOLO

YOLOは、物体検出の王道と言えるモデルです。You Only Look Onceの略で**処理速度が非常に早い** のが特徴です。そのため、リアルタイムの物体検出をすることができます。

YOLOの物体認識の手法は、予め画像全体をグリッド分割しておき、各領域ごとで物体の種類と位置を求めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/b44366ef-d34d-dfe3-104c-27d9de5d999b.png)
物体が多数写っている場合は、識別精度が低くなりますが、YOLOでは学習時に一枚の画像の全ての範囲を使うため、背景の誤検出は抑えることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/47a635a4-fe47-0927-41d7-0f151955560c.png)
YOLOは現在v５まで出ており、現在進行形で成長しています。

出典：[You Only Look Once:
Unified, Real-Time Object Detection](https://arxiv.org/pdf/1506.02640.pdf)

## SSD
SSDはSingle Shot MultiBox Detectorの略で、精度はFaster R-CNNと同等程度あり、処理速度も早いという特徴を持っています。YOLO同様、リアルタイムでの物体検出が可能です。

物体検出の手法はYOLOと同じ手法を用いていますが、画像内に物体が多数あったとしても、YOLOより比較的正確に検出することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/501d9045-161a-3a64-1965-ef6d724c4c0a.png)

出典：[SSD: Single Shot MultiBox Detector](https://arxiv.org/pdf/1512.02325.pdf)

## DETR 
DETRは今までの物体検出の方法にTransformerというモデルを融合させたモデルです。
言語処理に使われていたTransformerを画像処理に活用することにより、精度を保ちながら、並列計算をすることで高速な処理が可能になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/8fc98b8a-255e-71e5-d583-727bab36898e.png)

* Backbone：画像の特徴量をエンコードするためのCNNネットワーク。
* Transformer：CNNから取り出された画像の特徴量から注意機構を用いて各物体の位置や種類の情報へと変換。事前に決められた個数Nの物体を予測します。他の予測内容を見て自身の予測を忖度するEncoder-Decoderネットワーク。
* FFN：Transformerの出力を物体の位置座標・クラスラベルにデコードするネットワーク。

シンプルなモデルにもかかわらず高い物体検出精度を出せるのがDETRのの特徴です。

出典：[End-to-End Object Detection with Transformers](https://arxiv.org/pdf/2005.12872.pdf)

## OpenPose
OpenPoseは、深層学習（ディープラーニング）で、動画像から3次元の人物の体の骨格をリアルタイムで検出・推定することができるシステムです。１つのカメラによる動画や画像から、人の目や鼻などの顔のパーツから、首や肩、肘、手首、腰、膝、足首などの18カ所の関節点を検出することができ、それらを点と線で示して姿勢を推定できます。

また、モーションキャプチャーと異なり、GPUなどの高性能プロセッサを使えば、動画像内に複数人がいても、さらには複数人の体が重なり合っていても、リアルタイムに検出可能である点が特長です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/0333dc1f-6d05-f192-8656-39d03afebdc5.png)
出典：[姿勢推定ライブラリOpenPoseを用いた
機械学習による動作識別手法の検討](https://db-event.jpn.org/deim2019/post/papers/174.pdf)


# 深層学習で動画に映る対象物を検出するレシピ12選
## 物体検出
### 01.[画像/動画の物体検出を通じて、YOLOv4の技術性能と使い方を学べるレシピ](https://axross-recipe.com/recipes/145)
投稿者：[@kanikani](https://twitter.com/katkazzzzz) さん
**YOLOv4 darknet** を活用し、静止画像と動画、Webカメラからそれぞれリアルタイムに物体検出し、YOLOv4の高い技術性能を体感しながら、その使い方を学ぶことができます。

NVIDIA社が公開しているGPU向けのプラットフォーム「**CUDA Toolkit**」や、深層学習ライブラリ「**cuDNN**」を使用し、より実用的かつ高精度な物体検出、画像解析を行います。画像処理における深層学習の最先端を試し、進歩を実体験できます。

https://axross-recipe.com/recipes/145

### 02.[YOLOv5 と転移学習を使ってマスクの着用者と非着用者の顔検出を行うレシピ](https://axross-recipe.com/recipes/218)
投稿者：[@lulu1351](https://axross-recipe.com/users/2261) さん
YOLOシリーズの新モデル**YOLOv5**を活用し、近年需要が高い、マスクの着用者と未着用者の顔検出を行うタスクを実際に体験できます。。

自分のデータセットでトレーニング（転移学習）を行い、Google Colaboratoryを使って、YOLOv5を動かし、TensorBoardツールを使って学習結果の可視化することができるようになります。

https://axross-recipe.com/recipes/218

### 03. [Facebook AIのDetectron2を使って物体検出とファインチューニングを行うレシピ](https://axross-recipe.com/recipes/232)
投稿者：[@lulu1351](https://axross-recipe.com/users/2261)さん

Facebook AIが開発したPyTorchベースの物体検出のライブラリ**Detectron2**を用いて、様々な学習済みモデルの利用や動画データの物体検出への適用、カスタムデータセットを使ったトレーニング（**ファインチューニング**）などへの活用を学ぶことができます。

https://axross-recipe.com/recipes/232

### 04. [YOLOXをColaboratory上でトレーニングするレシピ](https://axross-recipe.com/recipes/548)
投稿者：[@高橋かずひと](https://twitter.com/KzhtTkhs)さん

Colaboratory上での物体検出モデルYOLOXのモデルトレーニング方法を学ぶレシピです。
環境構築、モデルの訓練～推論までの一連の流れをGoogle Colaboratory上で実施します。

高精度・高速な物体検出モデルの生成に活用することができます。

https://axross-recipe.com/recipes/548

## 3D物体検出
### 05.[Unityで靴の3D物体検出を行うレシピ](https://axross-recipe.com/recipes/243)
投稿者：[@高橋かずひと](https://twitter.com/KzhtTkhs)さん
Unity公式の推論ライブラリ**Barracuda**を用いて、靴の3D物体検出を行います。

**TensorFlow**から**ONNX**モデルへの変換方法および、変換モデルをUnity上で推論・可視化する扱い方を学ぶことができます。アパレル店やECサイト等で、靴の試着を行うアプリ開発等で応用することができます。

https://axross-recipe.com/recipes/243

## 人物追跡
### 06.[DeepSORTを用いた人物のトラッキングを行うレシピ](https://axross-recipe.com/recipes/247)
投稿者：[@lulu1351](https://axross-recipe.com/users/2261)さん
**YOLO**(物体検出)、**ReId**(同一人物照合)、**SORT**(トラッキング)のアルゴリズムが組み合わせた、**DeepSORT(Simple Online Realtime Tracking)**のアーキテクチャーを用いて、動画に映る人物の追跡を行います。

追跡したいオブジェクトを指定し、特定のオブジェクト(例えば車や人物など)をトラッキングする手法を学ぶことができます。商業施設やイベント会場などでの人の流れの統計や密集度合い、人と人との距離などの分析に活用できます。

https://axross-recipe.com/recipes/247


### 07.[ByteTrackで対象のオブジェクトが障害物に隠れても正しいラベルでトラッキングするレシピ](https://axross-recipe.com/recipes/545)
投稿者：[@12kaz](https://axross-recipe.com/users/7011) さん
ByteTrackの技術概要を理解し、任意の動画に映る複数の人物を追跡する方法を学びます。

店舗に入退室するユーザーの動線パターン分析、団体競技における選手の行動分析に活用することができます。

https://axross-recipe.com/recipes/545

### 08.[YoutuReIDを用いて人物再特定(Person ReIdentification)を行うレシピ](https://axross-recipe.com/recipes/484)
投稿者：[@高橋かずひと](https://twitter.com/KzhtTkhs)さん
YoutuReIDを用いて人物再同定(Person ReIdentification)を行うレシピです。
人物再同定は人物再特定と呼ばれることもあります。

複数の監視カメラに映った同一人物の検出等に活用することができます。

https://axross-recipe.com/recipes/484

### 09.[TrackFormerで多人数を追跡するレシピ](https://axross-recipe.com/recipes/452)
投稿者：[@12kaz](https://axross-recipe.com/users/7011) さん
TrackFormerの技術概要を理解し、任意の動画に映る複数の人物を追跡する方法を学ぶレシピです。

店舗に入退室するユーザーの動線パターン分析、団体競技における選手の行動分析に活用することができます。

https://axross-recipe.com/recipes/452

## 動画分類
### 10. [Time-Space TransformerでYouTube動画を分類するレシピ](https://axross-recipe.com/recipes/465)
投稿者：[@12kaz](https://axross-recipe.com/users/7011)さん
Time-Space Transformerの技術概要を解説し、Time-Space Transformerを用いた動画分類方法と、Time-Space TransformerモデルのFine tuning方法を学ぶレシピです。

スポーツ映像からプレー映像のみを抽出することによるハイライト動画生成、
映像への自動タグ付けに活用することができます。

https://axross-recipe.com/recipes/465

## 合成・編集
### 11. [１枚の静止画を動画に合わせて動かすレシピ](https://axross-recipe.com/recipes/244)
投稿者：[@jun40vn](https://twitter.com/jun40vn)さん
１枚の静止画を動画に合わせて動かす「**Motion Representations for Articulated Animation**」についてモデル概要を説明し、Google Colabratoryで実装する方法を学べます。

静止画と動画を入力して、CNNを使った領域予測器によりヒートマップを求めます。体のパーツ毎に基準に対して静止画と動画がどれだけズレているかを計算し、その次に各ピクセルを適切な位置に再配置することで、静止画を動画に合わせて動かす動画の合成処理を行います。

https://axross-recipe.com/recipes/244

### 12.[PF-AFNでバーチャル試着を実装するレシピ](https://axross-recipe.com/recipes/283)
投稿者：[@jun40vn](https://twitter.com/jun40vn)さん

バーチャル試着は、Eコマースやファッション画像編集などの分野で様々なアプリケーションが発表されており注目されていますが、従来手法では、パース（人間が人物画像を上半身、下半身、腕、顔、髪などに区分すること）が必要であり、パースのわずかな間違いが生成する画像の質を大きく左右するという課題がありました。

最近のディープラーニング研究では、パースを必要としない WUTONが提案されています。このレシピは、WUTONにさらに改良を加えた最新の**PF-AFN**のモデル概要を説明し、実装を通してバーチャル試着の技術を体験できます。

https://axross-recipe.com/recipes/283

### 13.[自分の表情や顔の動きに合わせて、キャラクターアバターを動かすレシピ](https://axross-recipe.com/recipes/200)
投稿者：[@kanikani](https://twitter.com/katkazzzzz)  さん
同じカテゴリの静止画と動画を使って、静止画を動画のように動かす、**FOMM（First Order Motion Model）モデル**を使用して、動画とWebカメラを通して、他人の顔画像や自分の顔画像を動かす画像処理の手法を学ぶことができます。

最終的には、Web接客のようなアバターを用いたサービス利用の実務を想定し、ZOOMで任意のアバター画像を表示し、自分の表情や顔の動きに合わせて動かしてみます。

https://axross-recipe.com/recipes/200

### 14.[MODNetで動画の背景を合成するレシピ](https://axross-recipe.com/recipes/462)
投稿者：[@12kaz](https://axross-recipe.com/users/7011)  さん
MODNetの技術概要を理解し、動画から背景を削除しバーチャル背景を合成する方法を学ぶレシピです。

背景合成によるコストを抑えたプロモーション動画作成、リモート会議中のバージョン背景合成に活用することができます。

https://axross-recipe.com/recipes/462
## 行動認識
### 15.[SlowFastを用いた人物の行動認識を行うレシピ](https://axross-recipe.com/recipes/249)
投稿者：[@lulu1351](https://axross-recipe.com/users/2261)さん
FacebookのAI研究チームが人の行動認識のために開発したAIモデル **SlowFast**をつかい、動画に映る人物の行動認識を行います。物体検出ライブラリ**Detectron2**を用いてSlowFastを実装し、カメラに映る人物の行動を認識する動画の物体検出の処理手法を学ぶことができます。

https://axross-recipe.com/recipes/249

### 16.[Openposeで動きの解析が可能なモーションキャプチャーを実装する](https://axross-recipe.com/recipes/471)
投稿者：[@Micolash](https://axross-recipe.com/users/5831) さん
YouTube動画を使用し、Openposeで人の動きの解析が可能なモーションキャプチャーの実装を行い、姿勢推定結果の簡単な精査を行います。

姿勢推定とは、人物の関節や骨格をはじめとした特徴点から座標データを検出し、人間の動きを可視化する技術で、
スポーツ選手のフォーム解析や、ダンス振付の矯正等に役立たせることができます。

https://axross-recipe.com/recipes/471

### 17.[PyMAFで動画から人の動きを3Dオブジェクトで推定するレシピ](https://axross-recipe.com/recipes/457)
投稿者：[@12kaz](https://axross-recipe.com/users/7011) さん
PyMAFの技術概要を理解し、動画から複数人の3Dオブジェクトを生成する方法を学ぶレシピです。

3D姿勢推定による作業員の作業負荷分析、姿勢情報の数値化によるリハビリ・ヘルスケア支援に活用することができます。


https://axross-recipe.com/recipes/457


## ジェスチャー推定
### 18.[MediaPipeを利用して簡単なジェスチャーを推定するレシピ](https://axross-recipe.com/recipes/136)
投稿者：[@高橋かずひと](https://twitter.com/KzhtTkhs)さん
**MediaPipe**を使って手のランドマークを検出し、ランドマークを元に動画上の簡単なジェスチャー認識を行う方法を学ぶことができます。

非接触操作システムでの活用例を参考にして、人差指の指先の軌跡から「静止」「時計回り」「反時計回り」の3種類のジェスチャーを認識するプログラムを作ります。ジェスチャー学習用データの取得から、ジェスチャー分類モデルの定義、作成、動作確認までの一連の開発を体験できます。

https://axross-recipe.com/recipes/136

## 姿勢推定
### 19.[MoveNetのキーポイントからボディランゲージを読み取るレシピ](https://axross-recipe.com/recipes/326)
投稿者：[@高橋かずひと](https://twitter.com/KzhtTkhs) さん
TensorFlow Hubを用いた学習済モデルを利用し、高速な姿勢推定モデル**MoveNet**によるキーポイントの取得と、キーポイントからのボディランゲージの認識を学ぶことができます。

ボディーランゲージの認識や、防犯カメラの動画に映る不審な行動検出に応用できます。

https://axross-recipe.com/recipes/326

### 20.[OpenPoseでプロ野球選手のバッティングフォームを分析するレシピ](https://axross-recipe.com/recipes/162)
投稿者：[@t25](https://axross-recipe.com/users/1185) さん

深層学習によって動画から人物検出や姿勢推定・骨格検出などができるシステム**OpenPose**を用いて、ソフトバンクホークス柳田選手のバッティング動画から「重心位置の軌跡」を推定し、リアルタイムフォーム分析を行います。

OpenPoseのインストールおよびビルド方法、MotionAnalysisの利用法、YouTube動画のダウンロード方法と再生法、ffmpegによる動画のトリミング方法、動画から重心位置の軌跡の表示方法などについて学ぶことができます。

https://axross-recipe.com/recipes/162

# 最後に

今回は、AxrossRecipeで学べる**深層学習で動画に映る対象物を検出するレシピ** を紹介しました。

AIを活用できる人材になるためのポイントは、
● 常に最新AI技術（モデルやライブラリ）やトレンド、ユースケースを**キャッチアップ**すること
● AIを使って何かアウトプットを出す**疑似体験**を繰り返すこと
● 様々なAI技術を動かしてみて**手触り感**を把握すること
だと思います。

ぜひAxrossのレシピを通して、プログラムの意味を考えながら写経（コードを実際に書き写す行為）し、実際に動くものをつくりながら学ぶことで、AIを活用できる人材が少しでも多く増やすことができたらと思います。
![アクロス広告最新版.jfif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/6ae66818-fdf8-3c5a-002c-97343c5c8bc7.jpeg)