【人脸关键点检测】

人脸关键点通常是基层的CNN然后连接FCN进行回归,这里计划将FCN改为全局加权平均池化来处理,意思说是卷积核的尺寸与输入map的尺寸相同,即K=H=W,则输出map为C∗1∗1即长度为CC的向量,此时称之为Global Depthwise Convolution(GDC),见MobileFaceNet,可以看成是全局加权池化,与 Global Average Pooling(GAP) 的不同之处在于,GDC 给每个位置赋予了可学习的权重(对于已对齐的图像这很有效,比如人脸,中心位置和边界位置的权重自然应该不同),而GAP每个位置的权重相同,全局取个平均,如图:

https://www.pianshen.com/article/76591199542/

替代FCN的好处:

全连接层的缺点
全连接层有一个非常致命的弱点就是参数量过大,特别是与最后一个卷积层相连的全连接层。一方面增加了Training以及testing的计算量,降低了速度;另外一方面参数量过大容易过拟合。虽然使用了类似dropout等手段去处理,但是毕竟dropout是hyper-parameter, 不够优美也不好实践。

GAP(Global Average Pooling)可以取代全连接层

我们要明确以下,全连接层将卷积层展开成向量之后不还是要针对每个feature map进行分类吗,GAP的思路就是将上述两个过程合二为一,一起做了。如图所示:

 

上面操作不禁让我想到采用深度可分离卷积来进行处理, 这篇文章居然已经用了该思路!https://blog.csdn.net/u011995719/article/details/79435615

大致在回想下深度可分离卷积原理:用单层卷积核分别和通道特征图分别卷积,如果卷积核尺寸和特征图尺寸相同,则每个通道生成一个值,这个值作为关键点的一个座标即可;

下图是常规CNN和深度可分类CNN示意图:https://blog.csdn.net/tintinetmilou/article/details/81607721

本次采用keras框架进行处理,我们看下keras的深度可分离卷积DepthwiseConv2D:

https://blog.csdn.net/c_chuxin/article/details/88581411

keras.layers.DepthwiseConv2D(kernel_size, strides=(1, 1), padding='valid', depth_multiplier=1, data_format=None, activation=None, use_bias=True, depthwise_initializer='glorot_uniform', bias_initializer='zeros', depthwise_regularizer=None, bias_regularizer=None, activity_regularizer=None, depthwise_constraint=None, bias_constraint=None)

理论思考完毕;实践马上到来:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章