ロボットが「テーブルの上のコップを掴む」「前方の歩行者を避ける」といった動作をするには、まずカメラ映像から「何が」「どこにあるか」を理解しなければならない。この理解を担うのがObject Detection(物体検出)とSemantic Segmentation(セマンティックセグメンテーション)である。両者はよく並べて語られるが、実は出力の粒度も、解くべき問題の立て方もまったく異なる。この記事では、この2つの技術を土台から積み上げ、3D版・比較の整理まで一気通貫で見ていく。

0. この記事で分かること

1. まず結論:Detection/Segmentationとは何か

一言で言えば、Object Detectionは「画像のどこに、何があるか」を四角形(バウンディングボックス)で答える技術であり、Semantic Segmentationは「画像の各ピクセルが、何であるか」を塗り分けで答える技術である。両者はどちらも「画像を理解する」という目的は共通しているが、答え方の解像度がまったく違う。

この2つを軸に、実務ではさらに2つの派生タスクが登場する。Instance Segmentationは、Semantic Segmentationのようにピクセル単位で塗り分けつつも、同じクラスの物体(例えば「人」が3人写っている場合)を個体ごとに区別する。Panoptic Segmentationは、そのInstance Segmentationと、道路や空といった「数えられない背景」を扱うSemantic Segmentationを1つの出力に統合した、もっとも網羅的なタスクである。この4つの関係は本記事の第9節で表にして整理する。

2. Object Detectionとは何か(Class/Bounding Box/Confidence)

Object Detectionが画像1枚に対して出力するのは、物体ごとの3つ組の集合である。

画像分類(Image Classification)が「この画像に写っているものは何か」という1つの答えしか返さないのに対し、Object Detectionは「画像の中に、いくつ、どこに、何が」写っているかを同時に答える。この「個数も位置も未知」という点が、Object Detectionを画像分類より本質的に難しい問題にしている。1枚の画像に物体が0個かもしれないし、100個写っているかもしれない——出力の個数自体が可変であるという設計上の制約が、後述するあらゆるアルゴリズムの工夫の出発点になる。

3. Detectionはどうやって実現する?

出力の個数が可変という問題に対し、現代のDetectionアルゴリズムはほぼ共通して次の2段階のパイプラインを採る。まず画像全体から特徴マップを抽出し、その特徴マップの上に大量の候補位置(アンカーボックスや、後述するTransformerのクエリ)を敷き詰めて、候補ごとに「物体か背景か」「物体ならどのクラスで、正確な位置はどこか」を判定する。

Object Detectionの基本パイプライン 入力画像 特徴抽出 (CNN / Transformer) 検出ヘッド (Detection Head) クラス + Box座標

図1 — 特徴抽出器(バックボーン)が画像を圧縮した特徴マップに変換し、検出ヘッドがその上でクラス分類とボックス回帰を同時に行う。

検出ヘッドの内部では、実質的に2つの回帰・分類問題が同時に解かれている。1つは「その候補位置に物体があるか、あるならどのクラスか」という分類問題、もう1つは「候補位置(アンカー)から実際の物体の位置へ、どれだけズレを補正すればよいか」という回帰問題である。この2つを重み付き和で1つの損失関数にまとめたものが、Fast R-CNN以降の検出器で広く使われている多タスク損失(multi-task loss)である。

\mathcal{L} = \mathcal{L}_{cls}(p, p^{*}) + \lambda \, \mathbb{1}[p^{*} > 0] \, \mathcal{L}_{reg}(t, t^{*})

ここで p はモデルが予測したクラス確率、p^{*} は正解クラス、t は予測したボックスの補正量、t^{*} は正解ボックスから逆算した補正量の目標値である。指示関数 \mathbb{1}[p^{*} > 0] は「背景ではなく実際に物体が存在する候補についてのみ、位置の回帰誤差を計算する」ことを意味する——背景と判定された候補にボックス位置の正解は存在しないため、これは自然な制約である。\lambda は分類と回帰、どちらの誤差をどれだけ重視するかを調整する係数である。

4. 主要Detectionアルゴリズム

Detectionアルゴリズムの系譜は、「候補領域をどう絞り込むか」「ボックスをどう予測するか」という2つの軸で見ると理解しやすい。

