Object Detection(物体検出)とは:アルゴリズムと仕組み

著者: IT Sectr 公開日: 2026-07-19 読了時間: 9 分

Object Detection(物体検出)は、オブジェクトのクラス(猫、車、人)と画像内の位置を矩形のバウンディングボックス(bounding box)として同時に判定するコンピュータビジョンタスクです。Image Labelingとは異なり、Object Detectionは1つのフレーム内で異なるクラスの複数オブジェクトを検出し、それらの座標を示します。モバイル開発では、Object Detectionはビデオ監視システム、ARアプリケーション、自律型ドローン、医用画像、小売分析で使用されています。Google ML Kit、2025によると、オンデバイスObject Detectionはフラッグシップデバイスで87% mAPの精度で30 FPSを達成します。

重要ポイント

  • Object Detection — オブジェクトの分類 + 位置特定(bounding box)
  • ML Kit Object Detection — 最大30 FPS、87% mAP、カテゴリ:fashion、food、home、places
  • YOLOv8-Nano — 2.6Mパラメータ、42% mAP COCO、10–30 msのレイテンシ
  • SSD MobileNetV2 — 22% mAP COCO、15–40 ms、最大速度
  • On-device real-time — すべての計算をローカルで実行、サーバーへの動画送信不要

Object Detectionとは:動作原理

Object Detectionは、画像内のオブジェクトの種類(分類)と位置(座標回帰)の2つのタスクを同時に解決します。モデルは画像をグリッドに分割し、各セルに対してバウンディングボックス(x、y、幅、高さ)とクラス確率を予測します。Non-Maximum Suppression(NMS)は、1つのオブジェクトに対する重複ボックスを除去し、最も信頼性の高い予測を保持します。最新のアーキテクチャは、2段階(Faster R-CNN — 最初に領域提案、次に分類)と1段階(YOLO、SSD — すべてを一度に)に分けられます。

評価指標:mAP(mean Average Precision)— Object Detectionの主要な品質指標。mAP@0.5 — IoUしきい値0.5での精度、mAP@0.5:0.95 — 0.5から0.95までのしきい値の平均。FPS — 1秒あたりのフレーム数(推論速度)。モバイルアプリケーションでは、mAP/FPSのバランスが重要です:YOLOv8-Nanoは50+ FPSで42% mAP@0.5:0.95を提供し、SSD MobileNetは60+ FPSで22% mAPを提供します。リアルタイムには> 20 FPS、インタラクティブ用途には5–15 FPSが必要です。

IoU(Intersection over Union) — 予測バウンディングボックスと正解バウンディングボックスの重なりを測定する指標。IoU = 交差面積 / 和集合面積。NMSのIoUしきい値は通常0.5~0.7です。フレーム間のオブジェクトトラッキング(再識別)には、IoUマッチングを使用したDeep SORTまたはByteTrackを使用します。動画内のオブジェクトカウントには、BoT-SORTが85% MOTA(Multiple Object Tracking Accuracy)を提供します。

アーキテクチャmAP@0.5:0.95レイテンシパラメータサイズ
YOLOv8-Nano42%10–30 ms2.6M5.9 MB
YOLOv8-Small50%25–60 ms11.2M22 MB
SSD MobileNetV222%15–40 ms5.2M21 MB
EfficientDet-Lite035%20–50 ms3.9M15 MB

Anchor Boxes — モデルが調整する事前定義されたバウンディングボックス形状。YOLOv8はアンカーフリー検出(anchor-free)を使用し、学習を簡素化して推論を高速化します。SSDおよび旧バージョンのYOLOでは、データセットごとにアンカー調整が必要です。モバイル開発では、アンカーフリーアーキテクチャ(YOLOv8、FCOS)が推奨されます — オブジェクトサイズに依存せず、カスタマイズが容易です。

ML Kit Object Detectionとトラッキング

