让CNN有了平移不变性,同时提升ImageNet成绩:Adobe开源新方法,登上ICML
栗子 来源: 量子位各种架构都适用。
古往今来,大家都知道: 只要图像一平移,CNN就认不出来了 。
原因就在 降采样 身上。不管是最大池化,跨步卷积,还是平均池化,都对平移太敏感:
比如, 0、0、1、1、0、0、1、1…… 这样的周期,最大池化是这样:
但如果平移一格,最大池化完全变了一个样子:
虽然,有著名的 抗锯齿 (Anti-Aliasing,) 方法,致力解决这个问题。但把这种模块直接插进网络,会严重影响模型的表现。
现在,来自Adobe的Richard Zhang (简称“理查”) , 让抗锯齿和各种降采样和平共处了 。
在保留 平移不变性 的情况下,还能提升ImageNet上的分类准确率。VGG、ResNet、DenseNet……各种架构都适用。
不止如此, 面对其他干扰更稳定了,如旋转如缩放;面对输入图像的损坏,还更鲁棒了。
研究登上了ICML 2019,代码已经开源,还有演讲可以看。Reddit热度已经超过了250,观众纷纷表达了谢意:
怎样和解的?
想知道怎样帮助CNN保留平移不变形,就要了解平移不变性是怎样打破的。
理查观察了VGG的 第一个卷积层 ,发现它对平移毫无波澜,并不是在这里打破的。
但再观察 第一个池化层 ,对平移有了反应:平移偶数个像素,表征还不改变,平移奇数个像素,表征就完全变了。
向网络深处走,经过的池化层越多,问题就越严重。
△抗锯齿
想解决这个问题,就要把 抗锯齿 和 降采样 友好地结合到一起。
于是,理查又仔细查看了降采样过程,把它 (按顺序) 分成了两个部分:
第一步没有问题,完全不会出现锯齿。
第二步就要改了。理查给中间特征图,加了个 模糊滤波器 (Blur Filter) 来抗锯齿,然后再做子采样:
△(2)为滤波器
那么,“ 抗锯齿版 最大池化”效果怎么样?
平移不变性与准确率兼得
理查用 ImageNet分类任务 测试了一下进化后的,原以为会损失一些准确率,结果:
△右为抗锯齿
△空心为抗锯齿
在解锁平移不变性的同时,准确率还提升了。
如果降采样方法不是最大池化,又怎么样呢?
所以,理查还测试了和 MobileNetv2 ,它们用的是跨步卷积;以及,它用的是平均池化:
△空心为抗锯齿
这些架构也获得了类似的提升。全面成功。
上面只讲了 分类 这一项任务。而进化后的降采样,在 图到图翻译 任务上也同样有效。
不惧各种变换,以及图像损坏
不只是平移,像旋转、缩放这样的干扰,都可以应对自如;另外,面对输入图像 损坏 (Image Corruption) ,也变得更加鲁棒了。
ImageNet-P 数据集里,有受到各类干扰的图像;而 ImageNet-C 数据集里,包含了系统性损坏的图像。
△mCE=Mean Corruption Rate, mFR=Mean Flip Rate
左边一栏 (除了Baseline) 之外,是不同的滤波器,从上到下依次变强。和,都是越小越好。
数据显示,各种滤波器都能有效增强,应对干扰的稳定性,和应对图像损坏的鲁棒性。其中,最强的过滤器表现最佳。
One More Thing
如果小伙伴们没有看够,可以点开演讲视频:
然后,还有一大波传送门。
论文在此:
项目主页:
开源代码:
— 完 —
版权所有,未经授权不得以任何形式转载及使用,违者必究。