ディープ・ラーニングにおける物体検出

0

物体検出とは?

物体検出とはコンピューター・ビジョンの一分野であり、画像内に含まれる関心対象の物体を自動的に背景から区別して位置特定する手法です。例えば、図1に示す2つの画像では、いずれも前景に物体があります。左の画像では鳥が、右の画像では犬と人間が前景にあります。

「物体検出問題の解決」とは、「これらの物体をぴったりと囲むバウンディング・ボックスを配置し、それぞれのバウンディング・ボックスに対して正しい物体カテゴリーを関連付けること」を意味します。画像処理の領域における他のタスクと同様、物体検出を実行するときにもディープ・ラーニングは最先端の手法として力を発揮します。

「鳥」と「犬および人間」がそれぞれ特定されラベル付けされた画像の例

図1:物体検出の概念

物体検出の仕組み

物体検出に関する重要な問題の1つは、前景にある物体の数が画像によって様々に異なる、ということです。しかし、ここでは物体検出の仕組みを理解するために、まずは1つの画像に1個の物体しか存在しないと仮定し、この制約条件の下で物体検出問題を考えてみましょう。1つの画像に1個の物体しか存在しない場合、バウンディング・ボックスの発見と物体のカテゴリー判断という問題は、単純明快な方法で解決することができます。バウンディング・ボックスは4組の数値で表現されますから、バウンディング・ボックスの位置を学習するタスクは、回帰問題として無理なくモデル化することが可能です。そのタスクが済めば、物体のカテゴリー判断は分類問題として解くことができます。

ここでの「制約条件付きの物体検出」という課題に関する回帰および分類問題に対する解法を提供するのは、図2に示す畳み込みニューラル・ネットワーク(CNN)です。コンピューター・ビジョンの領域における他の従来型タスク(例:画像認識、キーポイント検出、セマンティック・セグメンテーションなど)の場合と同様、ここでの「制約条件付きの物体検出」という課題では、固定数のターゲットを扱います。これらのターゲットの当てはめは、固定数の分類または回帰問題としてターゲットをモデル化することによって実行可能です。

物体検出のフローチャート

図2:画像内から1個の物体を検出するためのネットワーク・アーキテクチャ

前述のとおり、真の物体検出はN個の物体を処理できなければなりません(Nの値は画像によって異なります)。残念ながら、図2に示したCNNは、このような、より一般的な問題を解決することができません。しかし、多くの矩形ボックスの位置とサイズについて仮説を立てることによってCNNの変種を使用し、CNNを物体の分類にのみ利用する、というやり方は可能かもしれません。私たちはそのような場合の矩形ボックスを、しばしば「ウィンドウ」と呼びます。ウィンドウ仮説を汎用的なものにするためには、画像内で考えられる全ての位置とサイズをカバーしなければなりません。それができれば、それぞれのサイズと位置のウィンドウについて、「その中に物体が存在するかどうか?」と、「存在する場合、物体のカテゴリーは何か?」を判断することが可能になります。

図3は、このアプローチで物体検出を実現する場合に候補となりうるウィンドウをいくつか示しています。画像は有限個のピクセルで構成されていますから、ウィンドウの総数は膨大です。検討すべきウィンドウの数の膨大さを考えると、このアプローチはコンピューティングの観点からは非実用的です。

居間の画像の中で複数の赤いアウトラインが物体を囲んでいる様子

図3:スライディング・ウィンドウ・アプローチにおいて候補となりうるウィンドウの一部を示した様子
画像出典:https://www.flickr.com/photos/nate/482673741/

ウィンドウを用いて物体を探すための効率的な手法