ML Kit Object Detection and Tracking — デバイス上でのオブジェクト検出とトラッキングのためのGoogleのライブラリ。2つのモードをサポート:シングルイメージ検出(写真用)とストリーミング検出(動画用)。ストリーミングモードはオプティカルフローを使用してフレーム間で自動的にオブジェクトを追跡し、初期検出後のフレーム間レイテンシを5–10 msに低減します。カテゴリ:fashion、food、home、places — それぞれ10–20クラス。

ML Kit API:ObjectDetector(オプション:detectorMode、enableClassification、enableMultipleObjects)→ InputImage → DetectedObject(trackingId、boundingBox、classificationCategory、classificationConfidence)。TrackingIdにより、フレーム間で同じオブジェクトを追跡できます。MultipleObjects = true — フレームあたり最大5つのオブジェクトを検出。Classification — オブジェクトカテゴリ認識を有効化(デフォルトはfalseで速度優先)。ストリーミングモードはリアルタイムに推奨:Pixel 6で20–30 FPS。

kotlin
val options = ObjectDetectorOptions.Builder()
    .setDetectorMode(ObjectDetectorOptions.STREAM_MODE)
    .enableClassification()
    .enableMultipleObjects()
    .build()

val detector = ObjectDetection.getClient(options)

detector.process(inputImage)
    .addOnSuccessListener { objects ->
        objects.forEach { obj ->
            val box = obj.boundingBox
            val trackingId = obj.trackingId
            val category = obj.classificationCategory()
            drawBoundingBox(box, trackingId, category)
        }
    }

Object Tracking:最初のフレームでオブジェクトを検出した後、ML Kitは再検出なしでビデオストリームを通じてオブジェクトを追跡します(オプティカルフロー+特徴追跡に基づく)。これによりCPU/GPU負荷が軽減されます:初期検出30–60 ms、後続の追跡フレーム2–5 ms。オブジェクトがフレームから外れるか、> 30°回転すると、トラッカーはリセットされ再検出が必要になります。TrackingIdはオブジェクトがフレーム内にある間保持されます。一意のオブジェクトをカウントするには、trackingIdを識別子として使用します。

YOLO:You Only Look Once on Mobile Devices

YOLOv8-Nano — エッジデバイス向けのYOLOv8(Ultralytics)の最小バージョン。2.6Mパラメータ、5.9 MB(FP16)、COCOで42% mAP@0.5:0.95。YOLOv8はアンカーフリー検出+C2fバックボーン+TaskAlignedAssignerを使用します。モバイル開発では、TFLite(INT8 — 2.0 MB、レイテンシ8–20 ms)およびCore ML(4.5 MB、iPhone 15 Proでレイテンシ5–15 ms)へのエクスポートが利用可能です。YOLOv8-NanoはオンデバイスリアルタイムObject Detectionに最適な選択肢です。

YOLOv8のTFLiteへのエクスポート:UltralyticsはCLIを提供:yolo export model=yolov8n.pt format=tflite int8。出力はNNAPIを介してGPU Delegateに最適化されたTFLite INT8モデルです。カスタムデータセット(独自のクラス、COCO以外)の場合 — Ultralytics HUBを介してクラスあたり50~500画像でトレーニング。RT-DETR(Real-Time Detection Transformer) — Transformerアーキテクチャに基づく代替手段で、NVIDIA Jetsonで60 FPS、48% mAPですが、モバイルデバイスでは速度面でYOLOv8-Nanoにまだ及びません。

python
# YOLOv8 export to TFLite
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)

# Inference with TFLite on Android
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)

モバイルデバイスにおけるYOLO vs ML Kit:ML Kit Object Detectionは統合が容易(10行のコード)で、MLの専門知識は不要ですが、標準クラス(fashion、food、home、places)に制限されます。YOLOv8-Nanoはカスタムエクスポートが必要ですが、完全な制御を提供します:任意のクラス、入力サイズ、アーキテクチャ。迅速なプロトタイピングにはML Kit。非標準オブジェクトを扱う本番環境にはYOLOv8-Nano。iOSの場合:Ultralyticsからのモデルエクスポート+VNCoreMLRequestによるYOLOv8-Core ML。

