MultiNet论文阅读笔记
刚开始接触这方面,有什么不懂的请大家不吝指教。这篇笔记只是作为自己学习的一个记录而已,请大家轻点喷。。
为了提高实现自动驾驶等实时应用的计算时间,提出了一种通过统一架构的联合分类、检测和语义分割的方法。整个方法的架构可以表示为编码器—解码器。其中编码器采用的是VGG-16网络的前13层的输出(feature map大小为39X12),此特征在三个任务解码器之间共享。通过构造这种方法,可以进行端到端的训练,并且在具有挑战性的KITTI数据集中表现非常出色,超越了道路划分任务中的最先进技术。我们的方法也非常有效,执行所有任务只需要不到100 ms。
编码器:由VGG16网络的卷积层和池化层组成,采用前13层输出的结果。并且在三个任务之间共享权重。
MultiNet架构
解码器:
分类解码器(Classification Decoder):在编码器的输出(39X12X512)之后应用于一个1X1的卷积层,然后紧接着用全连接层和softmax进行分类,最后得到概率(2类,车或者是背景)。
检测解码器(Detection Decoder):解码器首先在编码器的输出之后同样的应用一个1X1的卷积层,产生39X12X300(300跟后面的500有出入,和代码中的512也有出入)的特征图,然后在此之后再应用一个1X1卷积层,产生39X12X6的输出(类似于Yolo,将图像分割成39X12个网格,每个网格预测一个框),每个网格预测6个参数,前两个参数表示两个类别的概率,后面的四个参数表示预测的框的坐标值。(感觉这就是Yolo啊),但是这种预测是非常不准确的(Yolo的作者也说了会产生更多的定位误差使得定位很不准确),为了解决这个问题,引入了一个再缩放层(有点类似于残差网络也有点像Yolo V2),将VGG-16网络的Conv4-3输出的高分辨率的特征图(156X48)来回归上一步得到的框。在将高分辨率的特征图缩放至39X12的大小的时候,采用的方法是ROI池化层的方法(参考fast rcnn中的ROI池化),将此方法得到的特征图与39X12X6大小的特征图再经过一个1X1的网络得到最后的输出。
检测解码器第一次的输出,能看出预测的红色的框和ground truth差别很大
分割解码器(Segmentation Decoder):采用的FCN全卷积网络来对图像进行语义分割。将VGG架构的剩余完全连接(FC)层转换为1×1卷积层,以产生尺寸为39×12的低分割分辨率。其后是三个转置卷积层(也有叫做反卷积层)[6,21] 执行上采样。然后再加上一些较低层如Conv4-3、3-3层的高分辨率的特征,这些特征首先由1×1卷积层处理,然后加到部分上采样结果中。
训练细节
在本节中,我们将介绍我们使用的损失函数以及我们的训练过程的其他细节,包括初始化。
标签编码:我们使用单热编码进行分类和分割。对于检测,当且仅当它与至少一个边界框相交时,我们才分配了一个正的的置信度。我们通过其中心的x和y坐标以及框的宽度w和高度h来参数化边界框。请注意,此编码比Faster RCNN或ReInspect简单得多。
损失函数:我们将损失函数定义为分类,分割和检测的损失函数的总和。我们采用交叉熵作为分类和分割分支的损失函数,定义如下:
其中p是预测,q是ground truth,C是一组类。我们使用两个损失的总和来检测:信号的交叉熵损失和边界框坐标上的L1损耗。请注意,L1损耗仅针对已被赋予正值置信标记的单元格计算。从而:
其中p是预测,q是ground truth,C是一组类,I是小批次中的一组示例。
综合训练策略:通过合并每个损失计算的渐变独立小批量进行联合训练。这允许我们用自己的训练参数来训练三个解码器中的每一个。在梯度合并期间,所有的损失都被相等地加权。另外,我们观察到,检测网络需要比其他任务需要更多的训练步骤。因此,我们对我们的小批次进行抽样,使得我们使用所有损失函数交替更新,其中两个更新仅利用检测丢失。
初始化:使用ImageNet上预先训练的VGG权重对编码器进行初始化。使用范围(-0.1,0.1)中的单位分布随机初始化检测和分类解码器权重。分割解码器的卷积层也使用VGG权重进行初始化,并且转置卷积层被初始化以执行双线性上采样。另一方面,跳过连接以非常小的权重(即1e-4的标准)随机初始化。这允许我们一步进行训练(与[29]的两步程序相反)。
优化和正则化:我们使用Adam优化器[22],学习率为1e - 5来训练我们的MultiNet。对所有层施加5e-4的权重衰减,并且以解码器中的所有(内)1×1卷积应用概率为0.5的dropout。
实验结果
在本节中,我们对具有挑战性的KITTI数据集进行实验评估。
结论
在本文中,我们开发了一个统一的深层架构,能够共同推理分类,检测和语义分割。我们的方法非常简单,可以端到端进行训练,并在挑战性的KITTI中表现非常出色,超越了道路分割任务中的最先进技术。我们的方法也非常有效,需要98.10ms执行所有任务。未来我们计划开发压缩方法,以进一步降低MutiNet的计算瓶颈和能耗。