YOLOを活用した物体検出レシピ紹介

Axross Recipeを運営している松田です。
今回は、リアルタイム物体検出のディープラーニングアルゴリズムである**YOLO**を解説し、YOLOを活用したレシピについて紹介します。

# YOLOの仕組み
## YOLOとは
YOLOはリアルタイムオブジェクト検出アルゴリズムです。YOLOという名前の由来は、「You Only Look Once」という英文の頭文字をつなげて作られた造語で、日本語に翻訳すると「一度見るだけで良い」という意味を持っています。

YOLOの物体認識の手法は、予め画像全体をグリッド分割しておき、各領域ごとで物体の種類と位置を求めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/e2508a31-595c-b3c7-900d-d38187c9b60d.png)
物体が多数写っている場合は、識別精度が低くなりますが、YOLOでは学習時に一枚の画像の全ての範囲を使うため、背景の誤検出は抑えることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/a51b3dea-21ee-c980-7633-a050bad75691.png)
YOLOは現在v５まで出ており、現在進行形で成長しています。
出典：[You Only Look Once:Unified, Real-Time Object Detection](https://arxiv.org/pdf/1506.02640.pdf)

## YOLOの特長
#### 処理が早い
YOLOは、解析したい画像をコンピューターにインポートするだけで、ニューラルネットワークを使用して画像の中に含まれている物体の領域を識別し、出力できます。YOLOによる物体検出の処理時間は、画像1枚あたり約22msで、他の物体検出モデル（Faster R-CNN）の6～7倍ほどの**高速化** を実現しています。

物体検出したい画像が入力された場合、まず、YOLOでは画像のリサイズ作業が行われます。YOLOの特徴として、画像は正方形にリサイズします。縦長や横長の画像も、正方形に一度リサイズすることで、ニューラルネットワークを使用した画像解析がしやすくなるメリットがあります。**正方形にリサイズした画像をさらに細かく正方形で分割**することも、YOLOのアルゴリズムの特徴です。正方形内に分割されたそれぞれの小さな正方形は**グリッド・セル**と呼ばれ、グリッド・セルの特徴を基にして物体の検出が進められていきます。グリッド・セルの内容から物体の種類が推定され、それぞれの推定がどれくらいの可能性で的中しているかを考慮しながら、さらに細かく画像の解析が行われていきます。

### 画像全体を見て予測できる
YOLOで画像に写っている物体の範囲を特定するために使用されているのがバウンディング・ボックスです。
バウンディング・ボックスとは、**画像の中に写されている各物体のおおよその範囲を決める**ために使用されるボックス型の図形です。
それぞれのバウンディング・ボックスには画像内の位置を表す座標軸が設定され、さらにそのボックス内に含まれているものが物体である可能性についても数値として計算されます。
この数値はコンフィデンス・スコアと呼ばれていますが、個々のボックス内の画像が物体か背景なのかを判断することにより、物体全体の大きさも推定できます。

### 推測技術の正確性が高い
YOLOでは、**グリッド・セルとバウンディング・ボックスの分析により得られたデータの結果を統合することにより、どのような物体が画像内に写っているかを特定** できます。
グリッド・セルの分析は個々のセルのクラス・プロバビリティを推測していくことにより行われますが、クラス・プロバビリティとはセル内に写っている物体が特定のクラスに属している可能性のことです。
この数値が高いほど、コンピューターの行ったクラス分けの正確性が高くなります。
このクラス・プロバビリティと前述のバウンディング・ボックスを統合することにより、画像内のどの範囲にどのような物体が写されているのかを大まかに推測することができます。

参考：[AI研：YOLOとは？物体検出の手法を大きく進化させたYOLOを徹底解説](https://ai-kenkyujo.com/yolo/)
## YOLOの欠点
YOLOは、分割されたグリッドサイズは固定かつ、グリッド内で識別できるクラスは1つであり、検出できる物体の数は2つという制約を設けているため、**グリッド内に大量のオブジェクトが映ってしまうような画像の場合** は、物体検出の精度が低くなります。

# YOLOの活用事例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/5b692f22-e4b6-a8a9-288e-cee1423d2eb0.png)
### 道路交通
- 自動運転
- 道路、交差点などの車両情報と位置を検出し、渋滞予測
- 電車の車両にいる人数と位置を検出し、混雑状況の把握

### 流通小売
- 来店顧客の属性分析
- ECサイトの商品画像の中の物体を検出し、自動的にサイトの適正な場所に配置する

### セキュリティ
- ユーザーがアップロードした画像について不適切な可能性があるコンテンツを検出する
- 人物の行動を把握し、不審行為を通報するシステム
- ドローンの空撮画像により、漁船や動物を監視する
- スタジアム内のマスクの未着用者を検出する

### スポーツ/エンタメ
- スポーツ時の選手の行動を計測する

### 医療
- レントゲン写真から、癌や病変領域を検出する

# YOLOを活用するレシピ紹介
Axrossで学べる**YOLOを活用したレシピ紹介**をご紹介します。
### YOLOv2
### [01_Yolo-v2とVGG16による料理認識レシピ](https://axross-recipe.com/recipes/101)
投稿者：[@belltree](https://axross-recipe.com/users/412)さん

料理の画像データを用い、YOLOv2によって物体検出の学習とVGG16のFine Tuningを行い、料理メニューを検出・判定する画像処理の実践的な手法を一通り学べるレシピです。

飲食店やグルメサイトなどで料理画像の分類に応用できます。

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

## YOLOv3
### [02_NVIDIA Jetsonを使ってYOLOv3で物体検知するレシピ](https://axross-recipe.com/recipes/159)
投稿者：[@Jun Ohashi](https://axross-recipe.com/users/599)さん

NVIDIA JetsonにOpenCVとdarknetをインストールし、YOLOv3でcoco datasetに登録されている画像の物体検知を行うレシピです。

Python等で映像(画像)の前処理や検出した座標情報を使った後処理などを行うことで、物体検知に活用できます。

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

## YOLOv4
### [03_画像/動画の物体検出を通じて、YOLOv4の技術性能と使い方を学べるレシピ](https://axross-recipe.com/recipes/145)
投稿者：[@kanikani](https://axross-recipe.com/users/670)さん

YOLOv4 darknet（リアルタイムオブジェクト検出アルゴリズム）による静止画像、動画、Webカメラの身近な画像 それぞれにおける物体検出をおこない、YOLOv4のモデルアーキテクチャーと技術性能、使い方を学ぶことができます。

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

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

### [04_オリジナルデータにおける「物体検出モデル YOLOv4」の学習と検出](https://axross-recipe.com/recipes/340)
投稿者：[@Micolash](https://axross-recipe.com/users/5831)さん

Python + AI技術の学習として，オリジナルデータにおけるYOLOv4による物体検出の学習と検出実行を学べるレシピです。

人流解析、歩行者分析や交通量調査などに活用できます。

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

### [05_YOLOv4でkerasを用いて転移学習を実装する(YOLOv4上級編)](https://axross-recipe.com/recipes/373)
投稿者：[@Micolash](https://axross-recipe.com/users/5831)さん

Yolov4による画像の物体検出の応用編として、転移学習を用いた学習方法を学べます。

学習データは、オープンデータCOCOを使用し、猫を検出する機械学習モデルを作成します。

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

## YOLOv5
### [06_YOLOv5 と転移学習を使ってマスクの着用者と非着用者の顔検出を行うレシピ](https://axross-recipe.com/recipes/218)
投稿者：[@lulu1351](https://axross-recipe.com/users/2261)さん

コンピュータービジョンの「物体検知」の王道とも言える YOLO (You Look Only Once) シリーズの新モデル YOLOv5 を活用し、近年需要が高い、マスクの着用者と未着用者の顔検出を学べるレシピです。

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

マスク着用者・未着用者の顔検出・顔認識や人体検知、モニター監視や自動運転の物体検出に活用できます。

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

## YOLO応用
### [07_DeepSORTを用いた人物のトラッキングを行うレシピ](https://axross-recipe.com/recipes/247)
投稿者：[@lulu1351](https://axross-recipe.com/users/2261)さん

YOLO(物体検出)、ReId(同一人物照合)、SORT(トラッキング)のアルゴリズムが組み合わせた、DeepSORTのアーキテクチャーを用いて、動画に映る人物の追跡を学べるレシピです。

商業施設やイベント会場などでの人の流れ・巡回の解析、人と人との距離、密集度合、群衆の人流統計などに活用できます。

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

### [08_YOLOX-NanoをRaspberry Pi4で実行するレシピ](https://axross-recipe.com/recipes/352)
投稿者：[@高橋かずひと](https://axross-recipe.com/users/802)さん

高速・高精度な物体検出モデルであるYOLOXをONNX形式に変換し、Raspberry Pi4で推論するレシピです。

実務では、エッジデバイスでの物体検出(AI監視カメラなど)に応用することができます。

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

# 最後に
プログラミングは「**習うより慣れろ、繰り返し演習すること**」が重要です。

Axross Recipeのレシピを通して、プログラムの意味を考えながら写経（コードを実際に書き写す行為）し、実際に動くものをつくりながら学ぶことで、新たな知識の習得やスキルアップの一助になれれば幸いです。
![アクロス広告最新版.jfif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/e4e4e662-3a57-281d-a70e-5d77906c79c0.jpeg)