物体検出の分野で高い性能を発揮するYOLOv5を使って、自分だけのデータセットでモデルを学習させたいと思ったことはありませんか?この記事では、初心者の方でも理解できるように、YOLOv5でのアノテーション方法から学習の実行、そしてよくあるエラーの解決方法までを詳しく解説します。
はじめに
YOLOv5は、リアルタイム物体検出において高い性能を持つモデルです。
自分のデータセットでモデルを学習させることで、特定のタスクに特化した物体検出器を作成できます。
しかし、初めて取り組む場合、データの準備や学習の設定でつまずくことも多いでしょう。
この記事では、その手順をステップバイステップで説明します。
アノテーションの準備
データセットの構造
まず、YOLOv5が期待するデータセットのフォルダ構造を理解しましょう。以下のようにフォルダを整理します。
dataset/
├── images/
│ ├── train/ # 訓練用画像
│ └── val/ # 検証用画像
└── labels/
├── train/ # 訓練用アノテーション
└── val/ # 検証用アノテーション
- images/train: モデルの学習に使用する画像を配置します。
- images/val: 学習中のモデルの性能を評価するための画像を配置します。
- labels/train: 訓練用画像に対応するアノテーションファイル(.txt形式)を配置します。
- labels/val: 検証用画像に対応するアノテーションファイルを配置します。
各画像に対して、同じ名前のアノテーションファイルを作成します。
例えば、images/train/cat.jpgに対しては、labels/train/cat.txtを用意します。
クラスファイルの作成
classes.txtファイルを作成し、各行にクラス名を記述します。
このファイルはクラスIDとクラス名の対応を定義します。
opa
jesus christ
sumaho
moukona
jinnnai
クラスIDは0から始まるため、この例では以下のようになります。
- opa → クラスID 0
- jesus christ → クラスID 1
- sumaho → クラスID 2
- moukona → クラスID 3
- jinnnai → クラスID 4
環境構築と必要なライブラリのインストール
Ubuntuなどの環境では、システムPythonへのパッケージインストールが制限されている場合があります。そのため、仮想環境を作成して進めることをおすすめします。
仮想環境の作成
python3 -m venv yolov5_env
仮想環境のアクティブ化
source yolov5_env/bin/activate
Gitからyolov5をClone
git clone https://github.com/ultralytics/yolov5
cd yolov5
必要なライブラリのインストール
pip install -r requirements.txt
仮想環境の終了
仮想環境を終了する場合は以下を実行する。
deactivate
学習の実行
train.pyのパラメータ解説
YOLOv5の学習を行う際、train.pyを以下のように実行します。
python train.py --img 640 --batch 4 --epochs 50 --data ./data.yaml --cfg yolov5s.yaml --weights yolov5s.pt --name custom_model
各パラメータの説明:
-
--img 640
: 画像サイズを640×640に設定。 -
--batch 4
: バッチサイズを4に設定(GPUメモリに応じて調整)。 -
--epochs 50
: 学習エポック数を50に設定。 -
--data ./data.yaml
: データセットの設定ファイルを指定。 -
--cfg yolov5s.yaml
: モデルの構造を定義するファイルを指定。 -
--weights yolov5s.pt
: 事前学習済みの重みを使用。 -
--name custom_model
: 学習結果の保存先フォルダ名を指定。
学習の開始
data.yamlの作成
data.yamlファイルを作成し、以下の内容を記述します。
train: /path/to/dataset/images/train
val: /path/to/dataset/images/val
nc: 5 # クラス数
names: ['opa', 'jesus christ', 'sumaho', 'moukona', 'jinnnai']
- trainとvalには、それぞれ訓練用と検証用画像のパスを指定します。
- ncはクラス数を指定します。
- namesにはクラス名のリストを指定します。
学習の実行
下記のコマンドを実行して学習を開始します。
python train.py --img 640 --batch 4 --epochs 50 --data ./data.yaml --cfg yolov5s.yaml --weights yolov5s.pt --name custom_model
よくあるエラーとその解決方法
Dataset not found エラー
エラーメッセージ
Dataset not found ⚠️, missing paths ['/path/to/dataset/images/val']
Exception: Dataset not found ❌
解決方法:
- data.yamlのパスを確認:trainとvalのパスが正しいか確認します。
- フォルダの存在を確認:指定したパスに画像が存在するか確認します。
- 絶対パスの使用:相対パスで問題がある場合、絶対パスを使用します。
Label class exceeds nc エラー
エラーメッセージ
AssertionError: Label class 16 exceeds nc=5 in ./data.yaml. Possible class labels are 0-4
解決方法
- アノテーションのクラスIDを確認:クラスIDが0からnc-1の範囲内であることを確認します。
- data.yamlのncを修正:必要に応じてクラス数を増やします。
例:アノテーションファイルでクラスIDが16となっている場合、ncを17に増やすか、クラスIDを正しい値に修正します。
おわりに
これで、YOLOv5を使った物体検出モデルの学習手順を理解できたと思います。初めて取り組むとエラーが発生しがちですが、エラーメッセージを読み解き、適切に対処することで問題を解決できます。自分だけのデータセットでモデルを作成し、さまざまな応用に挑戦してみてください。
参考リンク
注意点
- 学習データはJPEGやPNGが混在していても問題ありません。
- 画像とアノテーションファイルの名前は一致させてください。
最後に、この記事が、YOLOv5でのモデル学習に挑戦する皆さんの助けになれば幸いです。分からないことやエラーが出た場合は、公式ドキュメントやコミュニティを活用してみてください。