コンテンツにスキップ

10.3.2 物体検出の概要

物体検出出力の分解図

  • 物体検出と画像分類の違いを理解する
  • バウンディングボックス、クラス、信頼度の3要素を理解する
  • 実行可能な例を通して IoU のような重要指標の直感をつかむ
  • 検出タスクと、その後の YOLO / 検出実践とのつながりを持つ

もし画像分類を学び終えたばかりなら、この節は次のように理解するとよいです:

  • 分類が解決するのは「画像全体でいちばん重要なものは何か」
  • 検出が解決するのは「画像の中のそれぞれの対象は何で、どこにあるか」

つまり、検出は単に「枠が1つ増える」だけではなく、次のように変わります:

  • 出力する対象が変わる
  • 評価する対象が変わる
  • エラーの種類も変わる

物体検出を初心者が理解する順番は、「まずモデルを覚える」ことではなく、先にタスクの構造をはっきりさせることです。

flowchart LR
A["入力画像"] --> B["候補対象を見つける"]
B --> C["各対象を分類する"]
C --> D["各対象のバウンディングボックスを回帰する"]
D --> E["最後に重複した枠を取り除く"]

そのため、検出タスクは本質的に分類より複雑です。なぜなら、同時に次のことを行っているからです:

  • 分類
  • 位置特定
  • 複数対象の選別

一、物体検出は何をしているのか?

Section titled “一、物体検出は何をしているのか?”

検出タスクは通常、次のものを同時に出力します:

  • クラス
  • バウンディングボックスの位置
  • 信頼度

たとえば:

  • 街の風景画像に車が2台、人が1人いる
  • それぞれの対象の位置を示す必要がある

これは画像全体の分類より、ずっと複雑です。

この節を最初に学ぶとき、何を覚えるべき?

Section titled “この節を最初に学ぶとき、何を覚えるべき?”

まず覚えるべきことは次の3つです。

  1. 検出は画像全体を判定するのではなく、複数対象を判定する
  2. 各対象には少なくとも3つの要素がある:クラス、位置、信頼度
  3. 後で出てくる多くのモデルの違いは、実はこの3つをどう扱うかに関係している

なぜこの節では「3要素」を先に押さえるべきなのか?

Section titled “なぜこの節では「3要素」を先に押さえるべきなのか?”

なぜなら、後のほとんどすべての検出モデルは、最終的にこの3つを中心に考えるからです。

  • クラス
  • 信頼度

物体検出の出力は、まず次のような素朴な一文として理解するとよいです。

「ここに何か対象がある気がする。だいたいこのあたりにあって、どれくらい確かかも分かる。」


二、なぜ分類モデルでは足りないのか?

Section titled “二、なぜ分類モデルでは足りないのか?”

同じ画像の中に、次のようなことが起こりうるからです:

  • 複数の対象がある
  • 対象の大きさが違う
  • 対象の位置が違う

画像分類は画像全体に1つのラベルを付けるだけなので、 こうした情報を表現できません。

初心者にとって分かりやすい見分け方

Section titled “初心者にとって分かりやすい見分け方”

今後、ある画像認識の問題を見たら、まず次のように考えてみてください。

  • 画像全体に対して1つの答えがあればよいのか?
  • それとも、画像の中の各対象を個別に見つける必要があるのか?

後者なら、それはもう普通の分類タスクの範囲を超えています。


三、まずは最小の IoU 例を見てみよう

Section titled “三、まずは最小の IoU 例を見てみよう”

IoU は検出で非常に重要な概念です。 なぜなら、次のことを教えてくれるからです。

  • 予測ボックスと正解ボックスが、どれだけうまく重なっているか
def iou(box_a, box_b):
ax1, ay1, ax2, ay2 = box_a
bx1, by1, bx2, by2 = box_b
inter_x1 = max(ax1, bx1)
inter_y1 = max(ay1, by1)
inter_x2 = min(ax2, bx2)
inter_y2 = min(ay2, by2)
inter_w = max(0, inter_x2 - inter_x1)
inter_h = max(0, inter_y2 - inter_y1)
inter_area = inter_w * inter_h
area_a = (ax2 - ax1) * (ay2 - ay1)
area_b = (bx2 - bx1) * (by2 - by1)
union = area_a + area_b - inter_area
return inter_area / union if union > 0 else 0.0
gt_box = (10, 10, 30, 30)
pred_box = (15, 15, 32, 32)
print("IoU =", round(iou(gt_box, pred_box), 4))

実行結果の例:

Terminal window
IoU = 0.4849

これは、2つのボックスの重なりが合計領域の半分未満であることを意味します。実際の検出器でこれを正解とみなすかどうかは、0.50.75 など、設定した IoU 閾値によって変わります。

なぜこの指標がとても重要なのか?

Section titled “なぜこの指標がとても重要なのか?”

検出では、「対象を見つけたかどうか」だけでなく、 次の点も見る必要があるからです。

  • 枠がどれだけ正確か

IoU で最初に覚えるべきなのは式ではなく、「重なりの質」

Section titled “IoU で最初に覚えるべきなのは式ではなく、「重なりの質」”

