Fork me on GitHub

让CNN有了平移不变性,同时提升ImageNet成绩:Adobe开源新方法

  栗子 发自 凹非寺 
  量子位 报道 公众号 QbitAI

  古往今来,大家都知道:只要图像一平移,CNN 就认不出来了。

  原因就在降采样身上。不管是最大池化,跨步卷积,还是平均池化,都对平移太敏感:

  比如,0、0、1、1、0、0、1、1……这样的周期,最大池化是这样:

  但如果平移一格,最大池化完全变了一个样子:

  虽然,有著名的抗锯齿 (Anti-Aliasing,AA) 方法,致力解决这个问题。但把这种模块直接插进网络,会严重影响模型的表现。

  现在,来自 Adobe 的 Richard Zhang (简称“理查”) ,让抗锯齿和各种降采样和平共处了。

  在保留平移不变性的情况下,还能提升 ImageNet 上的分类准确率。VGG、ResNet、DenseNet……各种架构都适用。

  不止如此, 面对其他干扰更稳定了,如旋转如缩放;面对输入图像的损坏,还更鲁棒了。

  研究登上了 ICML 2019,代码已经开源,还有演讲可以看。Reddit 热度已经超过了 250,观众纷纷表达了谢意:

论文很厉害,演讲也很好。

  怎样和解的?

  想知道怎样帮助 CNN 保留平移不变形,就要了解平移不变性是怎样打破的。

  理查观察了 VGG 的第一个卷积层,发现它对平移毫无波澜,并不是在这里打破的。

  但再观察第一个池化层,对平移有了反应:平移偶数个像素,表征还不改变,平移奇数个像素,表征就完全变了。

  向网络深处走,经过的池化层越多,问题就越严重。


抗锯齿

  想解决这个问题,就要把抗锯齿和降采样友好地结合到一起。

  于是,理查又仔细查看了降采样过程,把它 (按顺序) 分成了两个部分:

  • 取最大值,用密集的方式。
  • 在中间

特征图 (Intermediate Feature Map) 上做子采样 (Sub-Sampling) 。

  第一步没有问题,完全不会出现锯齿。

  第二步就要改了。理查给中间特征图,加了个模糊滤波器 (Blur Filter) 来抗锯齿,然后再做子采样:


(2) 为滤波器

  那么,“抗锯齿版最大池化”效果怎么样?

  1、平移不变性与准确率兼得

  理查用 ImageNet 分类任务测试了一下进化后的 VGG,原以为会损失一些准确率,结果:


右为抗锯齿


空心为抗锯齿

  在解锁平移不变性的同时,准确率还提升了。

  如果降采样方法不是最大池化,又怎么样呢?

  所以,理查还测试了 ResNet 和 MobileNetv2,它们用的是跨步卷积;以及 DenseNet,它用的是平均池化:


空心为抗锯齿

  这些架构也获得了类似的提升。全面成功。

  上面只讲了分类这一项任务。而进化后的降采样,在图到图翻译任务上也同样有效。

  2、不惧各种变换,以及图像损坏

  不只是平移,像旋转、缩放这样的干扰,都可以应对自如;另外,面对输入图像损坏 (Image Corruption) ,也变得更加鲁棒了。

  ImageNet-P 数据集里,有受到各类干扰的图像;而 ImageNet-C 数据集里,包含了系统性损坏的图像。


mCE=Mean Corruption Rate, mFR=Mean Flip Rate

  左边一栏 (除了 Baseline) 之外,是不同的滤波器,从上到下依次变强。mCE 和 mFR,都是越小越好。

  数据显示,各种滤波器都能有效增强,应对干扰的稳定性,和应对图像损坏的鲁棒性。其中,最强的过滤器Bin-5表现最佳。

  One More Thing

  如果小伙伴们没有看够,可以点开演讲视频:

  然后,还有一大波传送门。

  论文在此:

  https://arxiv.org/abs/1904.11486

  项目主页:

  https://richzhang.github.io/antialiased-cnns/

  开源代码:

  https://github.com/adobe/antialiased-cnns#1-quickstart-load-an-antialiased-model

  —  —

来自:
量子位(ID:QbitAI)

作者:Johnson
原创文章,版权所有,转载请保留原文链接。