では、「一部のウィンドウだけを調べる」というスマートな方法で物体検出を実行することは可能でしょうか? 答えは「イエス」です。このような「ウィンドウの部分集合」を発見する方法には2つのアプローチがあり、それらは2つの異なる物体検出アルゴリズムへとつながります。

  1. 第1のカテゴリーのアルゴリズムは、最初にリージョン・プロポーザル(領域候補の抽出)を実行します。これは具体的には、コンピューター・ビジョンの従来の手法(選択的検索など)を用いて、あるいは、ディープ・ラーニングに基づくリージョン・プロポーザル・ネットワーク(region proposal network: RPN)を用いて、物体を含んでいる可能性の高い領域を選択する、ということです。候補ウィンドウの少数のセットを収集したら、セットの数だけ回帰モデルおよび分類モデルを定式化することによって、物体検出問題を解決することができます。このカテゴリーに属するアルゴリズムとしては、Faster R-CNN[1]、R_FCN[2]、FPN-FRCN[3] などがあります。このカテゴリーのアルゴリズムは、通常、「2段階法」と呼ばれます。これらは一般に、この後に紹介する「1段階法」に比べ、正確性は優れていますが、処理は低速です。
  2. 第2のカテゴリーのアルゴリズムは、固定位置にある固定サイズの物体だけを探します。これらの位置とサイズは、ほとんどのシナリオがカバーされるように戦略的に選択されます。通常、これらのアルゴリズムは、元の画像を固定サイズのグリッド(格子)領域に分割した上で、それぞれのグリッド領域に関して、あらかじめ決めておいた所定の形状およびサイズの、固定数の物体を予測することを試みます。このカテゴリーに属するアルゴリズムは「1段階法」と呼ばれます。この手法の例としては、YOLO[4]、SSD[5]、RetinaNet[6]などが挙げられます。このカテゴリーのアルゴリズムは、通常、より高速に実行できますが、正確性は劣ります。このタイプのアルゴリズムは、リアルタイム検出を必要とするアプリケーションで活用されることが多くなっています。

以下では、これらのうち2つの一般的な物体検出手法を取り上げ、もう少し詳しく検討します。

YOLOによる物体検出

YOLO (You Only Look Once) は、1段階の物体検出手法を用いる代表的なアルゴリズムです。このアルゴリズムが物体を検出するためにたどるステップを、図4とその下の箇条書きに示します。

画像内の人間と犬を検出するためにグリッドを使用する際の3つのステップ

図4:YOLO物体検出アルゴリズム

  1. 元の画像を等サイズのグリッドに分割します。
  2. それぞれのグリッドに関して、事前に定義した形状の、グリッドの中心を中心位置とするバウンディング・ボックスを、事前に設定した数だけ予測します。それぞれの予測には、クラス確率と物体信頼度(その領域が物体を含んでいるか、あるいは背景のみか)が関連付けられます。
  3. 最後に、高い物体信頼度およびクラス確率が関連付けられたバウンディング・ボックスを選択します。最も高いクラス確率を持つ物体クラスが、その物体のカテゴリーとなります。

事前に定義した形状の事前に設定した数のバウンディング・ボックスは「アンカーボックス」と呼ばれ、k平均法アルゴリズムによってデータから取得されます。アンカーボックスは、物体のサイズと形状についてデータセットから予備知識を捕捉します。異なるサイズおよび形状の物体を検出するためには、異なるアンカーが設計されます。例えば図5では、1つの場所に3種類のアンカーが表示されていますが、最終的には赤のアンカーボックスが中央の人物を検出します。言い換えると、アルゴリズムは、物体とこのアンカーボックスの適切なサイズを一緒に検出します。通常、最終的な予測は、アンカーの位置またはサイズ自体とは異なります。なぜなら、画像の特徴量マップから取得される最適化されたオフセット値が、アンカーの位置またはサイズに加算されるからです。

写真内の主要な物体を3種類のアウトラインがハイライトしている様子

図5:アンカーボックス
画像出典:https://www.flickr.com/photos/762_photo/16751321393/

YOLOアルゴリズムのアーキテクチャを図6に示します。検出層は、多数の回帰および分類オプティマイザーを含んでおり、その数はアンカーの数によって決まります。

物体検出のための畳み込みニューラル・ネットワークのネットワーク・フロー

図6:YOLOネットワークのアーキテクチャ

Faster RCNNによる物体検出

Faster RCNN[1] は、2段階の物体検出アルゴリズムです。図7は、Faster RCNNの2つの段階を示しています。アルゴリズム名に “Faster” と付いていますが、「1段階法よりも高速」という意味ではありません。この名称は歴史的な経緯を反映しており、以前のバージョン(オリジナルのRCNNアルゴリズム[7] やその後継のFast RCNN[8])よりも高速であることを示しています。Faster RCNNにおける高速化は、個々の関心領域(Region of Interest: RoI)に関する特徴抽出計算を共有する手法と、ディープ・ラーニングに基づくリージョン・プロポーザル・ネットワーク(RPN)の導入によって実現されています。

