「一般物体認識」ってよく聞きますが、普通の画像認識とどう違うんですか?
一般物体認識は、画像の中に写っている物体が何であるかを識別するタスクだよ。「特定の1種類」ではなく、あらゆるカテゴリの物体を対象にする点が最大の特徴なんだ。まずは「特定物体認識」との違いから見ていこう。
特定物体認識=「あの個体か?」(同定)
一般物体認識=「何のカテゴリか?」(分類)
この違いは試験でよく問われる!
一般物体認識はなぜ難しいんですか?
同じカテゴリでも見た目が全然違ったり、環境によって見え方が大きく変わるからだよ。主な5つの要因を見てみよう。
一般物体認識にもいろんな種類があるんですか?
そうだよ。「何があるか」だけでなく「どこにあるか」「どの画素が何か」まで、タスクによって粒度が違うんだ。代表的な4つのサブタスクを見ていこう。
物体検出では「同定」と「分類」をするって聞いたんですが、どう違うんですか?
物体検出は2つの処理の組み合わせなんだ。同定は「どこにあるか・物体か背景か」の判断、分類は「何のカテゴリか」の判定。この2つをまとめて行うのが物体検出だよ。
「関心領域」と「バウンディングボックス」って何が違うんですか?
どちらも物体を囲む矩形だけど、関心領域(RoI)は途中段階の候補の枠で、バウンディングボックスは最終出力の確定した枠なんだ。
| 関心領域(RoI) | バウンディングボックス | |
|---|---|---|
| 役割 | 「ここに物体がありそう」という候補の枠 | 最終的に確定した物体の枠 |
| 段階 | 途中(候補提案の段階) | 最終出力 |
| 数 | 大量(R-CNNでは約2000個) | 物体の数だけ |
| 表現 | 候補領域 | (x, y, 幅, 高さ) の4値 |
R-CNNからFaster R-CNNまで、どう進化したんですか?
一言でいうとボトルネックを1つずつ解消して高速化した歴史だよ。何が遅かったのか、それをどう解決したかを追うとわかりやすいんだ。
① Selective Search(画像処理の古典手法)で約2000個の関心領域を生成
② 各領域を1つずつCNNに通して特徴を抽出
③ SVMで分類、回帰で位置を調整
問題点: 候補が2000個あればCNNを2000回実行 → 非常に遅い
① 画像全体を1回だけCNNに通して特徴マップを作成
② Selective Searchで候補領域を提案
③ 特徴マップから候補領域に対応する部分を切り出す(RoI Pooling)
④ 分類+位置調整
改善: CNNが1回で済み、R-CNNの約10倍に高速化
残った問題: Selective Search自体がまだ遅い
① 画像全体を1回だけCNNに通す
② RPN(Region Proposal Network)で候補領域を提案 → Selective Search不要に
③ RoI Poolingで特徴を切り出し
④ 分類+位置調整
RPN: 特徴マップ上の各位置で「ここに物体があるか?」を判定。アンカーボックス(様々なサイズ・比率の枠)を基準に候補を生成する。
| R-CNN | Fast R-CNN | Faster R-CNN | |
|---|---|---|---|
| 候補生成 | Selective Search | Selective Search | RPN(NN) |
| CNN実行 | 候補ごとに毎回 | 画像全体で1回 | 画像全体で1回 |
| 何を解決? | CNNで検出を実現 | CNNの重複実行を排除 | Selective Searchも排除 |
| 速度 | 遅い | 中程度 | 高速 |
2段階型は候補を出してから分類するんですよね。1段階型はどう違うんですか?
1段階型は候補提案なしで、検出と分類を同時に一括で行うんだ。だからとにかく速い!
精度重視 → 2段階型(R-CNN系): 医療画像など
速度重視 → 1段階型(YOLO/SSD): 自動運転、監視カメラなど
SSDは複数の層から特徴を取って大小の物体を検出するって話でしたが、もっと上手くやる方法はないんですか?
まさにその改良がFPNだよ。CNNの各層の特徴マップを上位層から下位層へ統合していくことで、すべてのスケールで「意味的に豊富な」特徴マップを作り出すんだ。
CNNの問題点:浅い層は解像度が高く位置情報が豊富だが意味的な情報が弱い。深い層は意味的な情報が豊富だが解像度が低い。
FPNの解決策:深い層の意味的な情報をトップダウン経路で浅い層に伝え、横方向の接続(Lateral Connection)で各スケールの特徴マップを統合する。これにより全スケールで「高解像度+高い意味情報」の特徴マップが得られる。
FPNは汎用的な特徴抽出モジュールなので、さまざまな検出・セグメンテーション手法と組み合わせて使われている:
・Faster R-CNN + FPN → 小さい物体の検出精度が大幅に向上
・Mask R-CNN → FPNをバックボーンに使用(インスタンスセグメンテーション)
・RetinaNet → FPN + Focal Loss で1段階型の精度を2段階型レベルに向上
物体検出の精度って、どうやって測るんですか?
物体検出には独自の評価指標があるよ。予測ボックスの正確さを測るIoU、モデル全体の精度を測るmAP、そして重複する検出を整理するNMSの3つを押さえよう。
| 指標 | 正式名称 | 説明 | ポイント |
|---|---|---|---|
| IoU | Intersection over Union | 予測ボックスと正解ボックスの重なり度合いを測る。 IoU = 交差領域 / 和集合領域 |
通常 IoU ≥ 0.5 で「正解」とみなす。1.0が完全一致。 |
| mAP | mean Average Precision | 各クラスのAverage Precision(AP)の平均値。物体検出モデルの総合的な精度評価指標。 | APはPrecision-Recallカーブの下の面積。mAPが高いほど優秀なモデル。 |
| NMS | Non-Maximum Suppression (非最大値抑制) |
重複する検出ボックスを除去する後処理。最も確信度の高いボックスを残し、IoUが閾値以上の他のボックスを削除する。 | 1つの物体に対して複数のボックスが出力されるのを防ぐ。 |
① すべての検出ボックスを確信度の高い順に並べる
② 最も確信度の高いボックスを「採用」として残す
③ 採用したボックスとIoUが閾値以上(大きく重なる)の他のボックスを削除
④ 残ったボックスで②③を繰り返す
これにより、同じ物体に対する重複検出が除去され、物体ごとに1つのボックスだけが残る。
セグメンテーションって物体検出とどう違うんですか?
物体検出は矩形の枠で囲むけど、セグメンテーションは画素ごとに「犬」「背景」とラベルをつけるんだ。物体の輪郭に沿って正確に領域を分けるよ。
通常のCNNは最後に全結合層があり、出力は「犬: 95%」のような1ラベル。FCNはこの全結合層をすべて畳み込み層に置き換え、入力と同じサイズの「画素ごとのクラスマップ」を出力できるようにした。
弱点: 畳み込み・プーリングで解像度が下がるため、出力がぼやける
エンコーダ・デコーダ構造を採用。エンコーダ(圧縮)→ デコーダ(復元)。
ポイントはMax Poolingの位置インデックスを記憶しておくこと。通常のMax Poolingは最大値の位置を捨てるが、SegNetはその位置を覚えておき、デコーダのMax Unpoolingで元の位置に値を戻す。これにより物体の境界がシャープに復元される。
構造がアルファベットの「U」の形をしたエンコーダ・デコーダ構造。最大の特徴はスキップ接続。
エンコーダの各段階の特徴を、対応するデコーダの段階に直接コピーして結合する。エンコーダで圧縮すると「何があるか」はわかるが「どこにあるか」の位置情報が失われる → スキップ接続で高解像度の位置情報を直接補う。
強み: 少ないデータでも高精度。医療画像(細胞、臓器のセグメンテーション)で広く使用。
セマンティックセグメンテーションだけじゃダメなんですか?
セマンティックだと同じ「犬」は全部まとめて「犬」としか分からない。犬Aと犬Bを区別したいときにインスタンスセグメンテーションが必要なんだ。
| 手法 | 種別 | 構造の特徴 | ポイント |
|---|---|---|---|
| FCN | セマンティック | 全結合層→畳み込み層に置換 | セグメンテーションの元祖 |
| SegNet | セマンティック | エンコーダ・デコーダ+Max Poolingの位置記憶 | 境界がシャープに復元 |
| U-Net | セマンティック | エンコーダ・デコーダ+スキップ接続 | 少データ・医療画像向け |
| DeepLab | セマンティック | Atrous Convolution(膨張畳み込み) | 広い受容野を確保 |
| Mask R-CNN | インスタンス | Faster R-CNN+マスク分岐 | 精度重視の代表手法 |
| YOLACT | インスタンス | 1段階型+マスク部品の合成 | 速度重視(リアルタイム) |
物体検出やセグメンテーション以外にも、画像から情報を取り出すタスクはあるんですか?
姿勢推定というタスクがあるよ。画像から人の関節の位置(キーポイント)を検出して、体の骨格構造を推定するんだ。スポーツ分析やAR、ジェスチャー認識などに使われている。
トップダウン方式:まず人物を検出(バウンディングボックス)→ 各人物ごとにキーポイントを推定
→ 精度が高いが、人数が多いと遅くなる
ボトムアップ方式:まず画像全体からすべてのキーポイントを検出 → キーポイントをグループ化して各人物に割り当て
→ 人数が増えても速度が落ちにくい
ボトムアップ方式の代表手法。画像全体から全員のキーポイントを一度に検出し、PAF(Part Affinity Fields)という仕組みで「どのキーポイントが同じ人に属するか」を判定する。
PAF(Part Affinity Fields)とは:関節と関節の間の「つながりの方向と強さ」を表す2Dベクトル場。たとえば「右肩→右肘」の方向場を学習しておけば、複数人がいても正しいペアで関節をつなげられる。
・スポーツ分析:選手のフォーム解析、動作の定量評価
・ジェスチャー認識:手話認識、UIの非接触操作
・AR/VR:体の動きに合わせたアバター制御
・医療・リハビリ:患者の歩行分析、姿勢矯正