🍊

YOLOv7でオレンジさん判別機を作る

2022/08/20に公開

やりたいこと

オレンジさんが本物か偽物か判別したいと思ったこと一度はありますよね?
環境はGoogle Colabを使います
画像認識にはYOLOv7を使用します

準備

Google Colabは以下からgoogleにログインすれば使えます
https://colab.research.google.com
ファイルからノートブックを新規作成すればOKです

今回はGoogleドライブにデータを置くようにしたので先にマウントしておきます
Google Colabにも置けますが時間がたつと削除されるようです
マウントはGoogle Colabからドライブのマウントボタンを押すだけです

学習もするのでランタイムのタイプを変更しておきます
メニューの ランタイム->ランタイムのタイプを変更 からハードウェアアクセラレータをGPUにしておきます

YOLOv7を使ってみる

YOLOv7のインストール

githubからYOLOv7をcloneしてライブラリをインポートします
以下のコードをGoogle Colabに1行ずつ打ち込んでいきます

コード
!git clone https://github.com/WongKinYiu/yolov7.git
%cd yolov7
!pip install -r requirements.txt

動作確認

画像ファイルはGoogle Colabの画面にDrag&Dropすればアップロードできます
画像ファイルを右クリックでパスが取れるのでそれを--sourceに指定します
--sourceには画像、動画、フォルダなど指定できるようです

そして以下を実行

コード
!python detect.py --source [[アップロードした画像のパス]]

ログに出力結果のパスが出ているのでそれを確認します
おそらく以下のところにあります

/content/yolov7/runs/detect/exp/[[画像のファイル名]]

ダブルクリックすれば画像の確認ができます
画像に枠とラベルが追加されていればOKです

YOLOv7で学習する

データの準備

用意するのものは画像とアノテーションファイルです

画像は各自用意してください
アノテーションファイルの作成にはLabelImgを使用しました

LabelImgは以下からwindows版がダウンロードできます
https://github.com/heartexlabs/labelImg/releases

data/predefined_classes.txt ファイルに今からつけるラベルを入れておきます

predefined_classes.txt
orange
not orange

画像ごとに矩形を選択しそれぞれにラベルを付けていきます
左のOpenDirのボタンから画像のフォルダと出力先のフォルダを選択してラベルを付けていきます
以下のショートカットキーが便利

キー 動作
A 前の画像
D 次の画像
W 矩形選択

ラベル付けが終わるとclasses.txtファイルと各画像ごとにtxtファイルが作成されます

データのアップロード

作ったデータをGoogleドライブにアップロードします
フォルダ構成は以下のようにします
学習用と検証用にフォルダを分けます
7~8割を学習用、残りを検証用にするのが流行らしいです

orange
  |__orange.yaml
  |__train
  |    |__image001.jpg
  |    |__image001.txt
  |    |__    :
  |_val
       |__image002.jpg
       |__image002.txt
       |__    :

orange.yamlの中身は以下の通り
フォルダ等各自の環境に合わせてください
namesには上でできたclasses.txtのラベルを並べておきます

orange.yaml
train: /content/drive/MyDrive/datas/orange/train  # 学習用画像フォルダ
val: /content/drive/MyDrive/datas/orange/val # 検証用画像フォルダ

# Classes
nc: 2  # ラベルの数
names: [ 'orange', 'not orange' ]

学習する

以下のコードを打ち込みます
パラメータの意味は良く分かりません
--dataに上で作ったorange.yamlを指定します

コード
!python train.py --img 640 --batch 16 --epochs 200 --data /content/drive/MyDrive/datas/orange/orange.yaml --weights yolov7.pt

結構時間がかかると思います
用意したデータが20枚ほどで30分弱かかりました

学習結果の確認

動作確認で行ったのと同じです
学習したモデルを使用するので--weightsの指定をします
学習した時のログにモデルのファイルが表示されているのでそれを使います

コード
!python detect.py --source [[確認したい画像のパス]] --weights /content/yolov7/runs/train/exp6/weights/best.pt

うまく判別できませんでした
偽物も精巧に作られているようです
もしかしたらみんな本物かもしれません

Discussion