こんにちは!データサイエンティストのウマたん(@statistics1012)です!
この記事では物体検出の領域で非常に有名なYOLOについて解説していきます。
それでは見ていきましょう!
以下のYoutube動画でも解説していますので合わせてチェックしてみてください!
YOLOとは?
YOLOとは画像内の物体を検出するための手法であり、自動運転や不良品検知など様々な領域で活用されています。
「You Only Look Once」という文字列の頭文字を取ったもので、直訳すると「一度見るだけでよい」となります。
人間も一度見るだけでその視野内の物体を認識できる能力を有していますが、それと同じ能力を持たせたモデルという意味合いでYOLOという名称が名付けられました。
YOLOでは、以下のように画像内に映る対象がどんな対象なのかを判定することができます。
セマンティックセグメンテーションやインスタンスセグメンテーションでは、対象物の輪郭まで明らかにする一方でYOLO対象を長方形で囲んで示します。
・セマンティックセグメンテーション
・YOLO
この長方形のことをバウンディングボックスと呼び、YOLOは対象物の輪郭まで判別する必要がなくザックリ特定すればよいことからセマンティックセグメンテーションなどに比べて高速な物体検出が可能になっているのです!
YOLOの仕組みをザックリ見ていこう!
それでは、YOLOの仕組みについてザックリ見ていきましょう!
YOLOの初期論文は2016年に発表されました。論文は以下です。
実はYOLOは現時点(2024年1月)でv7まで手法が発表されているのですが、初期論文の著者はv3時点で研究を終了して他の人が引き継ぐかたちになっています。最新の論文は「https://arxiv.org/pdf/2207.02696.pdf」
論文から引用したYOLOによる物体検出のイメージが以下です。
(出典:You Only Look Once: Unified, Real-Time Object Detection)
まず一番左の処理で、画像を細かいグリッドに分けています。
そしてその上で2つに分岐していて、上の処理ではたくさんのバウンディングボックスが表示されていることがわかります。
上部の処理では対象物の中心位置と高さと幅を推定して囲うバウンディングボックスを生成しています。
よーく見ると薄い線と濃い線があることが分かると思うのですが、濃いバウンディングボックスが信頼度の高いものになります。
続いて、下の処理では対象物のクラスを色分けしています。
これらの「対象物の位置検出」と「対象物のクラス分類」の2つの処理を組み合わせで対象物の位置とクラス分類が実現できているのです!
詳しい解説は他の記事に譲りますが、実はYOLO登場前は画像の中から特定の領域を抽出してその上で対象物を分類する2ステージ型と呼ばれる手法が主流でした。
しかしYOLOではステージ1の領域抽出をすることなく画像全てから対象物を特定するアプローチを取りブレークスルーを引き起こしました。
詳しくは以下の記事を読んでみてください。
YOLOをPythonで動かしてみよう!
それではそんなYOLOをPythonで動かしてみましょう!
YOLOをゼロから実装して学習するとなると多量なデータとマシンパワーと時間がかかってしまいますので事前学習モデルを使っていきましょう!
以下の公式のGithubページに実装方法が書いてあるのでこちらを参考にしながら動かしていきます。
このGithubページに載っているGoogle Colab(YOLOv7Detection.ipynb)を立ち上げていきましょう。
そのまま上から動かせば問題なくYOLOが動かせます。
やってることは基本的にGithubのリポジトリをクローンしてきてその中にある重みパラメータをダウンロードしてdetect.pyのPythonファイルを実行しているだけです。
以下の部分でdetect.pyを実行しています。
!python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/bus.jpg
confはモデルが物体を検出したときの最低限の信頼度(確信度)。この値が低いほど、より多くの物体が検出されますが、誤検出の可能性も高まります
このコードを実行すると、yolov7フォルダ内のinferenceのimagesというディレクトリ内の指定した画像にYOLOをかけます。
するとruns>detect>exp内に出力結果が格納されます。
再度実行するとexp[数字]という別のディレクトリが生成されるような仕様になっているので注意してください。
inference>imagesの中に画像を投入してディレクトリを変更することで画像の物体検出が可能です。
先程示した物体検出の画像はこのコードを実装して出力したものになります。
ぜひ色んな画像で試してみましょう!
YOLO まとめ
ここまででYOLOについて解説してきました!
非常に重要な手法なのでしっかり理解しておきましょう。
さらに詳しくAIやデータサイエンスの勉強がしたい!という方は当サイト「スタビジ」が提供するスタビジアカデミーというサービスで体系的に学ぶことが可能ですので是非参考にしてみてください!
AIデータサイエンス特化スクール「スタアカ」
【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ SQLとPythonを組み合わせて実データを使った様々なワークを行う マーケティングの実行プラン策定 マーケティングとデータ分析の掛け合わせで集客マネタイズ |
データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!
24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!
カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!
他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。
そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!
Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!
ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