これまで扱ってきた画像分類モデルは、画像を入力として受け取り、MNIST問題の「数字」クラスのようなカテゴリカルな結果を出力していました。しかし、多くの場合、画像に物体が写っていることを知るだけでなく、その正確な位置を特定したいと考えます。それがまさにオブジェクト検出の目的です。
画像出典: YOLO v2 ウェブサイト
例えば、画像内の猫を見つけたいと仮定します。非常に単純なオブジェクト検出のアプローチは以下のようになります:
- 画像を複数のタイルに分割する
- 各タイルに対して画像分類を実行する
- 十分に高い活性化を示したタイルを、対象の物体を含むとみなす
画像出典: 演習ノートブック
しかし、この方法では物体の境界ボックスを非常に不正確にしか特定できません。より正確な位置を特定するには、回帰を使用して境界ボックスの座標を予測する必要があります。そのためには特定のデータセットが必要です。
このブログ記事では、形状検出についての優しい導入が紹介されています。
以下のようなデータセットに出会うことがあるかもしれません:
- PASCAL VOC - 20クラス
- COCO - コンテキスト内の一般的な物体。80クラス、境界ボックスとセグメンテーションマスクを含む
画像分類ではアルゴリズムの性能を測定するのは簡単ですが、オブジェクト検出ではクラスの正確性だけでなく、推定された境界ボックスの位置の精度も測定する必要があります。そのために使用されるのがIntersection over Union (IoU)です。これは、2つのボックス(または任意の領域)がどれだけ重なっているかを測定します。
図2 出典: IoUに関する優れたブログ記事
アイデアはシンプルです。2つの図形の交差部分の面積を、それらの結合部分の面積で割ります。2つの領域が完全に一致している場合、IoUは1になります。一方、完全に分離している場合は0になります。それ以外の場合は0から1の間で変動します。通常、IoUが一定値以上の境界ボックスのみを考慮します。
特定のクラスの物体
- 精度-再現率曲線を考慮し、検出閾値(0から1まで)に応じた精度を示します。
- 閾値に応じて、画像内で検出される物体の数や精度・再現率の値が変わります。
- 曲線は以下のようになります:
画像出典: NeuroWorkshop
特定のクラス
IoUが一定値以上の検出のみを考慮します。例えば、PASCAL VOCデータセットでは通常$\mbox{IoU Threshold} = 0.5$が使用されます。一方、COCOでは異なる$\mbox{IoU Threshold}$値でAPが測定されます。
画像出典: NeuroWorkshop
オブジェクト検出の主な評価指標は平均平均精度 (Mean Average Precision, mAP) と呼ばれます。これは、すべての物体クラスにわたる平均精度の値であり、場合によっては$\mbox{IoU Threshold}$も含めて平均化されます。mAPの計算プロセスについては、このブログ記事やコードサンプル付きの説明で詳しく解説されています。
オブジェクト検出アルゴリズムには大きく分けて2つの種類があります:
- 領域提案ネットワーク (Region Proposal Networks) (R-CNN, Fast R-CNN, Faster R-CNN)。主なアイデアは、関心領域 (ROI) を生成し、それに対してCNNを実行して最大活性化を探すことです。この方法は単純なアプローチに似ていますが、ROIがより賢く生成される点が異なります。この方法の主な欠点は、画像に対してCNN分類器を何度も実行する必要があるため、速度が遅いことです。
- ワンパス (YOLO, SSD, RetinaNet) メソッド。これらのアーキテクチャでは、クラスとROIを一度のパスで予測するようにネットワークを設計します。
R-CNNは、Selective Search を使用してROI領域の階層構造を生成します。それらはCNN特徴抽出器とSVM分類器を通じて物体クラスを決定し、線形回帰を使用して境界ボックスの座標を決定します。公式論文
画像出典: van de Sande et al. ICCV’11
画像出典: このブログ
このアプローチはR-CNNに似ていますが、領域は畳み込み層が適用された後に定義されます。
このアプローチの主なアイデアは、ROIを予測するためにニューラルネットワークを使用することです。これを領域提案ネットワーク (Region Proposal Network) と呼びます。論文, 2016
画像出典: 公式論文
このアルゴリズムはFaster R-CNNよりもさらに高速です。主なアイデアは以下の通りです:
- ResNet-101を使用して特徴を抽出
- 特徴は位置感知スコアマップで処理されます。$C$クラスの各物体は$k\times k$領域に分割され、物体の部分を予測するように学習します。
-
$k\times k$ 領域の各部分について、すべてのネットワークが物体クラスに投票し、最大票を得た物体クラスが選択されます。
画像出典: 公式論文
YOLOはリアルタイムのワンパスアルゴリズムです。主なアイデアは以下の通りです:
- 画像を$S\times S$領域に分割
- 各領域について、CNNが$n$個の可能な物体、境界ボックスの座標、信頼度=確率 * IoUを予測
画像出典: 公式論文
以下のノートブックで学習を続けてください:
このレッスンでは、オブジェクト検出を達成するさまざまな方法について一通り学びました!
以下の記事やノートブックを読み、YOLOを試してみてください:
- YOLOについての良いブログ記事
- 公式サイト
- Yolo: Kerasによる実装, ステップバイステップノートブック
- Yolo v2: Kerasによる実装, ステップバイステップノートブック
- オブジェクト検出 by Nikhil Sardana
- オブジェクト検出アルゴリズムの良い比較
- オブジェクト検出のための深層学習アルゴリズムのレビュー
- 基本的なオブジェクト検出アルゴリズムへのステップバイステップの導入
- PythonでのFaster R-CNNの実装によるオブジェクト検出











