画像分類 → 物体検出 → セグメンテーション早見表
2025年4月28日
0. 俯瞰:タスクの違いを1枚で把握
タスク | 出力イメージ | 使うと嬉しい場面 |
---|---|---|
画像分類 (Image Classification) | 画像全体にラベル1つ 例:dog |
SNS の自動タグ付け、品質管理の OK/NG 判定 |
物体検出 (Object Detection) | バウンディングボックス+ラベル 例:dog (x1,y1,x2,y2) |
自動運転の歩行者検出、在庫棚の欠品検出 |
セグメンテーション (Segmentation) └ Semantic / Instance |
ピクセルごとのラベル or マスク | 医療画像の腫瘍領域抽出、AR の背景切り抜き |
ポイント
- 分類="これは何?" 🤔
- 検出="どこにある?" 👀
- セグメンテーション="どこまでがそれ?" ✂️
1. 画像分類:Vision へのファーストステップ
入力
任意サイズの画像を通常は 224×224 にリサイズ
代表モデル
ResNet、EfficientNet、Vision Transformer
主要指標
Accuracy、Top-5 Accuracy、F1
学習Tips
RandomCrop/Flip でデータ拡張、Label Smoothing
ミニメモ ✏️
- Transfer Learning が超強力。ImageNet で事前学習→自データ 10% で高精度
- 日本語 OCR 前処理にも分類が使える(文字画像→かな/漢字/数字 など)
2. 物体検出:位置情報を加えた"次の段階"
モデル系統 | 代表 | 特徴 |
---|---|---|
Two-Stage | Faster R-CNN | 精度高い、遅い |
One-Stage | YOLOv8, SSD | 高速、最新バージョンは精度も◎ |
Transformer | DETR, DINO | Anchor フリー、複雑だがチューニング少 |
評価指標 📏
- mAP (mean Average Precision)
IoU を 0.5〜0.95 まで変化させ平均を取る COCO 方式が主流 - FPS / Latency
リアルタイム用途では 30 FPS ≒ 33 ms 以下を目安
# Ultralytics YOLOv8
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # Nano 版をロード
results = model("dogs.jpg") # 推論
results.show() # Bounding Box 可視化
# yolov8n は 0.8 MB・30+ FPS。精度を取るなら yolov8m/l を選択
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # Nano 版をロード
results = model("dogs.jpg") # 推論
results.show() # Bounding Box 可視化
# yolov8n は 0.8 MB・30+ FPS。精度を取るなら yolov8m/l を選択
3. セグメンテーション:ピクセル単位で世界を切り取る
3.1 Semantic vs. Instance
種類 | 何がわかる? | 例 |
---|---|---|
Semantic | カテゴリごとにピクセルを色分け | 空=青、道路=灰、車=赤 |
Instance | 個々の"物体"を分離 | 車1=赤、車2=緑、歩行者1=青 |
3.2 代表モデル
系統 | 代表 | ひとこと |
---|---|---|
FCN 系 | U-Net, SegNet | 医療で定番、軽量 |
Encoder-Decoder + Skip | DeepLabv3+, HRNet | マルチスケール強い |
検出融合 | Mask R-CNN | Faster R-CNN + マスク分岐 |
トランスフォーマ系 | Segment-Anything (SAM) | プロンプト指定で任意領域をマスク |
# Semantic IoU 計算例
import torchmetrics
iou = torchmetrics.JaccardIndex(task='multiclass', num_classes=21)
score = iou(preds, targets) # preds, targets: [B,H,W]
print("mIoU:", score.item())
import torchmetrics
iou = torchmetrics.JaccardIndex(task='multiclass', num_classes=21)
score = iou(preds, targets) # preds, targets: [B,H,W]
print("mIoU:", score.item())
応用シーン 🏥🚗📱
- 医療:CT 画像で腫瘍輪郭を抽出→体積計測
- 自動運転:周囲環境をシーン理解(道路/歩道/標識)
- AR/VR:人物だけ切り抜いて背景合成
4. 比較早見表
項目 | 分類 | 検出 | セグメンテーション |
---|---|---|---|
出力 | 1 ラベル | BBox + ラベル | ピクセルマスク |
難易度 | ★ | ★★ | ★★★ |
データ作成コスト | 低 | 中 (BBox) | 高 (マスク) |
主指標 | Accuracy/F1 | mAP, FPS | mIoU, Dice |
代表データセット | ImageNet | COCO, PASCAL VOC | Cityscapes, ADE20K |
主要モデル | ResNet, ViT | YOLO, DETR | U-Net, SAM |
5. これからのトレンド & 学習素材
Vision Transformer
CNN を超える精度、データ&計算多
ViT 論文 / DeiT (PyTorch)
SAM & Promptable CV
"どれを切り抜く?"をテキスト・クリックで指定
Meta SAM demo / segment-anything GitHub
マルチタスク学習
分類+検出+セグメを1モデルで
Detectron2 Tutorial
Self-Supervised Learning
ラベルなし画像で事前学習
DINOv2, MAE ノートブック
6. まとめ
- 分類 → 検出 → セグメンテーション は"情報粒度"の階段。
- 上位タスクほど データ作成コスト&計算負荷 が跳ね上がる。
- モデル選択は 用途・速度・精度・アノテーション予算 のトレードオフ。
- 最新は Transformer とマルチモーダル化 がキーワード。
- まずは分類で基礎を固め、BBox アノテーションツールで自前データを作り、最後にセグメンテーションへ挑戦するとスムーズにステップアップできます。
🔄
レベルアップの流れ
画像分類
⬇️
⬇️
物体検出
⬇️
⬇️
セグメンテーション
難易度・精度・応用範囲 UP!