R-CNN(Girshick他、2014年)は、Selective Searchという画像処理アルゴリズムで画像から2000個程度の候補領域を切り出し、その一つひとつをCNNに個別に通して分類する方式だった。精度は高いが、候補領域ごとにCNNを回すため極めて遅かった。

Fast R-CNN(Girshick、2015年)は、画像全体を1回だけCNNに通して特徴マップを作り、候補領域はその特徴マップ上で切り出す(RoI Pooling)ことで、候補領域ごとの重複計算を排除した。

Faster R-CNN(Ren・He・Girshick・Sun、2015年)は、候補領域の生成自体もRegion Proposal Network(RPN)という小さなネットワークに置き換え、候補生成から分類・回帰までを1つのネットワークで完結させた。ここまでの3世代が、いわゆるTwo-stage検出器の系譜である。

SSD(Liu他、2016年)YOLO(Redmon他、2015〜2016年)は、候補領域生成のステージを丸ごと省き、特徴マップ上の各位置から直接クラスとボックスを予測するOne-stage検出器の先駆けとなった。速度を大きく引き上げた一方、初期のYOLOは小物体の検出精度でTwo-stage系に劣るという課題を抱えていた。

RetinaNet(Lin他、2017年)は、One-stage検出器が抱えていた「背景候補が物体候補より圧倒的に多く、学習が背景ばかりに引っ張られる」というクラス不均衡問題に対し、Focal Lossという損失関数を提案して解決した。これによりOne-stageでもTwo-stage並みの精度を達成できることを示した。

FCOS(Tian他、2019年)は、そもそもアンカーボックス(あらかじめ複数のサイズ・アスペクト比を仮定した基準ボックス)を使わないアンカーフリーな設計を採用し、特徴マップ上の各ピクセルから直接、物体境界までの距離を回帰する方式に転換した。アンカーの形状やスケールを事前に設計するハイパーパラメータ調整の手間を大きく減らした。

DETR・Deformable DETR・DINOは、Transformerを使って検出を「集合予測問題」として解く新しい系譜であり、次節でまとめて扱う。

5. Two-stage vs One-stage

Two-stageとOne-stageは、「候補領域の絞り込みを独立したステージとして持つかどうか」という一点で分かれる。

観点 Two-stage(代表: Faster R-CNN) One-stage(代表: YOLO)
処理の流れ 候補領域生成(RPN)→領域ごとに分類・回帰 特徴マップから直接、全位置で分類・回帰
精度 一般に高い、特に小物体・密集物体に強い 近年の改良でTwo-stage並みまで向上
推論速度 相対的に遅い(候補ごとの処理が残る) 速い、リアルタイム用途向き
計算量 候補数に比例して増える 画像サイズにほぼ比例、予測可能
実装・チューニングの難度 ステージが多く複雑 パイプラインがシンプル
向いている場面 オフライン処理、精度最優先の検査・解析 車載・ロボットのリアルタイム認識

候補領域の重なりを間引く後処理としてNMS(Non-Maximum Suppression)が長らく両系統で使われてきた。同一物体に対して出力された複数の候補ボックスのうち、重なり(IoU: Intersection over Union)が閾値を超えるものを間引く処理で、次の式で定義される。

\text{IoU}(A, B) = \frac{|A \cap B|}{|A \cup B|}

ABは2つのボックスが占める領域であり、両者の重なり面積を、和集合の面積で割ることで0〜1のスコアにする。IoUが高いほど2つのボックスは同じ物体を指している可能性が高いと判断し、確信度の低い方を間引く。NMSは効果的だが、密集した物体を誤って間引いてしまう副作用もあり、後述するDETR系はこの後処理自体を不要にする設計を採っている。

6. Transformer時代のDetection(DETR/Deformable DETR/DINO)

DETR(Carion他、2020年、Facebook AI)は、Detectionの定式化そのものを変えた。アンカーもNMSも使わず、画像特徴をTransformerエンコーダに通し、あらかじめ用意した固定数の「クエリ(物体候補を表す学習可能なベクトル)」をデコーダに通すことで、クエリの数だけボックス・クラスの組を直接出力する。学習時には、予測された集合と正解の集合をハンガリアン法(Hungarian algorithm)で1対1に対応づけ、その対応に基づいて誤差を計算する。

