BNN&VGG2-VGG Net

  • 前言

  • 目录

    • 1 卷积神经网络
      • 1.1 3*3卷积
      • 1.2 最大池化
    • 2 VGG Net
      • 2.1 网络结构
      • 2.2 优缺点
      • 2.3 人员存在
        • 2.3.1 实验目的
        • 2.3.2 实验环境
        • 2.3.3 实验步骤


1 卷积神经网络

对卷积神经网络的研究可追溯至日本学者福岛邦彦(Kunihiko Fukushima)提出的neocognitron模型。在其1979和1980年发表的论文中,福岛仿造生物的视觉皮层(visual cortex)设计了以“neocognitron”命名的神经网络。neocognitron是一个具有深度结构的神经网络,并且是最早被提出的深度学习算法之一,其隐含层由S层(Simple-layer)和C层(Complex-layer)交替构成。其中S层单元在感受野(receptive field)内对图像特征进行提取,C层单元接收和响应不同感受野返回的相同特征。neocognitron的S层-C层组合能够进行特征提取和筛选,部分实现了卷积神经网络中卷积层(convolution layer)和池化层(pooling layer)的功能,被认为是启发了卷积神经网络的开创性研究。
第一个卷积神经网络是1987年由Alexander Waibel等提出的时间延迟网络(Time Delay Neural Network, TDNN)。TDNN是一个应用于语音识别问题的卷积神经网络,使用FFT预处理的语音信号作为输入,其隐含层由2个一维卷积核组成,以提取频率域上的平移不变特征。由于在TDNN出现之前,人工智能领域在反向传播算法(Back-Propagation, BP)的研究中取得了突破性进展,因此TDNN得以使用BP框架内进行学习。在原作者的比较试验中,TDNN的表现超过了同等条件下的隐马尔可夫模型(Hidden Markov Model, HMM),而后者是二十世纪80年代语音识别的主流算法。
1988年,Wei Zhang提出了第一个二维卷积神经网络:平移不变人工神经网络(SIANN),并将其应用于检测医学影像。独立于Zhang (1988),Yann LeCun在1989年同样构建了应用于计算机视觉问题的卷积神经网络,即LeNet的最初版本。LeNet包含两个卷积层,2个全连接层,共计6万个学习参数,规模远超TDNN和SIANN,且在结构上与现代的卷积神经网络十分接近。LeCun (1989)对权重进行随机初始化后使用了随机梯度下降(Stochastic Gradient Descent, SGD)进行学习,这一策略被其后的深度学习研究所保留。此外,LeCun (1989)在论述其网络结构时首次使用了“卷积”一词,“卷积神经网络”也因此得名。
LeCun (1989)的工作在1993年由贝尔实验室(AT&T Bell Laboratories)完成代码开发并被部署于NCR(National Cash Register Coporation)的支票读取系统。但总体而言,由于数值计算能力有限、学习样本不足,加上同一时期以支持向量机(Support Vector Machine, SVM)为代表的核学习(kernel learning)方法的兴起,这一时期为各类图像处理问题设计的卷积神经网络停留在了研究阶段,应用端的推广较少。
在LeNet的基础上,1998年Yann LeCun及其合作者构建了更加完备的卷积神经网络LeNet-5并在手写数字的识别问题中取得成功。LeNet-5沿用了LeCun (1989) 的学习策略并在原有设计中加入了池化层对输入特征进行筛选。LeNet-5及其后产生的变体定义了现代卷积神经网络的基本结构,其构筑中交替出现的卷积层-池化层被认为能够提取输入图像的平移不变特征。LeNet-5的成功使卷积神经网络的应用得到关注,微软在2003年使用卷积神经网络开发了光学字符读取(Optical Character Recognition, OCR)系统。其它基于卷积神经网络的应用研究也得到展开。
为了获得更好的实验结果,越来越多的卷积、池化和激活算法被提出。然而在众多算法中,(3*3)卷积算法和最大池化算法是构成卷积神经网络的必须品。

1.1 3*3卷积

卷积的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量(bias vector),类似于一个前馈神经网络的神经元(neuron)。卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,区域的大小取决于卷积核的大小,在文献中被称为“感受野(receptive field)”,其含义可类比视觉皮层细胞的感受野。卷积核在工作时,会有规律地扫过输入特征,在感受野内对输入特征做矩阵元素乘法求和并叠加偏差量
卷积也可以理解为一个滤波器,但是它过滤的不是波形,而是图像像素。所以卷积的设计非常重要,因为在卷积神经网络中主要的信息就是来源如此。在计算机视觉中,想要获取更多的有用信息,就要扩大感受野。以下四条原因阐述了为什么(3x3)卷积是最重要和最常用的:
(1)为了扩大感受野,卷积的尺寸就必须大于(1x1)。
(2)为了保证在计算的过程中输入和输出图像的feature map的尺寸一致,卷积的尺寸不能为(2x2)。
(3)因为卷积尺寸越小,计算量越小。
(4)卷积尺寸小可以通过加深网络来达到大卷积操作的相同感受野。

1.2 最大池化

在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域与卷积核扫描特征图步骤相同,由池化大小、步长和填充控制。最大池化就是取局部接受域中最大的值。最大池化最常用的原因如下:
(1)图像识别通常依靠边缘信息,而最大池化能够尽量的保存边缘。
(2)具有平移不变性。
(3)感兴趣的对象可能会产生最大的像素值。

2 VGG Net

