LoginSignup
1
0

More than 1 year has passed since last update.

手順

データセットを用意

以下の形式で用意します。

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
            |__...

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

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

class x_center y_center width height

ボックス座標は、0〜1に正規化されたxywh形式です。
クラス番号は0から始まります。

以下のようなアノテーション・サービスを使ってYolo用のアノテーション・ファイルを生成できます。

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

備考:

以前にyolov5などをトレーニングしたデータセットである場合、labelsディレクトリに.cacheファイルが残っていて以下のエラーが出ることがあるので、その場合は.cacheファイルを削除します。

_pickle.UnpicklingError: STACK_GLOBAL requires str

Configファイルの記述

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

・画像パス
・クラス数
・クラス名の配列

を記述します。

train: ./datasets/my_dataset/images/train  # トレーニング画像ディレクトリ
val: ./datasets/my_dataset/images/val # 検証画像ディレクトリ
test:  # テスト画像ディレクトリ(オプション)

# Classes
nc: 80  # number of classes
names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
         'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
         'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
         'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
         'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
         'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
         'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
         'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
         'hair drier', 'toothbrush' ]  # class names

Yolov7のセットアップ

git clone https://github.com/WongKinYiu/yolov7.git  # clone
cd yolov7
pip install -r requirements.txt # install modules
wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt # download pretrained weight

モデルの事前トレーニング済みウェイトは公式リポジトリからダウンロードできます。

備考:

Colabなど、使用環境によってはGPUメモリが不足することがあります。その場合は、バッチサイズを小さくすると学習できます。

トレーニング

python train.py --workers 8 --device 0 --batch-size 32 --data data/coco.yaml --img 640 640 --cfg cfg/training/yolov7.yaml --weights 'yolov7.pt' --name yolov7 --hyp data/hyp.scratch.p5.yaml

モデルには、サイズと精度に応じて幾つか種類があり、モデルごとにconfigファイルがリポジトリに用意されているので、
事前トレーニング済みモデルとconfigファイルの種類を合わせて実行します。

学習が終わると、run/expに結果の重みとログが保存されます。

🐣


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

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

Twitter
Medium
GitHub

1
0
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
1
0