SSDおよびその他のオンデバイスアーキテクチャ

SSD(Single Shot Multibox Detector) — モバイルデバイス向けの古典的な1段階アーキテクチャ。SSD MobileNetV2 — 2020~2023年のデファクトスタンダード:COCOで22% mAP@0.5:0.95、Pixel 6で15–40 ms。SSDは特徴ピラミッド(異なるサイズのオブジェクトを検出するための異なるMobileNet層)と、各特徴マップセルに対するデフォルトボックス(アンカーボックス)を使用します。利点:当時としては最大の速度。欠点:小オブジェクト(10–30 px)での精度低下。

EfficientDet-Lite — Google(2020+)のファミリーで、TFLiteに最適化。EfficientDet-Lite0:3.9Mパラメータ、35% mAP、20–50 ms。EfficientDet-Lite2:8.1M、42% mAP、40–80 ms。EfficientDetはマルチスケール特徴融合にBiFPN(Bidirectional Feature Pyramid Network)を使用 — レイテンシを増やさずに2~4%のmAP向上を実現。モバイル開発では、GoogleはTFLite Task Visionの主要検出器としてEfficientDet-Liteを推奨しています。

MediaPipe Object Detector — MediaPipe Tasks Visionの一部としてEfficientDet-Liteに基づく既製実装。Android、iOS、Python、Web向けの統一APIを提供。MediaPipe Object DetectorはCOCOクラス(80クラス)、カスタムモデル、ストリーミングモード、CPU/GPUデリゲートをサポート。クロスプラットフォームプロジェクトでの迅速なObject Detection統合には、MediaPipeが最適な選択肢です:すべてのプラットフォームで1つのコード。

kotlin
// MediaPipe Object Detection
val options = ObjectDetectorOptions.Builder()
    .setBaseOptions(BaseOptions.builder()
        .setDelegate(BaseOptions.Delegate.GPU)
        .build())
    .setMaxResults(5)
    .setScoreThreshold(0.5f)
    .build()

val detector = ObjectDetector.createFromOptions(context, options)

val image = MPImage.fromBitmap(bitmap)
val result = detector.detect(image)
result.detections.forEach { detection ->
    val box = detection.boundingBox
    val category = detection.categories.first()
}

モバイルアプリケーションのアーキテクチャ選択:ミッドレンジデバイスで> 30 FPSの場合 — YOLOv8-Nano(INT8)またはSSD MobileNetV2。> 40% mAPの精度が必要な場合 — YOLOv8-Small(11.2M)またはEfficientDet-Lite2(8.1M)。クロスプラットフォームの場合 — MediaPipe Object Detector。シンプルさ重視 — ML Kit。iOSファーストの場合 — Core ML + YOLOv8 .mlpackage。Androidファーストの場合 — TFLite Task Vision(ObjectDetector API)。トレーニング:Roboflow(データセット)+Ultralytics YOLOv8(トレーニング)+TFLite/Core MLへのエクスポート。

TensorFlow Lite Task Vision API

TFLite Task Vision ObjectDetector — AndroidおよびiOSでObject Detectionモデルを実行するためのGoogleの統一API。Task APIは画像の前処理(スケーリング、正規化、色空間変換)と後処理(NMS、しきい値処理)を自動的に処理します。開発者は.tfliteモデルを渡すだけで、bounding box+カテゴリ+スコアを含むDetectionsのリストを取得できます。Task APIはCOCO互換モデル(80クラス)をサポートしています。

