Paper reading: MobileNet: Efficient Convolutional Neural Networks forMobile Vision Applications

首先,在目标检测中常说到两个名词,“backbone”,“head”?

如果小伙伴已经在这个领域摸爬滚打一阵,估计说,这也要说嘛,但是每个人都是从不会到会的,也许一句话,就可以解决别人心中很久的疑惑,对吗?

LZ在网上找了个解释,还算是讲的比较清楚的。

Paper reading: MobileNet: Efficient Convolutional Neural Networks forMobile Vision Applications_第1张图片
在许多计算机视觉任务中,backbone是作为一个特征提取器进行使用的,也就是我们常见的在ImageNet,或者COCO等数据集上进行预训练好的网络,网络的本身已经有了一个比较好的初始化后,在针对自己的任务进行fine-tune,相比与随机初始化,会有更高的机会训练得到更好的结果。

head呢是指在特征提取后,目标检测还要进行的两个人物,一个是分类操作,即对每个类别会有一个score值,另一个是回归操作,针对已有的bounding box,对其进行回归调整,得到最终合适的边界框操作,当然这个头的设置也有不同的方式,也可以再自己加卷积,或者其他类似FPN的操作,这个就需要小伙伴们的经验了。

回归主题,我们来说下MobileNet,这其实也是一个backbone,但是当中的操作还是可以借鉴的。

有一个问题,为什么要提出MobileNet这个网络结构?

字面意思就可以知道,就是将网络结构移植到移动端或者嵌入式的芯片中,这种偏硬件的LZ真的也是不很懂了。

那这个问题的进一步提问,怎么能将网络移植到移动端或者芯片中呢?

这个就需要考虑几个问题了,首先肯定不能像后端一样,我给你配8个2080Ti,这肯定处于demo阶段,实际如果做个分类问题,动用这么多块GPU,那肯定是不合理的,所以网络的参数量要减少,网络的计算量也要减少,如果放到前端,靠芯片来进行运算,那弄个大计算量的网络做目标检测,1/FPS,那么有那个客户愿意买呢,实时性也太可怕了吧。现在已经有很多的方法如定点计算,剪枝等一系列优化操作,MobileNet其实也是从上面两个角度,一方面减少网络的参数量,令一方面是减少网络的计算量。

我们来看下具体是怎么做的?
文章中提出了一个叫Depthwise Separable Convolution,这是什么,就是把我们常见的卷积核进行分解,分解成depthwise convolution和1x1的pointwise convolution
Paper reading: MobileNet: Efficient Convolutional Neural Networks forMobile Vision Applications_第2张图片如上图所示,也就是把原来的3x3的卷积核先进行3x3 Depthwise Conv操作,在经过常规BN, ReLu操作好再进行1x1 Conv操作,小伙伴应该都知道通常使用1x1的卷积核就是为了进行通道融合,进行通道数的改变,再这里也不意外,也是为了进行特征融合,改变到需要的通道数,再原始论文中有详细的推导过程,LZ主要就是理解这个paper的思想,细节啥的就不再赘述了。

下图就是MobileNet的结构
Paper reading: MobileNet: Efficient Convolutional Neural Networks forMobile Vision Applications_第3张图片

当然其中还有两个非常有用的超参数,一个是用来调节卷积核的个数,也就是修改feature map的通道数,另一个是用来调节feature map的resolution,即feature map的H*W,如果这样调节可能会损失一定的精度,但是参数量上会有所减少。不过LZ测过如果在SSD上框架下,使用MobileNet时参数量减少一半,计算速度好像并不会有显著提高,但是内存占用上会减少。

参考地址:
https://stackoverflow.com/questions/53012856/what-is-an-object-detection-head

你可能感兴趣的:(paper,目标检测)