MLエンジニアへの道 #49 - 物体検出

Last Edited: 3/26/2025

このブログ記事では、コンピュータビジョンにおける物体検出(とインスタンスセグメンテーション)について紹介します。

ML

物体検出は、画像内の任意の数の物体を特定し分類するコンピュータビジョンのタスクです。 位置特定には、中心座標、幅、高さで明確に定義できるバウンディングボックス(bbox)を使用します。 実世界においては、環境を完全に理解するために複数の物体を特定し分類する必要があることが多いため(ゴミを検出して適切に処分する、道路上の人間や物体を検出するなど)、 より単純なコンピュータビジョンタスクよりも物体検出は関連性が高いです。

この高い関連性と引き換えに、物体検出はより複雑で、より洗練されたソリューションを必要とします。 これは、画像内の物体数が事前にわからないため適切な出力サイズの決定が難しく、モデルが重なり合う可能性のある同じクラスの物体インスタンスや様々なサイズの物体をを区別する必要があるためです。 この記事では、物体検出を実行するための従来のアプローチを紹介します。

R-CNN & Fast R-CNN

単純なアプローチとしては、様々なカーネルサイズの畳み込み層を画像上でスライドさせ、その出力を使用して各カーネルが特定の物体クラスを持つバウンディングボックスを表しているかどうかを予測する方法があります。 しかし、これは異なるカーネルサイズで無数の反復を必要とする非常に非効率的なアプローチです。代わりに、ヒューリスティック関数を使用して約2000の領域提案を生成できます。 次に、これらの領域をリサイズし、CNNを実行してクラスとバウンディングボックスを予測し、最も信頼度の高い提案を選択できます。このアプローチは領域ベースCNN(R-CNN)と呼ばれています。

R-CNN

ヒューリスティック関数の詳細はここでは扱いません(それに依存しないより良い方法が存在するため)。しかし、各領域でCNNを実行することは計算コストが高いことがわかります。 したがって、まずバックボーン(事前学習済みモデルの特徴抽出器を微調整する転移学習を活用)を使用して特徴抽出を行い、領域提案を特徴マップに投影し、 より小さなヘッドを使用してクラスとバウンディングボックスの予測を行うことができます。このアプローチはFast R-CNNと呼ばれ、トレーニングと推論の両方で大幅に高速化できます。

Faster R-CNN & Mask R-CNN

Fast R-CNNは従来のR-CNNと比較して高速ですが、推論時間の90%以上をCPU上のヒューリスティック関数を使用した領域提案の生成に費やしています。 さらに、ヒューリスティック関数は学習可能ではなく、良い提案と共に常に多数の質の低い提案を生成します。 Faster R-CNNはこれらの問題に対処するために、特徴マップを使用して領域提案を生成する領域提案ネットワーク(RPN)を導入し、物体検出のための最初のエンドツーエンドモデルとなりました。

RPN

RPNは小さなCNNで、特徴マップの各ピクセルごとに事前定義されたアンカーボックス(3つのサイズと3つの比率)に調整を加え、 それらを分類します(ボックスに物体が含まれているかどうか)。例えば、サイズ(32, 32, 128)の特徴マップに対して、 RPNはバウンディングボックス予測(32, 32, 36、9つのボックス * 調整のための4つの量(x', y', w', h')に対応)と分類(32, 32, 18、9つのボックス * 2(物体、背景)に対応)を出力します。 RPNは、アンカーボックスを調整し、真のバウンディングボックスとのIoUが0.7より大きい場合に物体として分類し、IoUが0.3未満のボックスを背景として分類するように訓練されます。 アンカーボックスから調整され、物体として分類された領域提案は、特徴マップのサイズに合わせてリサイズされ、バウンディングボックスとクラス予測のためのより小さなヘッドに渡されます。

Faster R-CNNは、学習可能な領域提案アルゴリズムとエンドツーエンドアーキテクチャにより、Fast R-CNNよりも性能が向上し、大幅に高速化されています。 しかし、バウンディングボックス予測を特徴マップに合わせてリサイズするために使用される方法であるROIプーリングは効果的ではありませんでした。 そのため、Mask R-CNNはROIプーリングをROIアラインに置き換えることで、一般的により効果的になりました(ROIプーリングとROIアラインの詳細は、それらを使用しないより良い技術が登場するため、ここでは扱いません)。 ROIアラインに加えて、Mask R-CNNはインスタンスセグメンテーションを実行するためにヘッドにマスキングまたはピクセル単位の分類を追加します。 セマンティックセグメンテーションとは異なり、インスタンスセグメンテーションは関心のある物体のみにセグメンテーションを実行し、 同じクラスの複数の物体インスタンスを区別します。ここで、物体検出とインスタンスセグメンテーションの間に強い関連性を見ることができます。

