Fast Image Processing with Fully-Convolutional Networks(基于全卷积网络的快速图像处理)
加快图像处理的通用方法是:下采样-在低分辨率下执行应用算子-上采样。缺点在于,第一,有些应用算子即使在低分辨率下运行也一样很慢;第二,在低分辨率下执行应用算子,会导致图像的高频内容可能无法正确建模。基于这两大缺点,文章作者针对下采样部分进行了改进,也可以说是没有进行下采样,针对第二点缺点, 文章中直接在全分辨率下进行图像操作,经过端对端训练,最大限度的提高精度;而针对第一点缺点 ,文章采用全卷积网络,让该网络在输入输出对上进行训练,经过训练后让网络代替原来的算子(近似算子,原算子无需运行)。
三种加速图像处理算子的重要属性
特性 | 描述 |
---|---|
近似精度 | 寻求一种方法在广泛流行的图像操作算子中提供高近似精度 |
运行时间 | 快速,且能够理想地实现高清图像的交互速率 |
紧凑性 | 有非常紧凑的参数化,可以装入SRAM,且内存占用很小 |
从上面三种属性出发,文章中采用了多尺度上下文聚合网络(CAN)。
参数描述:
数据被放置在多个连续的层上,{L0,···,Ld},第一层为L0,最后一层为Ld,最后一层的维度为m × n × 3。
每一个中间层Ls的维数为m × n × w(1≤s≤d-1),w为每一层的宽度(各层特征映射的个数),中间层Ls容量由前一层Ls-1计算:
Lsi是Ls层第i个特征映射,而Ls-1j是Ls-1层第j个特征映射,bsi为标量偏差,Ksi,j为3×3的卷积核,运算符 *rs 为带膨胀因子rs的膨胀卷积(膨胀卷积算子是网络在不丧失分辨率的情况下聚合远程上下文信息的方法),ψs是自适应归一化函数,对于ф 采用Leaky ReLU,ф(x)=max(αx,x),其中α = 0.2 。
对于图像坐标x:
关于dilation(膨胀、扩张),膨胀在特征映射中的影响在于不是利用临近的位置进行滤波,而是在被因子rs分开的位置进行滤波。膨胀也随着深度而呈现出指数形式的增长:rs = 2s-1(1 ≤ s ≤ d-2),而对于Ld-1不采用膨胀。
通过对膨胀卷积的进一步了解可以知道,在L0层放置的是输入图,而在Ld放置的是输出图,第二层由第一层膨胀卷积而来,而该次膨胀卷积的因子为1,第三层由第二层膨胀卷积而来,膨胀因子为2,……,第i+1层由第i层膨胀卷积而来,膨胀因子为2i-1,以此类推,直到膨胀进行到Ld-1层,在Ld-1层变向Ld层的过程中不进行膨胀卷积操作,而是改为1×1的卷积核进行线性变换,将Ld层投射到RGB色彩空间。
在这里想要通过具体的膨胀卷积实例来进行一些了解:
现在有一个17×17的图像,对该图像进行膨胀卷积操作(只进行到layer3)
第一种方式:采用3×3的卷积核,膨胀因子分别设置为1 2 3
第二种方式:采用3×3的卷积核,膨胀因子分别设置为1 2 4
结果如图所示:(0代表该像素点没有参与卷积,非0代表该像素点参与卷积的次数)
其实很显然的是两种方式的前两个膨胀因子都是一一对应的,所以膨胀卷积的结果自然也是相同的,这里放出layer1和layer2的结果:
layer1:
layer2:
第一种方式的layer3:
第二种方式的layer3:
结果很明显,采用第二种方式的layer3的感受野相比起第一种方式的layer3要大,如果继续卷积下去(假设该幅图像是百万像素级),那么在第一种方式所要卷积的层数将会与第二种方式卷积的层数出现明显的差异,这也表明了在相同层数的情况下,第二种方式的感受野会更大(第二种方式的感受野随着膨胀因子呈现出指数型增长的态势),当然也不会出现所谓的gridding effect,举一个gridding effect的例子,依然以17×17的图像为例子,采用3×3的卷积核,膨胀因子为2。
第一层卷积:
第二层卷积:
第三层卷积:
gridding effect所造成的影响在于在卷积区域中存在大量的点从始至终都没有参与到卷积过程当中,膨胀因子越大,没有参与到卷积过程的点就越多,而重复参加卷积的点的卷积次数也会不断增加,卷积效果很差。
对于文中的网络而言,该网络通过全分辨率的中间层聚合全局上下文,具有很大的感受野,同时也非常紧凑,在内存中也只保留两个层(所有层的结构都是相同的),数据在两层之间来回流动。
而对于上文中出现的自适应归一化,采用的是批处理归一化和恒等映射(单一使用批处理归一化可以提高某些图像处理操作的近似精度,例如风格转换和铅笔画,但是也会降低其他图像处理操作的性能)。
λs和μs作为权值,通过反向传播与网络中的其他参数一起学习,学习这些权重可以使得模型更加适应逼近算子的特征。
BN是批处理归一化算子。
文章的后面主要讲了训练模型的过程和实验环境,以及最后的相关结果。