6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

YOLOv7で自作データセットを学習してみた

Posted at

はじめに

はじめまして。今回が初投稿になります。
データサイエンスに興味があり、勉強も兼ねてこれから投稿していこうと思います。
よろしくお願いします。

今回は ①自作データセットを準備 し、 ②YOLOv7で学習+物体検出 に挑戦してみました。

環境

Google Colaboratoryの無料枠を使用しました。
Googleアカウントがあれば手軽に始められるので便利ですよね。

①自作データセットを準備

今回はYOLOv7で自宅で飼っている犬を判別していこうと思います。
まずは、↓こんな感じにiPhoneを使って飼い犬の画像を準備します。

image.png

画像サイズが大きいと学習に時間がかかるため、320x320にリサイズしています。
画像形式はjpeg形式にしています。

アノテーションの設定

VoTTを使用して、バウンディングボックスで犬にタグ付けを行っていきます[1]。タグ付けが完了したら結果をVoTT JSON形式でエクスポートします。

image.png

次にroboflowを使って、先ほどのVoTTのエクスポート結果をYOLOv7用に変換します[2,3]。
変換時にデータセットをトレーニングデータとバリデーションデータに分割できます。
今回は合計39枚の画像をトレーニングデータ:30枚、バリデーションデータ:9枚になるように分けました。

roboflowによる変換後のデータはzipでダウンロードします。
その際に、データフォーマットが選べるので「YOLO v7 PyTorch」を選択します。

スクリーンショット 2023-01-15 10.42.05.png

zip解凍後のディレクトリ構造は以下のようになっていました。

myDog.v1i.yolov7pytorch/
├─ data.yaml
├─ README.dataset.txt
├─ README.roboflow.txt
├─ train/
│  ├─ images/
│  │  ├─ XXX.jpg
│  │  └─ ...
│  └─ labels/
│     ├─ XXX.txt
│     └─ ...
└─  valid/
   ├─ images/
   │  ├─ XXX.jpg
   │  └─ ...
   └─ labels/
      ├─ XXX.txt
      └─ ...

ここまででデータセットの作成が完了です。

②YOLOv7で学習+物体検出

以下であげていただいているソースを使用して、学習と物体検出を行っていきます。
コマンドについては[4,5]を参考にしました。

実行環境の準備

作業ディレクトリに移動し、cloneします。

cd /content/drive/MyDrive
!git clone https://github.com/WongKinYiu/yolov7

cloneしたフォルダに移動し、実行に必要なパッケージをダウンロードします。
その後、学習済みの重みをダウンロードします。

cd yolov7
pip install -r requirements.txt
!wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6e.pt

次に先ほど作成したデータセットを配置していきます。
まずはデータセットを配置するためのフォルダ(dataset)を作成します。

mkdir dataset

datasetの下に自作データセットのtrainとvalidを配置します。
またdataの下にも同じく先ほど作成されたdata.yamlを配置します。

drive/
└─ MyDrive/
   └─ yolov7/
      ├─ dataset/
      │  ├─  train/
      │  │   ├─ images/
      │  │   │  ├─ XXX.jpg
      │  │   │  └─ ...
      │  │   └─ labels/
      │  │      ├─ XXX.txt
      │  │      └─ ...
      │  └─  valid/
      │      ├─ images/
      │      │  ├─ XXX.jpg
      │      │  └─ ...
      │      └─ labels/
      │         ├─ XXX.txt
      │         └─ ...
      ├─ data
      │  ├─  data.yaml
      │  └─ ...
      └─ ...

トレーニングデータとバリデーションデータを取得するため、data.yamlに記載されているパスの変更が必要です。

(変更前)
train: ../train/images
val: ../valid/images

(変更後)
train: /content/drive/MyDrive/yolov7/dataset/train/images
val: /content/drive/MyDrive/yolov7/dataset/valid/images

自作データセットで学習

先ほど配置したtrain内のデータを用いて学習します。

!python train_aux.py --workers 8 --batch-size 16 --data data/data.yaml --cfg cfg/training/yolov7-e6.yaml --weights 'checkpoints/yolov7-e6.pt' --name yolov7-e6-myDog --hyp data/hyp.scratch.p6.yaml --epochs 200 --device 0

学習済みモデルで推論

valid内のデータを用いて推論します。
結果の保存先は「yolov7/runs/detect/(任意のフォルダ名)」になります。

!python detect.py --weights runs/train/yolov7-e6-myDog/weights/best.pt --conf 0.25 --img-size 640 --source dataset/valid/images --name exp-yolov7-e6-myDog-valid

以下のような推論結果になりました。
myDogというタグがついたバウンディングボックスで、飼い犬を検出することができました。

おわりに

最後までご覧いただきありがとうございました。
今回は ①自作データセットを準備 し、 ②YOLOv7で学習+物体検出 に挑戦してみました。
次回も同じく手を動かしてみた内容を投稿できればと思います。
(この記事を書いている間に最新verの「YOLOv8」が出たようなのでこちらも動かしてみたいですね)

参考文献

[1]【物体検出】アノテーションツールVoTTの使い方
https://sleepless-se.net/2019/06/21/how-to-use-vott/
[2]アノテーションツール VoTT を使って YOLOv5 の学習データセットを作る
https://konchangakita.hatenablog.com/entry/2020/08/24/220000
[3]How To Convert VoTT JSON to YOLOv7 PyTorch TXT
https://roboflow.com/convert/vott-json-to-yolov7-pytorch-txt
[4]YOLOv7を使って自作データセットで物体検出してみた
https://dev.classmethod.jp/articles/yolov7-train-with-customize-dataset/
[5]【物体検出2022】YOLO最新版のYOLOv7を試してみる 〜デモから学習まで〜
https://qiita.com/hkwsdgea_ttt2/items/ba352f6e5ef6032b5dc9)

6
7
1

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
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?