前回は、一般物体検出の様々な手法を整理しました。第51回目の今回は、その中のFast R-CNN[1]の概要について解説します。

R-CNNの課題

第49回で紹介したR-CNNでは、学習を各処理ごとに多段階に行う必要があり複雑、学習に非常に時間を要する、メモリ消費量が大きい、画像1枚に対する検出処理で47secもの時間がかかる、という欠点がありました。

図1に示すR-CNNの処理フローの中で、処理に時間を要しているのは3のCompute CNN featuresです。2k個(〜2000個)もの物体候補それぞれをリサイズして個別にCNNに通す必要があり、処理が遅いことの大きな原因となっていました。物体候補の領域が重なることもあるため、重複した領域は何度も処理することになってしまいます。

この課題を最初に解決したのがSPPnet[2]です。SPPnetの名前の由来でもあるSpatial Pyramid Poolingは、任意のサイズの領域を固定のサイズにプーリングできる手法です。まず入力画像をCNNに通し、Feature mapを生成します。そのFeature mapに対してそれぞれの物体候補領域毎にSpatial Pyramid Poolingを適用することで、効率的に物体候補領域毎の特徴量を抽出することができます。しかし、SPPnetは、前述の「多段階の複雑な学習が必要」という課題は残ったままでした。

図1 R-CNNの処理フロー

図1 R-CNNの処理フロー

Fast R-CNNの概要

Fast R-CNNはmulti-task lossを導入することで、1回の学習で各ステージを同時に学習できるようになりました。Fast R-CNNの構造は図2の通りです。任意のサイズの入力画像と、その画像中の複数の物体候補領域(RoI:Region of Interest)が入力されると、まず入力画像をFully convolutional networkに通すことでFeature mapを求めます。そして、物体候補領域(RoI)をそのFeature map空間に投影し、投影されたRoIの中でPooling処理を行うことで、物体候補ごとに固定サイズのFeature mapを生成します(図中のRoI pooling layer)。

そして、全結合層(FCs:Fully connected layers)で固定長の特徴量ベクトルを求めます。最後に、その特徴量ベクトルを物体の種別を推定するための全結合層(FC)と、物体の外接矩形の位置、サイズを推定するための全結合層(FC)に入力し、物体の種別、位置、サイズを求めます。

推定誤差は、物体の種別の推定誤差と、物体の外接矩形の位置・サイズの推定誤差の2つです。この2つを同時に考慮したものがmulti-task lossで、multi-task lossを最小化することで図2に記載したネットワークを一気に学習することができるわけです。

第50回の記事で、Fast R-CNNの「End-to-end trainingの可否」を△としました。 これは、物体候補領域(RoI)を求める部分が図2の構造に組み込まれていないためです。

図2 Fast R-CNNの構造

図2 Fast R-CNNの構造

次回は、「Faster R-CNN」の概要について解説します!


参考文献
[1] Ross, Girshick, “Fast r-cnn.” in ICCV2015
[2] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun, “Spatial pyramid pooling in deep convolutional networks for visual recognition.” IEEE transactions on pattern analysis and machine intelligence 37.9 (2015)