物体検出で使用されるRCNNの段階

図7:Faster RCNNの段階
(Faster RCNNの原論文[1] から引用し翻訳)

多数のCNN層を用いて特徴量マップを抽出した後、リージョン・プロポーザル・ネットワーク(RPN)が、物体を含んでいる可能性の高い多数のウィンドウを出力します。その後、アルゴリズムは、各ウィンドウ内部の特徴量マップを取得し、それらを固定サイズにリサイズ(またはポール)することで(=RoIプーリング)、物体のクラス確率とより正確なバウンディング・ボックスを予測します。

ここで生じる1つの疑問は、「RPNはどのようにウィンドウを生成するのか?」ということです。YOLOと同様、RPNもアンカーボックスを利用します。ただし、YOLOの場合とは異なり、RPNのアンカーボックスは、データから生成されることはなく、固定サイズおよび固定形状です。このようなアンカーボックスの方が、画像をより密にカバーできる可能性もあります。なお、RPNは、多くの物体カテゴリーに関する分類を行うのではなく、ウィンドウが物体を含むか否かの二値分類のみを行う、という点に注意してください。

SAS® のディープ・ラーニング機能における物体検出

物体検出は、SASのディープ・ラーニング機能でもサポートされています。詳細と使用例は、SAS Visual Data Mining and Machine Learningのドキュメンテーションに掲載されています。現在サポートされている物体検出アルゴリズムは、YOLOv1とYOLOv2です。Faster RCNNとRetina Networkは近い将来にサポートされる予定です。SASのディープ・ラーニング機能で開発したモデルは、SAS Event Stream Processingに容易にデプロイ可能であり、リアルタイム処理の詳細を心配する必要がありません。SASのディープ・ラーニング機能には、KerasタイプのPythonインターフェイスであるDLPy(これはオープンソース・プロジェクトです)も含まれています。DLPyのソースコードと使用例はGitHubで入手できます。

まとめ

物体検出はコンピューター・ビジョンの中でも難しいタスクですが、その主な理由は、物体の数が画像によって様々に異なるからです。アンカーボックスという概念は、物体を探すためのサブ・ウィンドウを選択する手段として考案されました。アンカーは、データから直接取得される場合もあれば、有望なウィンドウ候補のサイズと位置の大部分をカバーするように戦略的に設計される場合もあります。

1段階の物体検出アルゴリズムは、オブジェクトを直接検出するためにアンカーを利用します。2段階のアルゴリズムは、最初は領域候補の抽出を実行するために、その後は物体をぴったりと囲むバウンディング・ボックスと物体カテゴリーを判断するために、アンカーを利用します。リアルタイム・アプリケーションでは、YOLOのような1段階のアルゴリズムが最良のアプローチとなる傾向があります。これらのアルゴリズムは正確性が劣りますが、ハードウェア面の典型的な制約条件を考えると、計算の複雑さは扱いやすいレベルに収まります。より高い正確性が優先される場合には、通常は2段階法が好まれます。SASのディープ・ラーニング機能は、「フレームワーク内で作成したモデルをESPエンジンにデプロイ可能であり、追加のプログラミング作業なしでリアルタイム処理が実現する」という独自の特長を備えています。

参考文献
[1] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
[2] R-FCN: Object Detection via Region-based Fully Convolutional Networks
[3] FPN-FRCN: Feature Pyramid Networks for Object Detection
[4] YOLO9000: Better, Faster, Stronger
[5] SSD: Single Shot Mutibox Detector
[6] Focal Loss for Dense Object Detection
[7] RCNN: Rich feature hierarchies for accurate object detection and semantic segmentation
[8] Fast RCNN

<この記事はSAS Institute Japanが翻訳および編集しました。原文はこちらです。
SAS Viyaでの物体検出の利用例は「SAS Viya:一般物体検出(Object Detection)を試してみた」をご参照ください。
DLPyの使用例は他のブログ記事もご参照ください。>

Share

About Author

Leave A Reply

Back to Top