カスタムモデルのTask APIへの変換:TFLiteモデルは入力[1、height、width、3](float32/uint8)と出力:detection_boxes[1,N,4]、detection_classes[1,N]、detection_scores[1,N]、num_detections[1]を持つ必要があります。TensorFlow Object Detection APIから後処理ops(SSD Postprocess)を含めてエクスポート。YOLOv8の場合 — ops-compatを介したNMS付きTFLiteエクスポート。iOSのTask APIはANEでの高速化にCore ML Delegateを使用します。

kotlin
// TFLite Task Vision Object Detector
val options = ObjectDetectorOptions.Builder()
    .setScoreThreshold(0.5f)
    .setMaxResults(10)
    .setDelegate(Delegate.GPU)
    .build()

val detector = ObjectDetector.createFromFileAndOptions(
    context, "custom_model.tflite", options
)

val image = TensorImage.fromBitmap(bitmap)
val results = detector.detect(image)
results.forEach { detection ->
    onObjectDetected(
        detection.boundingBox,
        detection.categories.first().label,
        detection.categories.first().score
    )
}

Task APIのパフォーマンス:AndroidのGPU DelegateはCPU(XNNPACK)と比較して3~5倍の高速化を提供。NPU搭載デバイス(Pixel 8、Snapdragon 8 Gen 3、Dimensity 9300)のNNAPI Delegate — さらに1.5~2倍。Hexagon、DSP — DSPアクセラレータで最大10倍。iOSではCore ML DelegateがCPU比4~6倍。Task APIは利用可能なハードウェアアクセラレータを自動選択しますが、DetectorOptionsを介してデリゲートを強制指定することもできます。

モバイルアプリケーションにおけるObject Detectionの活用

人とオブジェクトのカウント — 小売分析:来店者検出、列のカウント、棚の在庫レベルの判定。フレーム内のObject Detection人数カウンターは、来店者数とコンバージョンを推定するのに役立ちます。ML Kit Object Detectorは最大30 FPSを提供 — リアルタイムカウントに十分。ゾーンクロッシングにはObject Detection+ByteTrackトラッキングの組み合わせ。カウント精度:良好な照明条件下で92~95%。

製造における欠陥検出 — Object Detectionはコンベア上の欠陥(傷、欠け、ひび、誤組立)を識別します。カスタムYOLOv8-Nano(INT8)モデルはUSBカメラに接続されたAndroidタブレットで動作します。レイテンシ:フレームあたり20–40 ms(25–50 FPS)。複雑な欠陥(マイクロクラック)の場合 — 入力解像度を640x640に上げます(レイテンシ40–80 ms)。トレーニング:Roboflow — 200~1000枚の欠陥画像のデータセット+Ultralytics YOLOv8。

リアルタイムARオブジェクトマーキング — ARCore(Android)とARKit(iOS)はObject Detectionを使用して平面、垂直面、3Dオブジェクトを認識します。ML Kit Object Detection+ARCore Scene Semanticsはオブジェクトセグメンテーションを提供:壁、床、天井、家具。カスタムARマーキング(特定のソファモデルを認識してAR情報を重ねるなど)にはYOLOv8-Nano+SceneKit/SceneForm。リアルタイム要件:> 20 FPS。

swift
// ARKit + Object Detection
let request = VNCoreMLRequest(model: objectDetector) { req, _ in
    guard let results = req.results as? [VNDetectedObjectObservation] else { return }
    for result in results where result.confidence > 0.6 {
        let rect = result.boundingBox
        let worldPos = arView.hitTest(rect.center)
        arView.addAnchor(ARAnchor(name: label, transform: worldPos))
    }
}

医用画像 — X線、MRI、CTスキャン解析のためのObject Detection。医師のモバイルデバイス上での腫瘍、骨折、病変の検出。Androidタブレット上のYOLOv8-Nanoは15–30 msで肺結節を検出し、89%の感度と93%の特異度を達成(NIH ChestX-ray14データ)。要件:INT8量子化(データプライバシー)、高い再現率(病変の見逃しは誤検出よりも危険)、信頼度しきい値< 0.4。オンデバイス処理により医療データのプライバシーが保証されます。

