LoginSignup
28
21

More than 1 year has passed since last update.

Yolo最新モデルを使ってみよう

img.jpg

物体検出モデルYolov7(2022リリース)は、従来のYoloモデルに比べて高速かつ高精度と謳われています。

Yolov7による、推論、学習、検証のやり方です。

1、セットアップ

git clone https://github.com/WongKinYiu/yolov7.git # リポジトリをクローン
cd yolov7 # ディレクトリ内へ移動
pip install -r requirements.txt # 必要なpythonライブラリをインストール
wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt # 事前トレーニング済みの重みをダウンロード

2、推論

入力のパスを指定して実行します。

python detect.py --weights yolov7.pt --source inference/images/horses.jpg
# --sourceに自前の画像や画像ディレクトリ、動画ファイルのパスを指定する

runs/detect/exp/
に推論結果画像が保存されます。

3、学習

トレーニング用の重みをダウンロードする

wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6e_training.pt

データを用意する

データは

・画像
・画像に対応するアノテーション・テキスト・ファイル

を画像フォルダとテキスト・フォルダに分けて、同じ名前で用意します。
例えば、image1.jpgに対応するimage1.txtというアノテーション・テキスト・ファイルを作ります。

アノテーション・テキスト・ファイルには、オブジェクトごとに1行ずつ、以下を記述します。

class x_center y_center width height

ボックス座標は、正規化されたxywh形式(0〜1)である必要があります。
ボックスがピクセル単位の場合は、画像の幅と画像の高さで割ります。
クラス番号は0から始まります。

以下のようなアノテーション・サービスを使って画像のボックスとラベルをテキストにします。

アノテーションが終わったら、以下のようなディレクトリ構成にまとめます。

trainはトレーニングに使うデータ
valはモデルの学習状況の検証に使うデータ
で、8:2程度で全体のデータを振り分けるのが一般的だと思います。

my_dataset
  |
  |__images
  |    |__train
  |    |    |__image1.jpg
  |    |    |__image2.jpg
  |    |    |__...
  |    |
  |    |_val
  |         |__val_image1.jpg
  |         |__val_image2.jpg
  |         |__...
  |
  |    
  |__labels
       |
       |__train
       |    |__image1.txt
       |    |__image2.txt
       |    |__...      
       |
       |__val
            |__val_image1.txt
            |__val_image2.txt
            |__...

Configファイルの記述

トレーニングの構成を指示するファイルを作ります。.yaml ファイルに以下を記述します。

custom.yaml
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: my_dataset/images/train/
val: my_dataset/images/val/

# number of classes
nc: 3

# class names
names: [ 'my_class_0', 'my_class_1', 'my_class_2']

モデルの大きさによって、二種類のトレーニングスクリプトから選んで実行します。

--cfg はcfgフォルダからモデルの種類に合わせて指定します。
--weight は、自分が使いたいモデルのweightをリポジトリからダウンロードします。
--data は上の手順で作った独自データセットのyamlファイルを指定します。
--projectと--nameで指定したフォルダに結果の重みと数値表が保存されます。

トレーニング中にメモリ不足でエラーになった場合はbatch-sizeを小さくして実行すると、学習できます(2のn乗の値にする)

p5モデル(入力サイズ640のモデル)

python train.py --workers 8 --device 0 --batch-size 32 --data data/custom.yaml --img 640 640 --cfg cfg/training/yolov7.yaml --weights 'yolov7_training.pt' --name yolov7-custom --hyp data/hyp.scratch.custom.yaml --project "runs/"

p6モデル(入力サイズ1280のモデル)

python train_aux.py --workers 8 --device 0 --batch-size 16 --data data/custom.yaml --img 1280 1280 --cfg cfg/training/yolov7-e6e.yaml --weights 'yolov7-e6e_training.pt' --name yolov7-e6e --hyp data/hyp.scratch.custom.yaml --project "runs/"

検証

--weight にトレーニングで保存されたweightを指定します。
--data に検証用のデータセットパスを記載したyamlファイルを指定します。

python test.py --device 0 --batch-size 2 --data data/val_custom.yaml --img-size 640  --weights "runs/yolov7/exp/weights/last.pt"

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

機械学習、ARアプリ(Web/iOS)を作っています。
機械学習/AR関連の情報を発信しています。

Twitter
Medium
GitHub

28
21
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
28
21