初めて検出を学ぶときは、交差比や式を最初に丸暗記しなくて大丈夫です。 まずは次のことを覚えてください。

  • IoU は本質的に、予測ボックスと正解ボックスがどれだけよく重なっているかを見るもの

これは、後で出てくる多くの概念の理解に直結します。

  • 正例・負例のマッチング
  • NMS
  • mAP

初心者が最初に覚えるべき3つの概念は?

Section titled “初心者が最初に覚えるべき3つの概念は?”

物体検出に初めて触れるとき、まず覚えるべきなのは次の3つです。

  1. バウンディングボックス モデルは「車がある」と答えるだけでなく、「車がどこにあるか」も答える。

  2. IoU 予測ボックスと正解ボックスの重なり具合を測る。

  3. 複数対象の場面 同じ画像に対象が複数あることが普通なので、重複枠・遮蔽・重なりといった問題が出る。

なぜ検出は本質的に「システム問題」に近いのか?

Section titled “なぜ検出は本質的に「システム問題」に近いのか?”

最後に扱うのは1つの枠ではなく、 枠の集まりだからです。

  • どの枠を残すか
  • どの枠が重複か
  • どの枠はスコアが低いので除外するか

だからこそ、検出には最初から目立つ後処理の段階があります。

初めて検出をやるとき、見落としやすいものは?

Section titled “初めて検出をやるとき、見落としやすいものは?”

多くの場合、モデルそのものよりも次の点です。

  • 枠の定義
  • 閾値の選び方
  • 重複枠の扱い
  • 誤検出と見逃しのバランス

そのため、検出プロジェクトは単なるモデル出力というより、完成したシステムに近いものになります。

物体検出出力、IoU とエラータイプの図


四、いちばんハマりやすい落とし穴

Section titled “四、いちばんハマりやすい落とし穴”

誤解1:検出は分類に枠を足しただけ

Section titled “誤解1:検出は分類に枠を足しただけ”

枠そのものが、かなり難しい回帰問題です。

位置のずれも同じくらい重要です。

誤解3:複数対象の場面を単一対象のように考える

Section titled “誤解3:複数対象の場面を単一対象のように考える”

複数対象では、次のような問題が起こります。

  • 重なり
  • 遮蔽
  • 重複予測

五、この節で持つべき正しい期待

Section titled “五、この節で持つべき正しい期待”

この節で一番大事なのは、今日すぐに完全な検出器を作れるようになることではありません。 まず本当に区別すべきなのは次の点です。

  • 分類タスクは「何か」だけに答える
  • 検出タスクは「何か」と「どこにあるか」の両方に答える
  • その後の YOLO や Faster R-CNN は、本質的にこの2つの問題の組み合わせを解いている

初めて検出プロジェクトをやるとき、まず持つべき意識は?

Section titled “初めて検出プロジェクトをやるとき、まず持つべき意識は?”

まず持つべきなのは次の意識です。

  • 検出プロジェクトは、まずアノテーションのプロジェクトである
  • その次にモデルのプロジェクトである

なぜなら、枠の基準が揃っていないと、後でモデルも評価もまとめて崩れてしまうからです。


このページを終えたら、この evidence card を残します。

入力画像
正解または期待される対象を含む検出サンプル
予測
バウンディングボックス、ラベル、信頼度スコア、IoU、しきい値設定
指標
precision/recall、mAP、false positives、false negatives
失敗確認
小さな物体、重なり、NMS、ラベル品質の低さ、または信頼度閾値
期待される成果
注釈付き画像と、検出メトリクスまたはエラーバケット

この節で最も大切なのは、次の検出の見方を持つことです。

対象検出は、「何か」と「どこにあるか」を同時に解決する。そのため、分類より本質的に複雑で、実際の画像応用により近い。

  • 検出は、分類に枠を足しただけではない
  • IoU は検出品質を理解する最初の鍵
  • 本当の難しさは、複数対象、遮蔽、位置ずれにある

一文でまとめるなら、次のようになります。

対象検出は、「見つける」ことを、「それぞれの対象を見つけて、個別に位置を特定する」ことへと進化させる。


  1. 枠の座標を2組変えて、IoU がどう変わるか見てみましょう。
  2. なぜ検出は分類より実際の画像タスクに近いと言えるのでしょうか?
  3. ある検出枠のクラスは合っているのに、位置がかなりずれていたら、その予測は良いと言えるでしょうか? なぜですか?
  4. 考えてみましょう:なぜ複数対象の場面は単一対象の場面よりずっと難しいのでしょうか?
解法と解説
  1. 2 つの box の重なりが大きいほど IoU は高くなり、片方がずれるほど低くなります。まったく重ならない場合、IoU は 0 です。
  2. 検出は「何か」だけでなく「どこにあるか」も答えるため、実世界の視覚タスクに近いです。しかも 1 枚の画像に複数の物体があることが多いです。
  3. クラスが正しくても位置が大きく外れている予測はよい予測とは言えません。IoU しきい値を満たさず、後続の処理も誤らせる可能性があります。
  4. 複数物体のシーンでは、スケール差、遮蔽、box の重なり、重複予測、クラス混同が加わるため、単一物体よりかなり難しくなります。