YOLOv7でオレンジさん判別機を作る
やりたいこと
オレンジさんが本物か偽物か判別したいと思ったこと一度はありますよね?
環境はGoogle Colabを使います
画像認識にはYOLOv7を使用します
準備
Google Colabは以下からgoogleにログインすれば使えます
ファイルからノートブックを新規作成すれば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版がダウンロードできます
data/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のラベルを並べておきます
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