LoginSignup
6
5

More than 1 year has passed since last update.

【YOLOv5】物体検出 斜めのバウンディングボックス

Last updated at Posted at 2022-11-24

目次

1.はじめに
2.開発環境
3.学習
4.データセット
5.学習
6.テスト
7.実行結果
8.おわりに
9.参考文献

1. はじめに

普通の物体認識だと左下の画像[1]のようなバウンディングボックスが得られると思うのですが、YOLOv5-obb[2]を使用すると右下の画像[1]のように斜めの物体に対しても検出できるみたいです。
(※obb:Oriented Bounding Boxes)
スクリーンショット 2022-11-24 20.33.49.png
今回は、roboflow[3] (学習用のデータアップロードからデータ整理、ラベリング、画像処理、学習、モデル配置、組み込み、アクティブラーニングまで一連で行えるプラットフォーム)にある、アメリカの手話のデータセット[4]を使って、斜めの物体検出をおこなってみました。この記事 [1]を参考にしてます。

2. 開発環境

実行環境としては、Google Colaboratoryを使用します。

3. 学習

YOLOv5-obbのリポジトリのインストール手順[5]に従って進めて行きます。まずはPytorchを使うための準備をします。(※cudaのバージョンは少なくとも10.0以上)

!pip3 install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1+cu113 -f [https://download.pytorch.org/whl/cu113/torch_stable.html](https://download.pytorch.org/whl/cu113/torch_stable.html)

YOLOv5-obbのリポジトリを複製します。

!git clone [https://github.com/hukaixuan19970627/yolov5_obb.git](https://github.com/hukaixuan19970627/yolov5_obb.git)

requirements.txtにあるものをインストールしてきます。

%cd /content/yolov5_obb/
!pip install -r requirements.txt

utils/nms_rotatedフォルダにあるsetup.py developを実行します。

%cd utils/nms_rotated
!python setup.py develop

4. データセット

roboflowにはたくさんのデータセットがあるのですが今回は、アメリカの手話のデータセット[4]のv2を使用します。まずは、データセット用のフォルダを作成します。

%cd /content
!mkdir /content/datasets/

そのあとは、アメリカの手話のデータセット[4]のページに行きます。
スクリーンショット 2022-11-24 19.16.26.png
右上のDownloadを押して、
スクリーンショット 2022-11-24 19.17.09.png
FormatをYOLOv5 Oriented Bounding Boxesを選択してContinueを押すと、
スクリーンショット 2022-11-24 19.18.49.png
このような感じのものが表示されるのでコピーして、Google Colaboratoryに貼り付けます。(※api_keyは隠してあります。)
スクリーンショット 2022-11-24 16.37.37.png

!pip install roboflow

%cd /content/datasets/

from roboflow import Roboflow
rf = Roboflow(api_key="cKLlAAZJcgnAhi3ybN53")
project = rf.workspace("team-roboflow").project("american-sign-language-poly")
dataset = project.version(2).download("yolov5-obb")

/content/datasets/American-Sign-Language-Poly-2のAmerican-Sign-Language-Poly-2の名前をroboflowに変更します。
スクリーンショット 2022-11-24 20.40.35.png
最終的に以下の構造になっていることを確認します(※画像のファイル名は異なる)
スクリーンショット 2022-11-24 16.45.25.png

5. 学習

今回は、Google Colaboratoryの90分対策として以下のEasy Auto Refresh[6]と呼ばれるChromeの拡張機能を使用しました。この拡張機能を使用することによって、任意の時間でページが再読込みされるようになります。

使用方法としては、上記の拡張ツールをChromeに追加すると、Easy Auto Refreshが選べるようになるので、クリックします。そうすると、右のようなものが表示されるので、再読込みする間隔を入れてstartを押します。この画像だと15分(900秒)ごとにページが再読込みされるようになります。

注意点としては、リロードの実行の1回目だけ、再読込み実行時に確認のウィンドウが出るので「再読み込み」ボタンを押すことです。
スクリーンショット 2022-11-24 20.41.41.png
startボタンを押した後は学習です。(※引数のオプションの詳細[7])

%cd /content/yolov5_obb/

!python train.py --data /content/datasets/roboflow/data.yaml --epochs 100 --batch-size 32 --img 416 --device 0 --exist-ok

30分ほどで学習が終わりました。

6. テスト

!python [detect.py](http://detect.py/) --weights 'runs/train/exp/weights/best.pt' --source '../datasets/roboflow/valid/images' --conf-thres 0.5 --img 416 --device 0 --agnostic

今回は確信度の閾値指定としてが0.50を指定しています。

7. 実行結果

まずは、/content/yolov5_obb/runs/train/exp/results.pngにある、学習の推移の画像です。(/content/yolov5_obb/runs/train/exp/results.pngにあります)mAP@0.5が0.7程度なので、ぼちぼちといったところでしょうか。
results.png

/content/yolov5_obb/runs/detect/exp/にある推定結果をランダムに表示するコードです。実行結果は以下の通りになります。

%cd /content/yolov5_obb/runs/detect/exp/

import os, random
random_file = random.choice(os.listdir("/content/yolov5_obb/runs/detect/exp"))

from IPython.display import Image
Image(random_file)

次に出力結果を見てみたいと思います。
スクリーンショット 2022-11-24 20.43.23.png
斜めのバウンディングボックスでしっかりと手話を検出することができました!

8. おわりに

今回は、アメリカの手話のデータセット[4]を使って、斜めの物体検出をおこなってみました。斜めでも物体を検出できるので色々と使い道がありそうです。最後までお読みいただき、ありがとうございました。

9. 参考文献

  1. https://blog.roboflow.com/yolov5-for-oriented-object-detection/
  2. https://github.com/hukaixuan19970627/yolov5_obb
  3. https://roboflow.com/
  4. https://universe.roboflow.com/team-roboflow/american-sign-language-poly/dataset/2
  5. https://github.com/hukaixuan19970627/yolov5_obb/blob/master/docs/install.md
  6. https://chrome.google.com/webstore/detail/easy-auto-refresh/aabcgdmkeabbnleenpncegpcngjpnjkc/related
  7. https://zenn.dev/gotty/articles/6bd35b25cf3bd9
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5