よくある質問

Object DetectionとImage Segmentationの違いは何ですか?

Object Detectionは各オブジェクトにバウンディングボックスを返します — オブジェクトを囲む矩形フレーム。Image Segmentation(セマンティックまたはインスタンス)はオブジェクトの正確な輪郭を返します — ピクセルレベルのマスク。セグメンテーションはより正確ですが低速です(検出の10–30 msに対し50–300 ms)。オブジェクトの形状が重要なタスク(医療、AR)ではセグメンテーションを使用します。位置と存在が重要なタスク(カウント、モデレーション)では検出を使用します。MobileViTは両方のタスクを解決するアーキテクチャです。

モバイルデバイスでObject Detectionはいくつのクラスを認識できますか?

YOLOv8-NanoはCOCO(80クラス)でトレーニングされています。ML Kit Object Detection — 40+クラス(fashion、food、home、places)。カスタムモデルはパフォーマンス低下なくモバイルデバイスで最大100クラスまで検出可能。100クラスを超えるとレイテンシが増加しmAPが低下します。1000+クラスのアプリケーションでは階層的分類を使用します:最初に大まかなカテゴリ(10クラス)、次に詳細なカテゴリ(100サブクラス)。EfficientNet+YOLO — レイテンシ50 ms未満で1000+クラスを処理する階層的アプローチ。

Object Detectionをフレーム間のオブジェクトトラッキングに使用できますか?

はい、ML Kit Object Detectionには組み込みトラッキングが含まれています:最初のフレームで検出後、再検出なしでビデオストリームを通じてオブジェクトを追跡します。より複雑なトラッキング(オブジェクトの交差、フレームアウト)にはByteTrackまたはBoT-SORTを使用します。ByteTrackは隣接フレームのバウンディングボックス間のIoU(intersection over union)に基づいて動作 — MOT17で85% MOTA。BoT-SORTはさらに再識別(ReID)を使用して失われたオブジェクトを復元 — 90% MOTA。

iOSにYOLOv8をデプロイするには?

YOLOv8をCore MLにエクスポート:yolo export model=yolov8n.pt format=coreml int8。結果の.mlpackageはVNCoreMLRequest(Vision Framework)を介して統合。代替:YOLOv8→TFLite→Core ML Delegate(iOS TFLite API)。Ultralytics YOLOv8 Core MLエクスポートはiOS 16+、ANEアクセラレーション、FP16およびINT8量子化をサポート。ストリーミングには、反復VNImageRequestHandlerパフォーマンスリクエストとともにAVFoundation+Visionを使用。リアルタイム:iPhone 14 Proで20–30 FPS。

モバイルデバイスでObject Detectionの精度を向上させるには?

データセットの多様性を増やす(角度、照明、背景) — クラスあたり500+画像。データ拡張を使用:mosaic、mixup、random perspective(Ultralytics YOLOv8のデータ拡張 — 2~5%のmAP向上)。入力サイズを640x640に拡大(320x320の代わり) — +4~8% mAP、ただしレイテンシ×2。トレーニング後のFP16またはINT8量子化を使用 — +0~1%のmAP損失、4倍圧縮。iOSではCore ML Delegateを介してANE(Neural Engine)を使用 — CPU比3~5倍の高速化。

まとめ

  • Object Detection — バウンディングボックスによるオブジェクトの分類+位置特定
  • ML Kit — 最大30 FPS、40+クラス、組み込みオブジェクトトラッキング
  • YOLOv8-Nano — 2.6Mパラメータ、42% mAP、10–30 ms、オンデバイスに最適
  • SSD / EfficientDet — TFLite向けの古典的および現代的な代替手段
  • Task Vision API — GPU/ANEアクセラレーション対応の統一TFLite API
  • On-device — データプライバシー、ゼロレイテンシ、オフライン動作
  • 用途 — 小売分析、AR、医療、欠陥検出、オブジェクトカウント

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください