1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

機械学習Advent Calendar 2024

Day 22

YOLOv5でのアノテーションから学習までの手順を徹底解説

Last updated at Posted at 2024-12-23

物体検出の分野で高い性能を発揮する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とクラス名の対応を定義します。

classes.txt
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
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ファイルを作成し、以下の内容を記述します。

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 ❌

解決方法:

  1. data.yamlのパスを確認:trainとvalのパスが正しいか確認します。
  2. フォルダの存在を確認:指定したパスに画像が存在するか確認します。
  3. 絶対パスの使用:相対パスで問題がある場合、絶対パスを使用します。

Label class exceeds nc エラー

エラーメッセージ

AssertionError: Label class 16 exceeds nc=5 in ./data.yaml. Possible class labels are 0-4

解決方法

  1. アノテーションのクラスIDを確認:クラスIDが0からnc-1の範囲内であることを確認します。
  2. data.yamlのncを修正:必要に応じてクラス数を増やします。

例:アノテーションファイルでクラスIDが16となっている場合、ncを17に増やすか、クラスIDを正しい値に修正します。

おわりに

これで、YOLOv5を使った物体検出モデルの学習手順を理解できたと思います。初めて取り組むとエラーが発生しがちですが、エラーメッセージを読み解き、適切に対処することで問題を解決できます。自分だけのデータセットでモデルを作成し、さまざまな応用に挑戦してみてください。

参考リンク

注意点

  • 学習データはJPEGやPNGが混在していても問題ありません。
  • 画像とアノテーションファイルの名前は一致させてください。

最後に、この記事が、YOLOv5でのモデル学習に挑戦する皆さんの助けになれば幸いです。分からないことやエラーが出た場合は、公式ドキュメントやコミュニティを活用してみてください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?