一段階検出器

前のセクションでは、固定のヒューリスティック関数またはニューラルネットワークによって領域提案を生成する方法を紹介しました。 これらは二段階物体検出器と呼ばれています。しかし、領域提案ネットワーク(RPN)を、 アンカーボックスアプローチと分類結果に基づいて直接バウンディングボックス予測を生成するヘッドに修正できます。 この一段階だけを含むよりシンプルなアプローチは、一段階物体検出と呼ばれています。

一段階検出器は、各領域提案に対してヘッドを実行する追加のステップを必要としないため、二段階検出器よりもはるかに高速である傾向があります。 しかし、二段階検出器には追加のバウンディングボックス修正メカニズムがあり、これが歴史的により高い精度に貢献していました。 ここで過去形を使っている理由は、様々なテクニックを取り入れた最近の一段階検出器の実装が、物体検出ベンチマークで最先端のパフォーマンスを達成しているからです。 これらについては今後の記事で説明します。(これが、ヒューリスティック関数、ROIプーリング、ROIアラインの詳細について説明していない理由です。)

データセットとメトリクス(mAP)

物体検出モデルについて議論してきましたが、それらをベンチマークするために使用されるメトリクスとデータセットについて言及することも重要です。 物体検出用の多くのデータセットが存在しますが、Common Objects in Context(COCO)データセットは最大かつ最も人気があり、 ベンチマーキング用の高品質なデータを提供しています。物体検出(またはインスタンスセグメンテーション)のための高品質なカスタムデータセットを作成するには、 様々なデータアノテーションツール(FiftyOne、Roboflowなど)を使用できます。

物体検出に使用されるメトリクスはバウンディングボックス予測と分類のニュアンスを捉える必要があルため非常に複雑です。 まず、モデルを評価するためにIntersection over Union(IoU)のしきい値を設定する必要があります。 IoUが低いバウンディングボックスは、比較対象となる正解のボックスがないからです。 テストセットの正解ボックスに対してIoU > 0.5のモデル出力のみを評価することを選択できます。 そして、例えば「犬」などの特定のカテゴリに対するモデルの品質評価に焦点を当てることができます。

バウンディングボックス予測には信頼度値(物体と背景の分類の形式で)が付いており、信頼度のしきい値によって、精度と再現率の値が変化します (より高い信頼度のしきい値は、偽陽性が少なく偽陰性が多くなる、つまり精度が高く再現率が低くなります)。 この可変である信頼度しきい値を考慮するために、再現率に対する精度の積分である平均精度を計算できます。 (計算の詳細はこちらのPersson, A.(2021)で説明されています。) すべてのカテゴリに対してこの平均精度を計算し、その平均を取ることができます。これが平均平均精度(mAP)です。

精度と再現率の好ましいバランスはアプリケーションによって異なる可能性があるため、mAPは物体検出の標準的なメトリクスとして使用されています。 通常、IoUのしきい値がIoU > 0.5のmAPを計算しており、これはmAP@0.5と呼ばれます。しかし、0.5以上の任意のIoUしきい値、例えばmAP@0.95を使用することもできます。 したがって、異なるしきい値でのmAPを計算し、それらの平均を取って、mAP@0.5:0.05:0.95のようなメトリクスを作成することがよくあります。 これはIoUしきい値0.5、0.55、0.6、...、0.95でのmAPの平均です。

インスタンスセグメンテーションでは、正解と予測されたマスクを使用して計算されたしきい値を持つ追加のmAPをよく使用します。 通常、0.5を超えるmAPは良いと見なされます。Mask R-CNNはデータセットによっては約0.4を達成し、最先端のモデルは一部のデータセットで0.6近くを達成しています。 様々なデータセットで最先端のモデルが95%以上の精度を達成する単純な画像分類とは異なり、(異なるメトリクス間の公平な比較ではありませんが)物体検出はより低いメトリクス値を扱います。 これを問題の本質的な複雑さによる上限と解釈するか、改善の余地と解釈するかは我々次第です。

結論

この記事では、物体検出とは何か、二段階物体検出器のいくつかの実装、そしてデータセットとメトリクスについて説明し、タスクの本質的な複雑さを理解しました。 次の記事では、最先端に近いパフォーマンスを達成する現代の一段階物体検出器を用いたソリューションについてさらに詳しく掘り下げます。

リソース