物体検出でお馴染みのYOLOシリーズの「YOLOv6」について、動かしながら試していきます。

2023年1月に公開された最新バージョンであるYOLOv6(v3.0)は、YOLOv7やYOLOv8の性能を上回っています。

Google colabを使用して簡単に最新の物体検出モデルを実装することができますので、ぜひ最後までご覧ください。

今回の内容

・YOLOv6とYOLOv6(v3.0)の概要

・推論時の引数について

YOLOv6とは

YOLOv6は2022年9月に公開されました。

性能をあまり落とさずに推論速度を向上させるため、ポストトレーニング量子化(PTQ)や量子化考慮学習(QAT)などの手法が用いられています。

YOLOv6(v3.0)

YOLOv6(v3.0)は2023年1月に公開されました。

YOLOv6をベースに、アンカーベースとアンカーフリーの両方の利点を享受するためのアンカー補助学習(AAT)や小型モデルの性能を向上させるために、新たな自己蒸留手法といった改良が加えられています。

こうした改良により、YOLOv7やYOLOv8の性能を上回っています。

引用:https://github.com/meituan/YOLOv6

詳細は以下のリンクからご確認ください。

YOLOv8のベンチマーク結果は以下となっています。

物体検出モデル

なお、YOLOv6のライセンスは「GNU General Public License v3.0」となっています。

YOLOv6(v3.0)の導入

早速YOLOv6(v3.0)を使って動かしていきましょう。

ここからはGoogle colabを使用して実装していきます。

まずはGPUを使用できるように設定をします。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

GPUの設定が終わったら、Googleドライブをマウントします。

from google.colab import drive
drive.mount('/content/drive')
%cd ./drive/MyDrive

公式よりcloneしてきます。

!git clone https://github.com/meituan/YOLOv6
%cd YOLOv6

次に必要なライブラリをインポートします。

ここではpipでインストールすることにします。

!pip install -r requirements.txt

最後に学習済みモデルをダウンロードしておきます。

!wget https://github.com/meituan/YOLOv6/releases/download/0.3.0/yolov6l6.pt

以上で準備完了です。

YOLOv6(v3.0)を使えるようになりました。

推論時の引数

推論時の引数には以下のようなものがあります。

ここからは代表的なものをいくつか紹介します。

引数デフォルト内容
–weightsweights/yolov6s.ptweightsを指定
–sourcedata/imagessourceを指定
–yamldata/coco.yamlyamlを指定
–img-size640 ,640入力サイズ
–conf-thres0.4スコアの閾値を設定
–iou-thres0.45IoUの閾値を設定
–max-det1000最大検出数を設定
–device0使用するデバイス
–save-txt結果をテキストに保存
–not-save-img結果を保存しない
–save-dir保存先または保存名
–view-img結果を表示
–classes検出する対象を指定
–projectruns/inference保存先
–nameexp保存先
–hide-labelsFalseラベルを表示しない
–hide-confFalseスコアを表示しない

まずは通常の推論結果です。

!python tools/infer.py --weights yolov6l6.pt --img 1280 1280 --source data/images/zebra.jpg

「conf-thres」スコアの閾値を設定する

検出する際の閾値を設定することができます。

以下の例では、スコアが0.9以上を検出します。

!python tools/infer.py --weights yolov6l6.pt --img 1280 1280 --source data/images/zebra.jpg --conf-thres 0.9

「max-det」最大検出数を設定する

検出する対象の最大数を設定できます。

以下の例では、スコアが高い順に最大3番目までを検出します。

!python tools/infer.py --weights yolov6l6.pt --img 1280 1280 --source data/images/zebra.jpg --max-det 3

「save-txt」結果テキストファイルとして出力する

結果をテキストファイルとして出力することができます。

!python tools/infer.py --weights yolov6l6.pt --img 1280 1280 --source data/images/zebra.jpg --save-txt
# label,x_center,y_center,width,height,score

22 0.187187 0.457317 0.021875 0.0159475 0.426674
22 0.46 0.471857 0.03 0.0243902 0.434839
22 0.860937 0.487336 0.015625 0.0272045 0.478858
22 0.9 0.4803 0.02375 0.0262664 0.511055
22 0.552188 0.471857 0.025625 0.0243902 0.51823
22 0.837812 0.487805 0.031875 0.0262664 0.523209
22 0.875938 0.525797 0.033125 0.0272045 0.551033
22 0.755313 0.469043 0.034375 0.0243902 0.56618
22 0.801562 0.465291 0.026875 0.0225141 0.678525
22 0.559687 0.562383 0.065625 0.141651 0.870663
22 0.915 0.533302 0.05875 0.0515947 0.873532
22 0.612813 0.566604 0.046875 0.140713 0.886627
22 0.496875 0.565197 0.07 0.194184 0.909663
22 0.66125 0.559099 0.05375 0.150094 0.913329
22 0.785312 0.553471 0.126875 0.129456 0.919571
22 0.215937 0.621013 0.218125 0.277674 0.939571
22 0.389375 0.601313 0.0925 0.225141 0.947244

「–classes」検出対象を指定する

特定の対象のみを検出したい場合に使用します。

以下の例では、猫のみを検出します。

!!python tools/infer.py --weights yolov6l6.pt --img 1280 1280 --source data/images/dog.jpg --classes 15

左は「–classes」を指定しない場合、右は「–classes」を指定した場合の結果となります。

「–hide-labels」ラベルを表示しない

ラベルとスコアを非表示にします。

!python tools/infer.py --weights yolov6l6.pt --img 1280 1280 --source data/images/dog.jpg --hide-labels

まとめ

最後までご覧いただきありがとうございました。

2023年1月に公開された最新バージョンであるYOLOv6(v3.0)について、動かしながら試してみました。

精度・推論速度ともに向上しており、非常に使いやすいものになっています。

物体検出の活用の幅がさらに広がりそうですね。

コメントを残す