基于深度学习的图像分割: Learning to Segment Object Candidates -- Facebook

转载请表明:http://blog.csdn.net/ikerpeng/article/details/52453830

内容概要:

采用的是 两步走的 Object detection的 深度学习框架,首先通过框架的第一部分的分支给出 目标 proposal; 然后 在proposal当中进行检测。 文章的的优点在于: proposal和 detection两部分共享大部分网络,网络精简 且效率高; 得到的proposal 数目更少,但是recall却非常的高;文章的准确度大幅度的提高;目前刚刚开源。


算法思路:

算法中对于输入的一张图片,目标是要得到当中可能存在的目标proposals,以及各个proposal的得分值。为了达到这个目的算法,将网络分为两个分支,第一个部分输出图片patch块的Mask,第二个分支得到它的得分值。两个分支的前部分共享很大一部分的网络来得到底层的特征。相比于其他的数据,数据的出入部分包括了像素级别的掩码标记。

数据部分:

每一个训练样本k都包括以下的三部分: 1.RGB三通道的样本patch块; 2. patch块当中每一个像素的 二值掩码; 3. 样本块的标签。 其中,如果在这个patch块中心或附近存在一个object并且这个object在一定尺度的容忍范围内 占满这个patch块,那么patch块的标签为1,否则为-1.再来看一下掩码如何赋值: 当标签为1的时候,如果某像素点是中心点这个object(因为它有可能是别的object目标的一部分)的一部分的话,那在mask当中,这个像素点的值为1,否则为-1;而当标签为-1的时候,掩码mask也就不用了(全部为0就好了)。

网络部分:

是在VGG-A网络进行的 fine-tuning(备注: 网络中包括8层的卷积网络(最后的卷积层输出为 512张 feature maps),5层的maxpooling,以及三层的 fully connected),在构建本文的网络的时候,作者首先去掉VGG当中的全部的全连接层,以及最后的maxpooling层(因为,需要用到前面学到的特征),因此网络当中海保留了4个 22的maxpooling层,因此相当于对于输入的样本进行了1/16的降采样(这里是有卷积后 尺度不变的假设的),然后构建出网络的两个分支: Mask分支,接一个11的卷积核,然后再接了一个像素级别的分类器(也算是一层,理论上说大小等于原来输入的patch的像素点个数,但是实际上应该小于,然后 上采样还原); score分支,接一个maxpooling层然后加上两个全连接层,最终输出一个打分值,判断patch的标签。如下所示为训练的损失函数


公式的前一部分是对mask部分的处理,其中前面的乘数部分表示说:对于不存在目标部分的掩码,就不要在进行训练了,也就是标签为-1的时候带入到损失函数中的时候,其实第一部分是为0的,而当对该像素预测的掩码的值和实际的值相接近的时候产生的损失就很小;第二部分是对patch块的预测,看其中是否包含object。

应用细节:

经过变换后的样本,在距离原来的样本中心点 ±16个像素点,尺度变换为0.8~1.2 都被视为是 和原来样本一样的,且也会被给予1的标签;而如果是距离任何的样本中心点 ±32个像素点以上,尺度变换为0.5或者是2倍的范围外都被视为是和原来样本不一样的,且也会被给予-1的标签。

在 测试阶段,对于输入的一张图片,以16pixels的步长变换location,以1/4到2倍的尺度(进行变换。这样来保证至少有一个patch能够包括其中所有的object。


效果示例:




作者: iker peng

时间:2016.9.6



猜你喜欢

转载自blog.csdn.net/u012192662/article/details/52453830
今日推荐