2025-09-12 08:48:34 +09:00

3.3 KiB
Raw Blame History

YOLOv8 のクラスについて

  • YOLOv8 は 学習済みの重みによって、検出できるクラス(カテゴリ)が決まります。
  • 公式で配布されている yolov8n.pt, yolov8s.pt などは COCO データセット (COCO-2017, 80クラス) で学習されています。
  • つまり「何を検知できるか」は モデルに埋め込まれているクラスラベルリストに依存します。

🔹 COCO の代表的なクラス(抜粋)

  • 人物: person
  • 車両: car, truck, bus, motorbike, bicycle
  • 動物: dog, cat, horse など
  • 家具・物体: chair, sofa, tv, cell phone など (全部で 80 種類)

allowed_classes の意味

  • これは あなた側のフィルタです。

  • YOLO は 80 クラスを全部返してきますが、その中で「車両だけ欲しい」ときに

    allowed_classes = {"car", "truck", "bus", "motorbike", "bicycle"}
    

    としてフィルタリングします。

🔹

detections = self.detector.detect(img)
detections = [d for d in detections if d.label in allowed_classes]

転移学習

YOLOv8 は 転移学習 (fine-tuning) をサポートしていて、 COCOの80クラスとは別に、自分で定義したクラスで再学習させられます。 たとえば「細菌」や「顕微鏡画像の特定形状」なども検出対象にできます。

新しいクラスを学習する流れ(YOLOv8)

  1. データセットの用意
  • 画像ファイル(.jpg, .png など)
  • アノテーション(バウンディングボックス付きラベル)を YOLO形式で準備
<class_id> <x_center> <y_center> <width> <height>
(座標は画像サイズで 01 に正規化)
  • ディレクトリ構造の例:
dataset/
├─ images/
│    ├─ train/
│    └─ val/
└─ labels/
    ├─ train/
    └─ val/
  1. データ設定ファイルを作成
  • bacteria.yaml のような YAML を書く
path: dataset
train: images/train
val: images/val

nc: 1            # クラス数
names: ['bacteria']
  1. 学習を実行
yolo detect train data=bacteria.yaml model=yolov8n.pt epochs=50 imgsz=640
  • yolov8n.pt は小さいモデル(転移学習の出発点)
  • epochs=50 は繰り返し回数(データ量次第で増減)
  • imgsz=640 は入力画像サイズ
  1. 学習済みモデルを使う
yolo detect predict model=runs/detect/train/weights/best.pt source=your_test_image.jpg
  • この best.pt が「細菌クラス専用モデル」になります

応用ポイント

  • 複数クラスも可能(例: ['bacteria', 'fungus', 'virus'])
  • COCO + 自作データで再学習 → 汎用物体検知 + 特殊対象の両立もできる
  • 顕微鏡画像のように特殊なデータでも、十分なアノテーションがあれば対応可能

🔹 注意点

  • 学習には GPU環境(Colab, Kaggle, 自前マシンなど)が必要
  • データが少ない場合は、転移学習(小さいデータで fine-tuning)が特に効果的
  • 正確なアノテーション(ラベル付け)が精度に直結します