【初心者OK】YOLOv12のファインチューニング手順まとめ|学習コマンド・結果の見方・best.ptをJetsonでTensorRT化まで

【初心者OK】YOLOv12のファインチューニング手順まとめ|学習コマンド・結果の見方・best.ptをJetsonでTensorRT化まで

YOLOv12を自分のデータでファインチューニングする手順を初心者向けに解説。学習コマンド、epochs/batch/imgsz/lr0などの意味、results.pngやPR曲線・混同行列の見方、best.ptをJetsonでTensorRT化して動作確認する流れまでまとめました。

この記事でできるようになること

  • YOLOv12を**自分のデータで学習(ファインチューニング)**できる
  • 学習後に出るグラフ(results.png / PR曲線 / 混同行列)の見方がわかる
  • できた best.ptJetsonでTensorRT化して動作確認できる

1. そもそも「ファインチューニング」って何?

一言でいうと、すでに学習済みのYOLOモデル(例:yolo12n.pt)を土台にして、自分のデータに合わせて追加学習することです。

  • 0から作る(最初から全部学習) → 時間もデータもたくさん必要
  • ファインチューニング → 少ない手間で精度が出やすい(現場ではこれが基本)

今回のコマンドはまさに「ファインチューニング」です。

2. 準備:データ(data.yaml)ができていればOK

すでに data.yaml が用意できている前提で進めます。

例:

path: dataset_c
train: images/train
val: images/val

names:
  0: cucumber
  1: cut

3. 学習コマンド(基本形)

まずは一番ベーシックな形。

yolo detect train model=yolo12n.pt data="dataset_c\data.yaml" epochs=100 imgsz=640 batch=16 device=0 name=agri_yolo_train

それぞれの意味(難しい言葉なし版)

  • model=yolo12n.pt:学習の“土台”になるモデル(nは軽いモデル)
  • data=...yaml:自分のデータの場所とクラス名
  • epochs=100:学習を何周するか(多すぎても良くならないことがある)
  • imgsz=640:学習時の画像サイズ(大きいほど細かい物に強いが重い)
  • batch=16:一度にまとめて学習する枚数(大きいほど速くなりやすいがメモリを使う)
  • device=0:GPUを使う(0番のGPU)
  • name=...:結果フォルダ名

4. 個人的にお薦めコマンド(高速化・安定化込み)

例:

yolo detect train model=yolo12n.pt data="dataset_c\data.yaml" epochs=200 imgsz=960 batch=64 device=0 name=agri_y12n_960 lr0=0.001 close_mosaic=20 cache=ram workers=8 amp=True

ここで追加したものを、簡単に説明します。

lr0=0.001(学習の“進み方”の強さ)

  • 大きいほど変化が大きい(良くも悪くも動く)
  • 小さいほどじっくり(安定しやすい)

目安:まずは 0.001 は良いスタートです。

close_mosaic=20(学習の後半は“合成”をやめて丁寧に学習)

YOLOは学習中に画像を混ぜるような“強めの加工”をします(mosaic)。
close_mosaic=20 は、最後の20エポックはその加工をやめて、実画像に近い状態で仕上げるイメージです。
→ 仕上げ精度が良くなりやすいです。

cache=ram(画像をメモリに置いて読み込みを速くする)

  • メリット:学習が速くなる
  • デメリット:PCのメモリ(RAM)をたくさん使う/環境によって落ちることがある。安定しないなら使用するのやめる。使わなくても精度に影響はない。

workers=8(読み込み係を増やす)

  • メリット:読み込みが速くなる → 学習も速くなることが多い
  • デメリット:Windowsやメモリ不足環境だと落ちやすいことがある。こちらも安定しないなら使用するのやめる。使わなくても精度に影響はない。

amp=True(半分の精度で計算して高速化)

  • 多くの場合、速度が上がってメモリも節約できます
  • 精度が大きく落ちることは通常少ない(現場でよく使われます)

5. 「学習が遅い」時に効く順番(RTX3090想定)

私の環境だと batch=32 が早かったです。GPUのスペックが低い場合は16や8などにして試す感じです。

おすすめの順番はこれです:

  1. batchを上げる(VRAMが許す範囲で)
  2. cache=ram を試す(落ちるならやめる)
  3. workers を上げる(落ちるなら下げる)
  4. amp=True を使う

batchが大きいと何が嬉しい?

ざっくり言うと、GPUを遊ばせずに働かせられるので速くなりやすいです。
ただし 大きすぎるとメモリ不足で落ちるので、VRAMと相談です。

6. 学習が途中で落ちるとき(よくある原因と対策)