\hat{\sigma} = \arg\min_{\sigma \in \mathfrak{S}_N} \sum_{i=1}^{N} \mathcal{L}_{match}\left(y_i, \hat{y}_{\sigma(i)}\right)

y_ii 番目の正解物体、\hat{y}_{\sigma(i)} は並べ替え \sigma の下でそれに対応づけられた予測、\mathfrak{S}_NN個の要素の並べ替え全体の集合である。この式は「予測と正解を最もコストが小さくなるように1対1で対応づける並べ替え \hat{\sigma} を求める」ことを意味し、この対応づけが済んで初めて通常の分類・回帰損失を計算できる。1つの物体に複数の予測が重複して割り当てられることが原理的にないため、NMSという後処理が不要になる。

ただしDETRは、Transformerの自己注意が画像全体を毎回見るため計算コストが高く、収束にも非常に多くの学習エポックを要するという課題があった。Deformable DETR(Zhu他、2020年)は、各クエリが画像全体ではなく、学習された少数のサンプリング点だけに注目する変形可能(deformable)な注意機構を導入し、計算コストを抑えながら収束を大幅に速めた。DINO(Zhang他、2022年、"DETR with Improved DeNoising Anchor Boxes"の意)は、学習を安定させるためのノイズ付きクエリ(contrastive denoising)や、クエリの初期値を特徴マップから選び出すmixed query selectionなどを導入し、当時のDETR系列で最高精度を達成した。Transformer系検出器は現在、YOLO系と並ぶもう一つの主流として実運用にも広がりつつある。

7. Semantic Segmentationとは何か

Semantic Segmentationは、画像の各ピクセルに対して「そのピクセルがどのクラスに属するか」を予測するタスクである。出力はバウンディングボックスではなく、入力画像と同じ解像度を持つ「クラスマップ」——各ピクセルにクラスIDが割り当てられた画像そのものになる。

Object Detectionが物体を矩形という粗い形で近似するのに対し、Semantic Segmentationは物体の輪郭そのものをピクセル単位で表現できる。そのぶん、道路の縁石のような細長い形状や、木の枝のように複雑な輪郭を持つ対象の認識に強い。一方で、同じクラスの物体が複数写っていても、Semantic Segmentationはそれらを区別しない——「人」というクラスのピクセルをまとめて塗るだけで、そこに何人写っているかという個体数の情報は失われる。この限界を解消するのが、後述するInstance Segmentationである。

8. 主要Segmentationアルゴリズム

FCN(Fully Convolutional Network、Long・Shelhamer・Darrell、2015年)は、画像分類用のCNNから全結合層を取り除き、畳み込み層だけで構成することで、任意サイズの画像に対してピクセル単位の予測を直接出力できるようにした最初期の手法である。Semantic Segmentationを「end-to-endに学習できる1つのネットワーク」として確立した、この分野の出発点にあたる。

U-Net(Ronneberger他、2015年)は、医療画像セグメンテーション向けに提案された、エンコーダ(解像度を下げながら特徴を抽出)とデコーダ(解像度を戻しながら復元)を左右対称に配置し、対応する解像度のエンコーダ層とデコーダ層を直接つなぐ「スキップ接続」を導入した。細かい輪郭情報を保ったまま高解像度な出力を作れるこの設計は、医療分野を超えて広く使われる標準アーキテクチャになった。

SegNet(Badrinarayanan他)は、エンコーダでのプーリング時にどの位置が最大値だったかという「プーリングインデックス」を記憶しておき、デコーダでのアップサンプリング時にそれを再利用することで、メモリ効率よく境界を復元する設計を採った。PSPNet(Zhao他、2017年)は、異なるスケールの領域ごとに特徴を平均するPyramid Pooling Moduleを導入し、狭い受容野では捉えきれない、画像全体の文脈情報を取り込めるようにした。

