前段时间看到了几篇有意思的文章,也参考了一些相关的讨论,这里想对CNN中的平移和尺度的不变性和相等性,以及CNN对于目标相对和绝对位置、深度的预测原理进行探讨。这些内容对于一些特定任务很重要,好比目标检测、目标分割、深度估计、分类/识别以及单目标跟踪中的置信图预测等。
在介绍卷积神经网络(CNN)以前,咱们对于不变性和相等性的理解可能来自于传统图像处理算法中的,平移、旋转、光照和尺度等不变性,好比HOG梯度方向直方图,因为cell
的存在,其对于平移、旋转有必定的不变性,另外因为对图像局部对比度归一化的操做,使其对于光照也有着必定的不变性。又好比说SIFT特征提取,其对于以上四点都有着不变性,其中因为尺度金字塔,使得对尺度也有不变性。这里咱们对于不变性的理解就是,同一对象发平生移、旋转、光照变化、尺度变换甚至形变等,其属性应该一致。下面咱们给出具体的不变性和相等性的定义。git
其中不变性(invariance)的定义正如上文所说,所以其形式为:github
而对于相等性(equivalence),顾名思义,就是对输入进行变换以后,输出也发生相应的变换:算法
不过若是咱们只考虑输出对于输入不变性和相等性的状况,则会难以理解,由于咱们更多地是想象着特征层面的映射,好比:网络
那么特征层面对于输出的影响咱们可能考虑得比较少,可是却实质存在,好比目标在图像中的平移和尺度等变换,在目标检测任务中,必需要使得网络具备相关的变换相等性,由此捕捉目标的位置和形状变化。而在图像分类、目标识别、行人重识别等任务中,又必须使得网络具备相关变换的不变性。这两点也是目标检测和行人检索领域中一个经典的矛盾问题,目前好像尚未特别好的解决,更多地是分阶段地执行不一样的任务,防止特征共用。好比:经典的两阶段目标检测任务中,第一阶段是粗检测和前景背景分类,第二阶段是精修和具体类别分类,有必定的偏重。行人检索算法则大可能是先检测后识别的策略。固然除了不变性和相等性的问题,还存在类内差别的问题,好比不一样的人对于检测而言都是行人类别,对于识别而言则是不一样的人,这对于特征提取也存在挑战。app
我记得我几年前第一次接触到深度学习的时候,对于全链接和CNN的局部链接形式,都有平移、尺度不变性的说法。对于全链接网络,因为下一层的每一个节点都会与上一层进行链接:框架
所以不管输入发生了平移、尺度等什么变换,只要其属性没变,全链接网络更能捕捉其中的不变性。而对于卷积神经网络,咱们都知道两个特色:局部链接和权值共享。ide
对于局部链接,由于全链接参数太多,容易形成过拟合,而且图像领域更多地关注局部细节信息,因此局部链接方式有效。至于权值共享,也有减小参数的做用,很像图像处理中的滤波器。咱们早期对于其不变性的理解更可能是遵循一个宏观的感觉,即因为卷积核的移位滤波,上一层的特征到下一层的特征相对位置宏观不变,直到最后输出,相似于全链接的效果,从而得到不变性。学习
正由于我刚说的宏观不变,使得输入在通过屡次卷积、池化以后,微观/细节的变化累积放大,从而失去了这种不变性,接下来我会结合两篇论文进行介绍。测试
第一个是为了解决CNN平移不变性对抗性攻击的一篇ICML2019论文《Making Convolutional Networks Shift-Invariant Again》。这篇文章主要讨论了CNN网络中的降采样对于平移不变性的影响:ui
上图是对于一个窗户分别采用从0~7的平移量,其特征图与不平移的差别,能够明显看到,特征图出现了波动。相应地,上半部分是利用pix2pix生成的图像,咱们能够看到随着平移量的增大,窗户中的竖直线从两根变成了一根。这一点就代表传统的CNN网络并不具备平移不变性。
首先,做者作了这样一个小实验,即采用maxpooling对一维向量[0011001100]进行池化,由此获得向量[01010]:
接着,若是将输入向右平移一个单位,则获得向量[111111]:
很明显,平移相等性和不变性都丢失了。接着做者作了进一步实验,利用余弦距离来刻画平移相等性,采用VGG网络对Cifar数据集进行试验:
其中颜色越深说明差别越大,能够看到每次maxpooling都增长了特征的差别性,不过做者将max和pool操做分开了,为了区分取最大值和降采样的影响:
很明显,降采样对于平移相等性的影响更大,而CNN中涉及到降采样的操做有:池化(maxpooling和average pooling)和带步长的卷积(strided convolution)。对此做者提出了一种名为Anti_aliasing方法,中文叫作抗锯齿处理。传统信号处理领域中对于抗锯齿的技术,通常要么增大采样频率,但因为图像处理任务通常都须要降采样,这一点不适合。要么采用图像模糊(bluring)技术,根据Nyquist采样理论,是给定采样频率,经过下降原始信号的频率来使得信号可以被重构出来,以下图所示。对模糊化处理和未处理的原图像进行下采样,获得图中底部的两张图,模糊化处理的原图像下采样的图像还能看出一些轮廓,而未处理的原图像下采样的图像就显得更加混乱。
做者就是采用了模糊的方式,提出了三种不一样的blur kernel:
每一个核都须要归一化,即除以核内全部元素之和,而后加入到降采样过程,即在降采样以前使用blur kernel进行卷积滤波:
能够看到其效果很不错:
代码和模型见:https://richzhang.github.io/antialiased-cnns/或者https://github.com/adobe/antialiased-cnns
第二篇是同年发表在JMLR的一篇论文《Why do deep convolutional networks generalize so poorly to small image transformations?》。做者首先给出了几组示例,分别表示了平移、尺度以及轻微图像差别对网络预测分类置信度的影响:
做者认为CNN忽视了采样定理,这一点以前Simoncelli等人已经在论文Shiftable multiscale transforms中验证了二次采样在平移不变性上的失败,他们在文中说:
咱们不能简单地把系统中的平移不变性寄但愿于卷积和二次采样,输入信号的平移不意味着变换系数的简单平移,除非这个平移是每一个二次采样因子的倍数。
咱们现有的网络框架中,越深的网络,降采样次数越多,所以出现的问题更多。紧接着,做者提出了几点论述:
接下来,做者对这些问题作了一些改进尝试:
最先接触神经网络和深度学习相关任务时,个人感受就是这类算法本质是作的分类任务,好比图像分割是对前景背景的分类和具体类别分类,识别任务就是类间类内的区分任务。其中图像分割任务就利用了CNN中的部分相等性,那么对于目标检测任务中的目标位置回归是怎么获取的呢?咱们能够知道的是一样是对目标位置的搜索,在单目标跟踪任务中,存在有置信图:
可是置信图本质上是对区域进行搜索获得的,所以能够近似为对多个子区域的识别过程,因此单目标跟踪中的目标定位也能够用分类的理解,可是目标检测则很差用分类来理解了。
接下来咱们思考一个问题,咱们所设计的网络究竟包含了哪些信息?图像特征、网络结构(卷积核大小、padding)。从上一章咱们能够知道,网络能够学习到必定的相等性:
所以,经过不断地训练,网络在最后的特征输出中是能够经过对应的特征数值和区域大小,结合必定的倍数(降采样大小)估计目标尺度的。可是对于目标的位置,咱们人眼对于目标位置的断定是经过坐标系的,即目标距离图像的边缘距离,可是网络是如何了解这一信息的呢?《How much Position Information Do Convolutional Neural Networks Encode?》这篇文章作出了回答。
做者首先作了一组实验:
对于不一样的输入图像,采用多种mask扰动,H、V、G分别表明水平、竖直和高斯等分布,用这种方式生成多种groundtruth,对于这点咱们可能对单目标跟踪中以目标中心为均值的高斯分布比较熟悉。结果发现:
GT是三种分布生成的groundtruth,PosENet是做者提出的网络,没有padding。咱们能够看到PosENet并无获得位置分布信息,而是保持了相等性。而存在padding的VGG和ResNet则都预测出了位置分布。因而可知padding对于位置的做用,也对上一章的内容做了补充,padding对于平移不变性和相等性也有影响。
不过这里咱们可能很差理解,我作了个小测试,不过不必定是这么作的,仅仅方便我理解:
上面是两个不一样位置“目标”的卷积结果,能够看到,从输出结果得不到什么位置反映,若是加入padding:
首先咱们能够知道的是,加入了zero-padding以后,目标边缘相对中心的输出更小了,其次目标距离图像边缘距离越远,其特征映射中出现0的次数越多。因此我猜网络就是在训练过程当中让padding和这个相对的关系对应上了,若是没有padding,目标距离边缘越远,一样出现0的次数也会越多,但问题在于没法跟padding形成的边缘数值小,中心数值大的特殊分布相比。固然,以上仅仅是我我的的理解,为了帮助我加深印象罢了。也有人说加入了padding影响了CNN的平移相等性,从而使得CNN学到了位置信息,但这个不大好解释。
不过有关padding的问题,在CVPR2019的一片单目标跟踪算法SiamRPN++中也作了探讨。其出发点在于为什么Siamese网络没法扩展为大型网络,其缘由就在于padding影响了平移相等性,从而让目标位置的分布发生了偏移。因此做者经过对目标中心的随机扰动,使得网络克服自身的偏移:
也有一些研究探索了如何让CNN结合绝对位置信息,比较出名的应该是当前很热门的SOLO单阶段实力分割算法。SOLO的出发点很简单,咱们都知道语义分割只须要分割出不一样类别的目标,而实力分割对于同一类别的个体还须要区分。可是显而易见,同一类别的目标只要位置和形状不一样则能够区分。所以SOLO就是将位置和形状(用尺寸简化)信息结合进来。具体而言,就是将输入系统的图像统一划分为S x S的网格,若是对象的中心落入网格单元,那么这个网格单元就负责预测语义类别以及分割该对象实例。
特别地,SOLO算法中采用CoordConv策略(代码:https://github.com/uber-research/coordconv),该算法将每一个特征区域的坐标信息结合进来,从而让网络显示地学会记忆特征的绝对位置信息。SOLO经过这个策略提高了3.6AP,而且论证只须要一层提供该信息便可达到稳定的提高。
深度估计也是一个相似的问题,不一样的是,图像中并无包含深度信息,可是网络是如何获取深度信息的呢。How Do Neural Networks See Depth in Single Images?这篇文章给出了回答,关于这篇文章NaiyanWang老师已经在博客里讨论过,我这里也就再整理下。
咱们能够看到,物体的绝对深度与相机位姿有着很大关系,那么CNN如何学习到这种须要几何先验的绝对信息的呢?做者作了这样一个实验:
上图中做者作了三组实验:同时变化目标位置和尺寸、只变化位置以及只变化尺寸,咱们从上面的定性结果好像看不出什么问题,下面是定量的结果:
能够发现,尺度对于深度信息的预测没有什么影响,也就是说CNN网络是经过目标纵坐标来估计深度的,因此说网络其实是在过拟合训练集,从中学习到一些固定场景下的深度和相对位置的对应关系。
做者又讨论了相机运动对于深度预测的影响,既然深度与目标纵坐标有关系,那么pitch角的影响应该很大:
能够发现,pitch的确影响比较大,相对的roll的影响就比较小了:
最后做者还讨论了颜色和纹理对深度估计的影响:
能够发现,仅仅是改变目标的颜色纹理,深度估计的效果也会降低,可将CNN网络在训练时有多“偷懒”,不知道若是将上述实验变成数据加强的手段的话会让深度估计网络失效仍是变强。
2020.3.18更新
昨天碰巧看到一篇CVPR2020的文章《On Translation Invariance in CNNs: Convolutional Layers can Exploit Absolute Spatial Location》,其中也提到了CNN中的平移不变性问题和绝对位置信息编码问题,其切入点是CNN中的边界问题。
做者首先以三种卷积方式为例,full/same/valid,各自的区别在于padding的大小,具体方式我就不细说了,给个示意图:
其中红色部分表示padding,绿色部分表示边界区域。很明显,valid
模式下卷积核最右边的1
永远没法做用于绿色部分的1,same
模式下的卷积核最右边 1
永远没法做用于绿色部分的1
。做者以zero-padding和circular-padding两种模式作了一个例子说明:
能够看到Class-1中前两个例子都没有检测到1
,valid
和same+zero-padding
模式对于待卷积区域的绝对位置比较敏感。紧接着做者又分析了每一个位置被卷积的次数:
由此引出距离图像边界多远时某一固定像素能够被检测到这一问题,因而做者经过给图片四周添加不一样大小的黑色边界进行试验:
有意思的是,增长了黑色边界以后分类的准确率都出现了明显的下滑,只不过不一样的训练策略和不一样的backbone的抗干扰能力不一样罢了。
为了定量分析各个卷积策略对于边界的处理区别,建了一个分类数据集,特殊点都分布在边界:
结果差异很大:
能够发现,跟以前的观察结果同样,前两种策略的泛化能力不好,而基于Circular padding和full convolution的模式效果最好。接着做者为了下降边界的影响,采用了前文介绍卷积平移不变性里面提到的blur pooling+Tri3卷积核。而后对比S-conv+circular padding和F-conv两种策略对于不一样的图像对角平移的鲁棒性:
结果显示Full conv模式效果更好,在后续实验中还说明了其有助于下降过拟合风险,对于小数据集更有效。
代码即将开源:https://github.com/oskyhn/CNNs-Without-Borders
[1] https://zhuanlan.zhihu.com/p/99766566
[2] https://zhuanlan.zhihu.com/p/95758284
[3] https://zhuanlan.zhihu.com/p/38024868
[4] Zhang R. Making Convolutional Networks Shift-Invariant Again[C]//International Conference on Machine Learning. 2019: 7324-7334.
[5] Dijk T, Croon G. How Do Neural Networks See Depth in Single Images?[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 2183-2191.
[6]Islam M A, Jia S, Bruce N D B. How much Position Information Do Convolutional Neural Networks Encode?[C]//International Conference on Learning Representations. 2019.
[7]Wang X, Kong T, Shen C, et al. SOLO: Segmenting Objects by Locations[J]. arXiv preprint arXiv:1912.04488, 2019.
[8]Liu R, Lehman J, Molino P, et al. An intriguing failing of convolutional neural networks and the coordconv solution[C]//Advances in Neural Information Processing Systems. 2018: 9605-9616.
[9]Novotny D, Albanie S, Larlus D, et al. Semi-convolutional operators for instance segmentation[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 86-102.
[10]Li B, Wu W, Wang Q, et al. Siamrpn++: Evolution of siamese visual tracking with very deep networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 4282-4291.
[11] Azulay, Aharon, and Yair Weiss. "Why do deep convolutional networks generalize so poorly to small image transformations?." Journal of Machine Learning Research 20.184 (2019): 1-25.