HEVC帧内编码优化——ResNet模型
ResNet(深度残差网络)
ResNet网络是在2015年提出的一种新型CNN网络模型,相较于先前的LeNet、AlexNet等模型优势明显,尤其是在解决梯度消失、梯度爆炸方面,有了极大的提升。之前在接触LeNet、AlexNet用于帧内编码信息预测的时候,时常会遇到准确率低,还有准确率退化的问题,通过增加数据量和层数也得不到很好的改变。在使用该网络后,在不同的网络层数还有数据量等方面都有很好的实验效果,下面分享一下我在学习中的见闻:
1、参考论文与博客:
[1] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016:770-778.
[2] ResNet代码参考:https://github.com/wenxinxu/resnet-in-tensorflow#training-curves
2、残差结构
通常我们对于识别率的理解在于:尽可能的增大网络深度,使用“硬的”运算平台,合理运用网络数学模型等。而实际应用中,类似激励函数、正则化、dropout还有损失函数等数学模型,我们很难通过数学优化的改变来较大幅度的影响识别率,运算平台的代价又太高,所以只能从网络模型招手。残差网络的最大优势在于对于梯度消失的处理(参考相关介绍),可实现小数据量在多层网络中的高识别率。这里需要参考一些概念:恒等映射、反向梯度计算等,可以很好的理解该网络的优势。下图为残差结构Res_block示意图:
从图中看出,该结构主要是将输入层数据添加到两个卷积层的输出结果中,normalization和relu在一定程度上缓解了梯度消失,这种结构也改变了反向梯度的求解方式。其中,在第二个卷积层的时候会涉及到特征图的尺寸变化,也需要对输入X进行相应的池化操作,该部分主要用来增加输入矩阵的厚度。在参考博客中还提到一个层数的问题,总层数num = 6* N+2,其中N为残差单元的数目(区别于 Res_block),图2为单个残差单元的数据处理过程:
从图中可看出,残差单元中包含三个残差结构,开头有一个数据处理的卷积层,用来将图像块进行扩维,末尾的卷积层为全局平均池化(参考he的论文),残差结构间会进行池化操作,降低像素矩阵的宽高数值。全局平均池化可理解为矩阵转向量(N*N*M--->1*M),使用卷积操作来实现,并连接全连接层。对于多个残差单元的结构图,主要通过纵向连接实现,只有在进入下一个矩阵维度的时候才会进行残差结构间的池化操作,可通过下图3(tensorboard)结果图来理解:
图中为3个残差单元的网络数据结构,conv x_0,1,2为训练阶段的res_block,可以看到它们之间是链状的,conv1_2输出结果中包含有conv1_1及conv1_1经过连个卷积层的计算结果。紧接着进入图2中的res_block2,最后经过res_block3,我差试过跑过18个残差单元,总共110个卷积层,识别效果很好。另外,还有就是错误率指标,top_1 error与top_5 error的理解。
top_1 error是对经过分类器的计算结果进行概率排序,最大值所对应的结果与标签吻合的即为正确,反之错误。
top_5 error 是将概率值前五的计算结果与标签比较,若结果中包含有标签数据即为正确,反之错误。