DeepLabシリーズ(Chen他)は、通常の畳み込みの代わりに、畳み込みカーネルの間隔を広げるDilated(Atrous)Convolutionを使うことで、解像度を落とさずに受容野だけを広げるという設計を核に、v1からv3+(2018年)まで版を重ねて発展した。HRNet(Wang他、2019年)は、他の多くの手法が一度解像度を落としてから戻すのに対し、高解像度の特徴マップを処理の最初から最後まで並列に保持し続け、異なる解像度間で情報を交換し続けるという逆転の発想を採った。

SegFormer(Xie他、2021年)は、Transformerの階層的なエンコーダと、軽量なMLPだけで構成したデコーダを組み合わせ、シンプルな構成で高い精度と効率を両立した。Mask2Former(Cheng他、2022年)は、セグメンテーションを「固定数のクエリがそれぞれ1つのマスクとクラスを予測する」問題として定式化し、各クエリの注意対象を前段で予測したマスク領域だけに絞る「マスク付きアテンション」により、高速な収束と、Semantic・Instance・Panopticすべてに対応する汎用性を同時に実現した。

9. Detection/Semantic/Instance/Panopticの比較

ここまでに登場した4つのタスクは、「個体を区別するか」「背景(道路・空・壁のように、数えられない領域)を扱うか」という2つの軸で整理すると関係が一目で分かる。

タスク 出力の単位 同クラス内の個体区別 背景(non-countable)の扱い 代表アルゴリズム 主な評価指標
Object Detection バウンディングボックス する(ボックスが個体ごと) 扱わない Faster R-CNN, YOLO, DETR mAP
Semantic Segmentation ピクセル単位のクラスラベル しない(同クラスは1色で統合) 扱う FCN, DeepLab, SegFormer mIoU
Instance Segmentation ピクセル単位のマスク する(個体ごとに別マスク) 扱わない Mask R-CNN, Mask2Former AP(マスクIoU基準)
Panoptic Segmentation ピクセル単位のクラス+個体ID する(前景のみ) 扱う(背景はクラスのみ) Panoptic FPN, Mask2Former PQ(Panoptic Quality)

Panoptic Segmentation(Kirillov他、2019年に提案)は、この表からも分かる通り、Instance SegmentationとSemantic Segmentationの「良いとこ取り」である。前景の物体(人・車など、数えられるもの)はInstance Segmentationのように個体ごとに区別し、背景(道路・空など、数えられないもの)はSemantic Segmentationのようにクラスだけを塗る。1枚の画像を過不足なく説明しようとすると、最終的にはこのPanoptic Segmentationの形に行き着く、と考えると4タスクの関係が理解しやすい。

評価指標であるmIoU(mean Intersection over Union)は、クラスcごとに正解領域G_cと予測領域P_cのIoUを求め、全クラスで平均する。

\text{mIoU} = \frac{1}{|C|} \sum_{c \in C} \frac{|G_c \cap P_c|}{|G_c \cup P_c|}

物体検出のmAPがボックス単位の一致で採点するのに対し、mIoUはピクセル単位の一致で採点する——この評価指標の違いも、両タスクが「何を正解とみなすか」の違いをそのまま反映している。

10. 3D Object Detection

自動運転やロボットでは、2D画像だけでなくLiDARが取得する点群から直接、物体の3次元位置・サイズ・向きを検出する必要がある場面が多い。点群は2D画像のような格子状の構造を持たないため、そのままではCNNにかけられない。この「不規則なデータをどう規則的な形に変換するか」が3D Object Detectionの核心的な設計課題になる。

SECOND(Yan他、2018年)は、点群を3次元のボクセル(立方体の格子)に分割し、物体が存在しない大部分のボクセルを計算からスキップするスパース畳み込み(Sparse Convolution)によって、3D CNNの計算量を大きく削減した。PointPillars(Lang他、2019年)は、ボクセルをさらに単純化し、鉛直方向にまとめた「柱(Pillar)」単位で点群を集約することで、3次元畳み込みではなく通常の2次元畳み込みだけで処理できるようにし、速度を大きく引き上げた。

PV-RCNN(Shi他、2020年)は、ボクセルベースの処理で得られる効率性と、点群を直接扱うPointNet系の処理で得られる高精度な位置情報を組み合わせた、Point-Voxelのハイブリッド設計を採った。CenterPoint(Yin他、2021年)は、物体を「中心点1点」として検出し、そこから幅・高さ・奥行き・向きを回帰するアンカーフリーな設計を3D検出に持ち込み、PointPillarsやVoxelNet系のバックボーンと組み合わせて高い精度を達成した。

