yolov10/README.md
2024-08-21 09:16:21 +09:00

6.7 KiB

YOLOv10のファインチューニング

公式のリポジトリからフォークして、独自のデータセットでファインチューニングを行うためのリポジトリです。


Comparisons with others in terms of latency-accuracy (left) and size-accuracy (right) trade-offs.

YOLOv10: Real-Time End-to-End Object Detection.
Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han, and Guiguang Ding

Performance

COCO

Model Test Size #Params FLOPs APval Latency
YOLOv10-N 640 2.3M 6.7G 38.5% 1.84ms
YOLOv10-S 640 7.2M 21.6G 46.3% 2.49ms
YOLOv10-M 640 15.4M 59.1G 51.1% 4.74ms
YOLOv10-B 640 19.1M 92.0G 52.5% 5.74ms
YOLOv10-L 640 24.4M 120.3G 53.2% 7.28ms
YOLOv10-X 640 29.5M 160.4G 54.4% 10.70ms

Installation

環境

  • pyenv
  • Python 3.9.13 (公式のバージョンと合わせる)
  • cuda 11.8

Setup

1. リポジトリをクローン

git clone git@github.com:TechC-SugarCane/train-YOLOv10.git

cd train-YOLOv10

2. Pythonの環境構築

pyenvを使うので、パソコンに入っていない人はCONTRIBUTING.mdを参考にしながらインストールしてください。

pyenv install

3. 仮想環境を作成

python -m venv .venv

4. 仮想環境を有効化

# mac
source .venv/bin/activate

# windows
.venv\Scripts\activate

※ 環境から抜ける場合は、deactivateコマンドを実行してください。

5. 依存パッケージをインストール

# CPUで推論を行う場合
pip install -r requirements-cpu.txt

# GPUで推論を行う場合
pip install -r requirements-gpu.txt

# 共通
pip install -e .

6. デフォルトセッティングを変更

# datasetsのディレクトリを現在のディレクトリに変更
# デフォルトだと../datasetsが設定されている
yolo settings datasets_dir=.

Training

事前学習済みモデルとしてyolov10x.ptを使用するので、公式GitHubのリリースからダウンロードしてweightsディレクトリに配置してください。

学習に使用するデータセットはRoboflowというサービスを使用して作成しています。

学習や評価に使用するデータセットは、

にありますが、手動でダウンロードするのは面倒なのでhuggingfaceにdatasetsをまとめてあります。

下記コマンドを実行して、datasetsをダウンロードしてください。

# Make sure you have git-lfs installed (https://git-lfs.com)
git lfs install

git clone https://huggingface.co/datasets/TechC-SugarCane/yolov10-datasets

# git push時に発生するエラーを無効化
git config lfs.https://github.com/TechC-SugarCane/train-YOLOv10.git/info/lfs.locksverify false

学習後の結果はruns/detect/<name(番号)>に保存されます。

学習でよいスコアが出た場合は、runs/detect/<name(番号)>/にREADME.mdを作成してください。 その際は、runs/detect/README.mdを参考に作成してください。

# sugarcane
yolo detect train cfg='cfg/sugarcane.yaml' data=yolov10-datasets/sugarcane/data.yaml model=weights/yolov10x.pt name='yolov10x-sugarcane' epochs=300 batch=16 imgsz=640 device=0

# pineapple
yolo detect train cfg='cfg/pineapple.yaml' data=yolov10-datasets/pineapple/data.yaml model=weights/yolov10x.pt name='yolov10x-pineapple' epochs=300 batch=16 imgsz=640 device=0

※ 上記を実行するとyolov8n.ptがダウンロードされますが、AMPというものの確認用に追加されているだけらしいので気にしなくて大丈夫です。 詳しくは#106を参照してください。

ハイパーパラメーターは自由に調整してください。cfg/にあります。このファイルのHyperparametersの部分でハイパラ関連の設定ができます。

  • サトウキビ: sugarcane.yaml
  • パイナップル: pineapple.yaml

コントリビューター向けガイドライン

コントリビューター向けのガイドラインについては、こちらのCONTRIBUTING.mdを参照してください。

※ 注意

このリポジトリはforkなので、Pull Requestを送る際はこのリポジトリに対して送るようにしてください。

デフォルトだとbaseリポジトリが公式のリポジトリになっているので、注意してください。

Comparing changesでのドロップダウン(base repository)を、TechC-SugarCane/train-YOLOv10に変更してください。画面が遷移したら大丈夫です。

Push to hub to 🤗

後で活用

Optionally, you can push your fine-tuned model to the Hugging Face hub as a public or private model:

# let's say you have fine-tuned a model for crop detection
model.push_to_hub("<your-hf-username-or-organization/yolov10-finetuned-crop-detection")

# you can also pass `private=True` if you don't want everyone to see your model
model.push_to_hub("<your-hf-username-or-organization/yolov10-finetuned-crop-detection", private=True)

Export

後で活用

# End-to-End ONNX
yolo export model=jameslahm/yolov10{n/s/m/b/l/x} format=onnx opset=13 simplify
# Predict with ONNX
yolo predict model=yolov10n/s/m/b/l/x.onnx

# End-to-End TensorRT
yolo export model=jameslahm/yolov10{n/s/m/b/l/x} format=engine half=True simplify opset=13 workspace=16
# or
trtexec --onnx=yolov10n/s/m/b/l/x.onnx --saveEngine=yolov10n/s/m/b/l/x.engine --fp16
# Predict with TensorRT
yolo predict model=yolov10n/s/m/b/l/x.engine