机器学习

C3AE: Exploring the Limits of Co

2019-06-15  本文已影响0人  ce0b74704937

这篇文章是提出新的浅层网络来做人脸年龄估计的任务。

文章主要是利用小的浅层网络来处理低分辨率的图片,创新的点到不是很大,但是值得引人思考的是,对于一些低分辨率的图片是否可以不去用重量级的网络以及一些经典的连接就可以取得很好的效果。

文章分为三点去展开
第一是研究了一下mobilenet和shufflenet中的depth-wise卷积和标准的卷积在低分辨率图像任务中,是否真正能够减小网络参数。
第二是提出使用类似于one-hot的,两点表示人类年龄的方法。
第三是尽可能更多的采用图片的信息对年龄进行估计。

下面依次说明

一、重新审视标准的卷积在低分辨率图片中的压缩效果

这部分主要解释为什么本文采用标准卷积,而不是mobilenet和shufflenet里面提出的通道分离卷积,如群卷积和depth-wise卷积。
这里是从参数的量和对应的效果考虑。
首先考虑一个卷积层,输入维度为D_{F}\times D_{F}\times M,输出维度为D_{F}\times D_{F}\times N,其中D_{F}表示特征图的大小,M和N表示输入和输出卷积的通道数。对于mobilenet里面提出的depth-wise的分离卷积来说计算量为D^2_{K}\cdot M \cdot D^2_{F}+M\cdot N \cdot D^2_{F}。对于一个标准的卷积来说计算量为D^2_{K}\cdot \hat M\cdot \hat N \cdot D^2_{F}。上面D_{K}为卷积核的大小。那么通过上面两式相除就能得到计算量的比较了,如下式所示:
\frac{D^2_{K}\cdot M \cdot D^2_{F}+M\cdot N \cdot D^2_{F}}{D^2_{K}\cdot \hat M\cdot \hat N \cdot D^2_{F}}=\frac{M}{\hat M\cdot \hat N }+\frac{M\cdot N}{\hat M\cdot \hat N\cdot D^2_{K}}
上式中如果假设普通的卷积和depth-wise卷积的输入通道和输出通道是对应相等的,即M=\hat MN=\hat N,上式可以简化为\frac{1}{N}+\frac{1}{D^2_{K}}<1,可以看出这种情况下确实是depth-wise计算量更小。但是为了在低分辨率图片上使depth-wise卷积能和普通的卷积有相应的特征表达能力,常常会增加depth-wise卷积的通道数,即一般会有M>\hat MN>\hat N
举个例子来说明,假设使用32通道大小的普通卷积提取图像特征,在MobileNet-V2中会使用144甚至更大的通道数来提取图像特征。在这种情况,上式结果\frac{M}{\hat M\cdot \hat N }+\frac{M\cdot N}{\hat M\cdot \hat N\cdot D^2_{K}}=\frac{144}{\hat 32\cdot \hat 32 }+\frac{144\cdot 144}{\hat 32\cdot \hat 32\cdot 3^2}=2.39>1
所以从对图片特征提取效果和计算量综合考虑,本文采用了标准的卷积。

二、使用类似one-hot向量的两点表示法来表示年龄

对于给定的数据库,用符号{(I_{n},y_{n})}_{n=1,2,…,N}表示,其中I_{n}表示图片,y_{n}表示年龄的标签。对于深度学习模型可以用一个映射关系来表示,\mathcal{F}: \mathcal{I} \rightarrow \mathcal{Y}。对于任何年龄标签y_{n}都能使用z^1_{n},z^2_{n},(z^1_{n}\neq z^2_{n})表示:
y_n=\lambda_1 z^1_{n} + \lambda_2 z^2_{n}
其中\lambda_1,\lambda_2为权重,且\lambda_1+\lambda_2=1

对于一个给定的年龄区间[a,b],y_n\in [a,b]。将年龄区间均匀划分为K个小区间,那么y_n就能用z^1_{n}=\lfloor \frac{y_n}{K}\rfloor \cdot Kz^2_{n}=\lceil \frac{y_n}{K} \rceil \cdot K表示,其中\lfloor \cdot \rfloor\lceil \cdot \rceil分别表示向下和向上取整符。\lambda_1\lambda_2因子计算如下:
\lambda_1=1-\frac{y_n-z^1}{K}
\lambda_2=1-\frac{z^2-y_n}{K}

下面举例说明,如下图所示,给定年龄区间为[10,80],下图第二行是K=10的情况,第三行是K=20的情况。下图分别使用不同的划分来对年龄68和74进行两点表示。比如68,在K=10区间为[10,80]的情况下,可以表示为y_n=[0, 0, 0, 0, 0, 0.2, 0.8, 0]

1.png

其实扩展一下思考,年龄还可以用多点表示,例如50可以表示为50 = 0.5\times 0+0.5\times 100 = 0.2\times 10+0.2\times 40+0.2\times 60+0.2\times 90,但是这种表示方式意义不大,对模型的训练没有什么指导意义。

三、级联训练(Cascade Training)

先给出一个形象的网络结构图,如下图所示


2.png

从上图看出,流程用符号表示是这样的f: I_{n}\stackrel{Conv}{\longrightarrow} X \stackrel{W_1}{\longrightarrow} \textbf{y}_\textbf{n} \stackrel{W_2}{\longrightarrow} y_n

这步说白了就是将年龄的两点表示和真实的年龄用来同时指导网络模型的训练。
对于两点表示的loss计算采用KL-Divergence,如下所示
L_{kl}(y_n, \hat y_{n})=\sum_n D_{KL}(y_n| \hat y_{n})+\lambda ||W_1||_1=\sum_{n} \sum_{k}y^k_{n} log\frac{y^k_n}{\hat y^k_n}+\lambda ||W_1||_1

对于最终的年龄预估阶段采用的loss是L1距离,如下所示
L_{reg}(y_n, \hat y_{n})=\sum_{n}||y_n-\hat y_{n}||

最终采用的loss函数如下所示
L_{total}=\alpha L_{kl}+L_{reg}
上式中\alpha是个超参数

四、基于上下文的回归模型

为了更好的利用图片的信息,对于网络的输入文章将输入图片截取三次,如上图中的三种颜色的框,提取好三种输入后对特征进行concat操作,然后用于年龄的预估。

这里是怎么截取的,文章没有说的很明白

最后看看文章使用的网络结构如下表所示


3.png

文章没有很大的创新,主要是给人一种启发。人工设计的网络有可能存在冗余部分,对于一些任务没必要用很复杂的网络,比如本文的低分辨率图片的年龄预估,没必要使用很深的网络也能达到好的效果,文章还做了很多实验,详情可以查看原文。

上一篇下一篇

猜你喜欢

热点阅读