これらの手法の多くは、最終的に鳥瞰図(BEV: Bird's-Eye View、真上から見た2次元の特徴マップ)に点群情報を投影してから検出ヘッドにかける、という共通の設計思想を持つ。高さ方向の情報を圧縮する代わりに、自動運転で特に重要な「路面上のどこに物体があるか」という水平方向の関係を、通常の2D検出器と同じ枠組みで扱えるようにする工夫である。

11. 3D Semantic Segmentation

3D Semantic Segmentationは、点群の各点(またはLiDARの1レーザー反射点)に対してクラスラベルを付与するタスクである。ここでも、点群という不規則データをどう扱うかで手法が大きく分かれる。

PointNet++(Qi他、2017年)は、点群を各点そのまま(ボクセル化などの変換なしに)ネットワークに入力し、近傍点をグループ化しながら階層的に特徴を集約する設計を確立した、点ベース手法の基礎である。RandLA-Net(Hu他、2020年)は、大規模な点群を扱う際のボトルネックだった近傍探索を、ランダムサンプリングと、失われた情報を補うローカル特徴集約モジュールの組み合わせで軽量化し、都市規模の点群でも実用的な速度を実現した。

RangeNet++(Milioto他、2019年)は、点群を3次元のまま扱うのではなく、LiDARが取得する順序をそのまま使って2次元の「レンジ画像(距離画像)」に投影し、通常の2D CNNで処理してから3次元に戻すという設計を採った。2D CNNの成熟した技術をそのまま転用できる速さが強みである。Cylinder3D(Zhu他、2021年)は、屋外LiDAR点群が中心(センサー位置)から放射状に広がるという特性に着目し、直交座標ではなく円柱座標でボクセル分割することで、遠方でまばらになる点群密度の偏りに対処した。SPVNAS(Tang他、2020年)は、点ベースの処理とボクセルベースの処理を融合するSparse Point-Voxel畳み込みに、ニューラルアーキテクチャサーチ(NAS)を組み合わせ、精度と推論速度のトレードオフが優れた構成を自動探索した。

2D版と同様、3D Semantic Segmentationも「点をそのまま扱う(点ベース)」「規則格子に変換する(ボクセル・レンジ画像ベース)」という2つの設計思想の間で、精度・速度・メモリ効率のバランスを取る歴史をたどってきたと整理できる。

12. 実用上の選び方

用途によって、Detection/Segmentationのどちらを、どのアルゴリズムで使うべきかは大きく変わる。

計算資源が限られるエッジデバイス上で動かす場合は、精度よりも速度・軽量性を優先してYOLO系やSegFormerの軽量版を選び、オフラインでの精緻な解析(医療画像・衛星画像など)では、精度最優先でTwo-stage検出器やMask2Former系を選ぶ、という「リアルタイム性と精度のどちらを優先するか」がもっとも大きな判断軸になる。

最新の技術動向(NMSフリー化、オープン語彙検出、Segment Anything系の基盤モデル化など)は、物体検出の技術動向セマンティックセグメンテーションの技術動向で扱っている。

13. まとめ

Object Detectionは物体を矩形で、Semantic Segmentationはピクセル単位で捉える、解像度の異なる2つの画像理解タスクである。Detectionの系譜はTwo-stage(Faster R-CNN)からOne-stage(YOLO)、そしてアンカー・NMSを撤廃したTransformer系(DETR/DINO)へと進み、Segmentationの系譜はFCNからU-Net、DeepLab、そしてTransformerベースのSegFormer/Mask2Formerへと進んできた。この2つの技術を土台に、個体区別まで行うInstance Segmentation、両方を統合するPanoptic Segmentation、そして点群を対象にした3D版が積み上がっている——どれを選ぶかは、常に「精度」と「速度」のどちらを優先する場面かで決まる。

#物体検出 #セマンティックセグメンテーション #インスタンスセグメンテーション #ディープラーニング #ロボティクス入門