VGG Net(Visual Geometry Group)是2014年由牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发的一个经典的卷积神经网络。VGG Net与之前state-of-the-art的网络结构Alex Net和ZF Net相比,错误率大幅下降。该模型参加2014年的 ImageNet图像分类与定位挑战赛,取得了优异成绩:在分类任务上排名第二,在定位任务上排名第一。
随着时间的发展,越来越复杂的深度神经网络被设计。而VGG Net之所以被奉为经典之一,从设计之初到现在频繁的出现在各大复杂的深度神经网络中,是因为VGG Net被设计的主要目标是试图回答“如何设计网络结构”的问题。从Alex Net被提出后,很多人开始利用卷积神经网络来解决图像识别问题。而VGG Net的提出,给这些结构设计带来了一些标准参考。
此前的网络设计时为了获得更大的感受野,卷积核的尺寸被设计的很大。例如Alex Net的第一层使用的卷积核长宽为(11,11)、步长为4。在输入图像尺寸一致的情况下,卷积核尺寸越大,计算参数量越多,过多的参数量为存储和计算都带来很大负担。VGG Net通过实验对卷积核进行调整,长宽减小为(3,3)、步长减小为1。虽然同等层数下的感受野变小了,但是通过加深网络结构可以达到同样的感受野。通过减小卷积核参数和加深网络结构的操作,大大降低了单个文件的存储量和总的计算参数量。
VGG Net探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠33的卷积核和22的最大池化操作,VGG Net成功地构筑了11~19层不同深度的卷积神经网络。证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,并且迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG常被放在网络的前端用来提取图像特征。如Two stage的卷积神经网络的代表RCNN系列(包括RCNN, Fast RCNN, Faster RCNN), 选择了VGGNet进行 fine-tuning (微调),在此基础上继续训练,使得目标检测精度大大提高;One stage中的目标检测网络:SSD,直接采用VGG Net作为基础模型,然后在此基础上新增了卷积层来获得更多的特征图以用于目标检测,在检测速度以及精度上都取得了很好的提升。

2.1 网络结构

为了评估深度对于网络性能的影响,VGG Net设计了几种不同深度的网络结构。最浅的网络有11层,最深的有19层,其中,所有的网络模型最后三层都是全连接层,其余都是卷积层。网络模型的结构如下图:
BNN&VGG2-VGG Net_第1张图片

2.2 优缺点

BNN&VGG2-VGG Net_第2张图片

2.3 人员存在

该项目采用的是VGG5模型。VGG5 是VGG Net的演变形式。VGG Net最重要的贡献是证明了分类任务可以通过使用小的卷积核调整CNN的深度就能达到一定的精度要求。
VGG5在保留VGGNet结构简洁的特性下,对网络结构进行调整:
(1)用卷积层替换了全连接层;
(2)减少网络层数;
(3)结合模型压缩算法,进一步压缩权重,大大降低参数量。
通过调整使得VGG5 Net在人员存在的分类任务中仍能达到较高的精度。VGG5Net网络结构如下所示。
BNN&VGG2-VGG Net_第3张图片

2.3.1 实验目的

在人员存在分类任务中验证VGG5Net性能。

2.3.2 实验环境

操作系统:Ubuntu18.04
其他:AI004, Python 3.6.8,PyTorch 1.1.0,GTX 1080ti,ann_pq 3.0.6
数据集: 32000张,来自LIP数据集和Cars数据集。
LIP数据集:http://hcp.sysu.edu.cn/lip。
Cars数据集:http://ai.stanford.edu/~jkrause/cars/car_dataset.html。

2.3.3 实验步骤

Step0:查看项目是否存在
$cd /AIHOME/bwu/workspace/project
Step1:查看实验所需文件和文件夹是否存在
$ cd PerPresence
项目结构如下所示:
BNN&VGG2-VGG Net_第4张图片
Step2:训练模型
在终端界面进入PerPresence文件夹:
$ cd PerPresence
输入命令开始训练:
$ python train.py
训练过程如下图所示:
BNN&VGG2-VGG Net_第5张图片
训练结束后,权重自动保存在ckp文件目录下,如下图所示
BNN&VGG2-VGG Net_第6张图片
Step3:测试
打开终端,进入项目根目录下:
$ cd PerPresence
输入命令,开始预测图片:
$ python predict.py --test_weights ckp/model_8_0.941.pth
输出如下图所示:
BNN&VGG2-VGG Net_第7张图片
预测结果自动保存在PerPresence/test_data_out目录下,如图所示:
BNN&VGG2-VGG Net_第8张图片
BNN&VGG2-VGG Net_第9张图片
Step4:压缩模型
打开终端,进入项目根目录下:
$ cd PerPresence
输入命令,开始进行模型压缩训练:
$ python train_slim.py –pre_weights ckp/model_3_0.9512.pth
如图所示:
BNN&VGG2-VGG Net_第10张图片
模型压缩结束后,权重自动保存至ckp_fuse文件下,如图所示:
BNN&VGG2-VGG Net_第11张图片
Step5:输出二进制feature map
打开终端,进入项目根目录下:
$ cd PerPresence
输入命令,开始进行特征提取:
$ python extract.py --before_fuse_weihghts ckp_fuse/model_5_0.9442.pth
–after_fuse_weights ckp_fuse/model_5_0.9442_conv_fused_weight.pth
提取过程如下所示:
BNN&VGG2-VGG Net_第12张图片
特征提取后自动保存至项目根目录下,如下图所示:
Step6:输出FM数据文件
输出满足硬件需求的FM数据文件
$ python input_fm.py
在当前目录下会生成input.fm.bin文件,该文件直接供硬件使用。

你可能感兴趣的:(#,BNN&VGG,人工智能)