### 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 クラスを全部返してきますが、その中で「車両だけ欲しい」ときに ```python allowed_classes = {"car", "truck", "bus", "motorbike", "bicycle"} ``` としてフィルタリングします。 ### 🔹 例 ```python 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形式で準備 ``` ``` (座標は画像サイズで 0~1 に正規化) * ディレクトリ構造の例: ``` dataset/ ├─ images/ │ ├─ train/ │ └─ val/ └─ labels/ ├─ train/ └─ val/ ``` 1. **データ設定ファイルを作成** * `bacteria.yaml` のような YAML を書く ```yaml path: dataset train: images/train val: images/val nc: 1 # クラス数 names: ['bacteria'] ``` 1. **学習を実行** ```bash yolo detect train data=bacteria.yaml model=yolov8n.pt epochs=50 imgsz=640 ``` * `yolov8n.pt` は小さいモデル(転移学習の出発点) * `epochs=50` は繰り返し回数(データ量次第で増減) * `imgsz=640` は入力画像サイズ 1. **学習済みモデルを使う** ```bash 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)が特に効果的 * 正確なアノテーション(ラベル付け)が精度に直結します