私が遭遇したようなエラーは、だいたい「読み込み(DataLoader)とメモリ」の問題です。

対策(上から順に試す)

  • workers を下げる(例:8 → 4 → 2 → 0)
  • cache=ram をやめる(cache=Falsecache=disk
  • batch を少し下げる
  • それでもダメなら imgsz を下げる(960→768→640)

例(安定寄り):

yolo detect train model=yolo12n.pt data="dataset_c\data.yaml" epochs=200 imgsz=960 batch=32 device=0 name=agri_y12n_960_stable lr0=0.001 close_mosaic=20 cache=False workers=2 amp=True

7. 学習が終わったらどのモデルを使う?(best.ptとlast.pt)

学習後にだいたいこの2つが出ます。

  • best.ptいちばん成績が良かった瞬間のモデル(基本これを使う)
  • last.pt:最後のエポックのモデル

✅ 実運用はまず best.pt でOKです。

8. 結果の見方(ここが一番大事)

8-1. results.png(学習の推移グラフ)

見るポイントは2つだけでOKです。

  • train/*loss(学習中のミスの量)
    下がっていけばOK
  • metrics/mAP50metrics/mAP50-95(成績)
    上がっていけばOK、途中から横ばいなら「頭打ち」

あなたのグラフは、**mAPが早めに伸びて、その後はゆっくり(または横ばい)**なので、
「200以上回せば大きく伸びる」というより、データ改善や調整のフェーズに入っています。

8-2. PR曲線(Precision-Recall)

  • 線が右上に張り付くほど良い
  • cucumber より cut が下なら、cutの方が難しい(よくある)

👉 精度を上げたいなら、エポック追加よりも
cutの画像パターンを増やす / ラベルのブレを減らすが効きます。

8-3. F1-Confidence曲線(confを決めるヒント)

このグラフは「conf(検出の厳しさ)をどこに置くとバランスが良いか」の目安になります。

  • F1が最大になるconf付近 → まずそこを推論confの初期値にする

例:all classes のピークが 0.49 なら

  • まず conf=0.5 で試す
  • 誤検出が多ければ 0.6〜0.7
  • 取り逃しが嫌なら 0.3〜0.4

8-4. 混同行列(confusion_matrix)

ここは超シンプルに見ます。

  • 本当は背景なのに、cucumber/cutと判定している数が多い
    誤検出が多い

この誤検出を減らす最短手はこれです:

「何も写ってない画像(ラベル空)」を学習に入れる
(背景を背景として覚えられるので、誤検出が減りやすい)

9. 「キュウリとcutの枚数を同じにするためにキュウリを減らすべき?」

基本は 減らさない方が良いです。
理由:キュウリ側の“見た目のバリエーション”が減って、かえって弱くなることがあります。

やるならこうします:

  • cut画像を増やす(撮影追加 or アノテ追加)
  • cutが難しい条件(暗い・逆光・小さい・ブレ)を増やす
  • ラベルの置き方が人によってブレてないか確認(cutは特にブレやすい)

10. best.ptをJetsonでTensorRT化して確認する流れ

重要:TensorRTの変換はJetson上でやるのが一番安全です(環境依存が強いので)。

おすすめの流れ(失敗しにくい)

  1. 学習PCで best.pt を用意
  2. Jetsonに best.pt をコピー
  3. Jetson上で TensorRT化(engine作成)
  4. Jetson上で推論して速度と検出を確認

まとめ

誤検出が多いなら 背景画像(ラベル空)追加が強い

YOLOv12の学習は model= yolo12n.pt を指定すればファインチューニング

results.png で「頭打ち」なら、エポック追加より データ改善が効く

できた best.ptJetsonでTensorRT化して使うのが安全

次の記事ではここで作成したモデルをjetsonで動かす方法を紹介していきたいと思います。

それではまた。

About The Author

Hideki
東京大学発AIスタートアップ企業でロボット開発室室長、画像解析室室長、動画解析室室長を務め、AIエンジニアとしても画像認識関連の特許を在籍中に3つ取得。その後、KDDIグループ内でプロダクトリーダーとして自然言語処理パッケージの自社開発を経て、現在はAGRISTのテックリードとして農業の人手不足の解決に向けた収穫ロボットの開発にチャレンジしている。ロボットは技術の総合格闘技との考え方から、AIだけでなく、ハードやエレキ、通信からクラウド、IOTまで幅広く手掛けることができる。最近では人とロボットの共存を目指すべく、性能だけを追い求める開発から「感動やワクワク体験」をデザインできるロボットの研究を進めており、人とロボットがうまく共存できる世界を作り出したいと日々行動している。

LEAVE A REPLY

*
*
* (公開されません)