入門
近年では、最も人気のあるターゲット検出方法は、より高速なR-CNN説明することができ、私はこれらのメソッドをステップインします以下に簡単にまとめ、かつ詳細に重要なポイントをいくつか説明されています。以下からの最初のためにコーセラ-ディープラーニングンR-CNNは、それぞれの方法の開発を合理化アンドリューに要約されています。
R-CNN
RCNNは、地域+ RCNNの組み合わせです。全体のプロセスは、次のセクションに分かれています。
1.地域提案システム:画像抽出この提案システム(選択的検索、エッジボックスおよびその他の方法)によって(約2000)の関心領域、および保存するためにそれらを引き出します。
2. CNN:その特徴ベクトルを与えるCNNに、均一な大きさにこれらの領域のサイズを変更します。
3. SVM:SVM分類器の分類に特徴ベクトルのk番目(各クラスの各トレーニングSVM)。
4.バウンディングボックス回帰:エラー訂正面積と実領域を抽出するために設計された回帰モデルを、取得するために、実際のバウンディングボックスを比較し、前述の関心領域と。
要するに、これは非常にオープンを解体するすべてのステップのモデルだった、一度に精度が非常に高いです - しかし、この方法には欠点がありますが遅い、退屈なステップを。
SPPネット(追加の知識)
前面的R-CNN是将原图上所有proposal region依次送入至CNN中,提取各个region的feature map,这个速度无疑会很慢。那有没有一种更好的方法,能将原图直接输入至CNN,得到整个图像的feature map,然后在这个feature map上抠出proposal region呢?
SPP Net提出了Spatial Pyramid Pooling layer的思想来解决这一问题。
如上图,假设我们将图像输入至CNN提取了256个feature map(这时我们知道feature map上的一个像素的感受野对应的是原图上的一个框框,那么每一个proposal region对应到feature map中的框框我们都可以找到),那么我们可以依据原图上的proposal region来扣出的feature map上相应的区域,但是这些区域大小不一,所以无法送入全连接层,怎么办?这里就要用到Spatial Pyramid Pooling layer了。
对于每一个feature map上的区域,我们将44,22,11大小的这三张网格放到相应区域上,然后对这21个网格做最大池化(此时一个wh的网格只对应一个网格中的最大数字),那么对于一个区域,我们就能得到21维的特征向量。而我们得到了256个 feature map,所以一个区域我们就有256*21大小的特征向量。这么做的话,每个区域对应的特征向量维数就一样了~
再放一张图展示下R-CNN和SPP Net的区别:
总之,SPP Net在提取特征这一步骤降低了时间复杂度,同时它用可变尺寸图片训练,增加标度不变形并降低模型过拟合性。
Fast R-CNN
Fast R-CNN 借鉴了SPP Net 的思想,用滑动窗口的卷积实现方式,实现了同一张图片只用送入CNN一次,便可在feature map上得到所有proposal region的特征向量。相比之前的R-CNN,它有以下优点:
- 更高的检测识别率
- 更快的速度(对于一张图片,一次CNN提取特征即可)
- 更简洁的训练方式(一个网络,既能提取特征,还能做BBox回归,还能分类)
先谈谈这个RoI pooling layer,这个一层和SPP Net里面的Spatial Pyramid Pooling layer功能很相似,都是为了使不同大小的区域在经过pooling后得到同一维度的特征向量。本质上而言,RoI pooling layer就是简化版本的Pyramid Pooling layer。
为什么要简化? 它加快了计算速度。同时,在SPP net中,每个训练样本来自不同图像,而每个RoI在原图上对应着一个巨大的感受野,所以整个网络在反向传播到SPP layer之后,效率就很低了 ,所以说,SPP layer只能用来tune全连接层,而不能tune到它之前的卷积层。(这一点有待思考)
要怎么简化呢? SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只是用一个size的金字塔,将这个feature map下采样到一个7x7的feature map上,实现了不同大小的区域到全连接层维数的对应。
再谈谈RoI后面分支出来的Multi-loss,这个loss函数来源于softmax对标签的loss以及对bbox框框回归的loss,具体定义如下:
第一项,
,这个loss值为对class为u的预测概率取log。
第二项,
是为了权衡一二项的比重;
表示只有框内object不为背景(非零)的时候第二项loss才有效;
,这里我们计算的是真实框框
和预测框框$ t_u = (t^u_x , t^u_y , t^u_w, t^u_h )
smooth
x$离0越远惩罚力度越大。(很神奇这个能网络同时做到BBox regression,有待思考)
小结一下,它避免了RCNN中对一个图像的重复计算,同时它集成了更一体化的训练方式,使检测和分类准确度再次提高~不过,它还是没有解决挖掘proposal region的耗时问题。
Faster R-CNN
Faster R-CNN最重要的贡献是它提出了Region Proposal Network,这个网络代替了传统的Selective Search等方法,加快了region proposal的速度。话不多说,先看看Faster R-CNN的大致示意图:
整个网络可以看作是三部分:
1. 通过CNN提取整个特征图像。
2. 把整个特征图像送入RPN,提取有物体的,框框较大的感兴趣区域。
3. 将感兴趣区域从特征图像中扣出送入RoI池化层,再进行分类与BBox回归。
首先,RPN是怎么选出候选区域的见上面示意图。在VGG网络提取整个特征图像后,我们使用一个33的滑窗在这个图像上滑动,对于每一个位置,我们同时预测k个不同region proposals,所以左上角的分类层含有2k个输出(表明是否为物体的概率),右上角的边框回归层有4k个输出(表示region的坐标到groundtruth的坐标的四个矫正量)。其中,这k个proposals分别对应原图中k个框框里面object的大致位置。
其次,为什么一个卷积出来的256-d向量能对应k个anchors个人理解,anchor boxes的size是我们人为固定好了的(anchor boxes的大小对应的是原图像的,它中心点是原图像上anchor boxes的中心点,对应到示意图里就是那个蓝点点),但是实际上神经网络中并没有把这k个anchor boxed坐标当做某某参数来搞。而是,神经网络在训练的过程中,每个anchor会根据它对应的k个boxes学出4k个坐标矫正量(根据“人工定义的anchor boxes的坐标+人工标注groundtruth的坐标”得到的loss来学习)。(如果理解有误,还望在评论中批评指出,谢谢!)
最后来看看RPN的loss函数,见下图。
第一项,表示是否为object的log loss。第二项,
表示框内只有是个object的时候才为1,这时
同じとリターンロスの前に、あまり言うことはありませんと述べた-
ここでは多くはない、のような、高速R-CNNの前に箱にBBox回帰とこれら二つのものが、分類器の分類損失と微調整の背後にあると言います。
〜より速く、より正確な精度を得るための別の方法RPN以前に選択された領域を有する短い、高速R-CNNでなく、アンドリュー・ウが述べ、それはトレーニングの終了と同じネットワークであってもよいが、それ候補者からのステップのこのシリーズの国境への復帰は非常に面倒で、エリアを分類することを提案しました。だから、我々はより簡潔で、より効率的なターゲット検出方法を期待します -
リファレンス
https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/object_localization_and_detection.html
http://blog.csdn.net/xjz18298268521/article/details/52681966
http://blog.csdn.net/myarrow/article/詳細/ 51878004
http://blog.csdn.net/qq_34784753/article/details/78707613
https://www.zhihu.com/question/42205480