3.3 KiB
3.3 KiB
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)
- データセットの用意
- 画像ファイル(
.jpg,.pngなど) - アノテーション(バウンディングボックス付きラベル)を YOLO形式で準備
<class_id> <x_center> <y_center> <width> <height>
(座標は画像サイズで 0~1 に正規化)
- ディレクトリ構造の例:
dataset/
├─ images/
│ ├─ train/
│ └─ val/
└─ labels/
├─ train/
└─ val/
- データ設定ファイルを作成
bacteria.yamlのような YAML を書く
path: dataset
train: images/train
val: images/val
nc: 1 # クラス数
names: ['bacteria']
- 学習を実行
yolo detect train data=bacteria.yaml model=yolov8n.pt epochs=50 imgsz=640
yolov8n.ptは小さいモデル(転移学習の出発点)epochs=50は繰り返し回数(データ量次第で増減)imgsz=640は入力画像サイズ
- 学習済みモデルを使う
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)が特に効果的
- 正確なアノテーション(ラベル付け)が精度に直結します