• 前言
  • 目录

    • 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层,其中,所有的网络模型最后三层都是全连接层,其余都是卷积层。网络模型的结构如下图:

2.2 优缺点

2.3 人员存在

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

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
项目结构如下所示:

Step2:训练模型
在终端界面进入PerPresence文件夹:
$ cd PerPresence
输入命令开始训练:
$ python train.py
训练过程如下图所示:

训练结束后,权重自动保存在ckp文件目录下,如下图所示

Step3:测试
打开终端,进入项目根目录下:
$ cd PerPresence
输入命令,开始预测图片:
$ python predict.py --test_weights ckp/model_8_0.941.pth
输出如下图所示:

预测结果自动保存在PerPresence/test_data_out目录下,如图所示:


Step4:压缩模型
打开终端,进入项目根目录下:
$ cd PerPresence
输入命令,开始进行模型压缩训练:
$ python train_slim.py –pre_weights ckp/model_3_0.9512.pth
如图所示:

模型压缩结束后,权重自动保存至ckp_fuse文件下,如图所示:

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
提取过程如下所示:

特征提取后自动保存至项目根目录下,如下图所示:
Step6:输出FM数据文件
输出满足硬件需求的FM数据文件
$ python input_fm.py
在当前目录下会生成input.fm.bin文件,该文件直接供硬件使用。

BNNVGG2-VGG Net相关推荐

  1. VGG卷积神经网络模型加载与运行

    1,VGG概述 VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,在 ILSVRC 2014 ...

  2. CV算法复现(分类算法3/6):VGG(2014年 牛津大学)

    致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 目录 致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 1 本次要 ...

  3. CV01-语义分割笔记和两个模型VGG ResNet的笔记

    目录 一.语义分割 二.VGG模型 2.1 VGG特征提取部分 2.2 VGG图像分类部分 三.ResNet模型 3.1 为什么是ResNet 3.2 1×1卷积调整channel维度大小 3.3 R ...

  4. 清华旷视:让VGG再次伟大!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI CNN经 ...

  5. VGG - Very Deep Convolutional Networks for Large-Scale Image Recognition

    Very Deep Convolutional Networks for Large-Scale Image Recognition ICLR 2015 (oral) http://www.robot ...

  6. RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大 | CVPR-2021

    作者 | 丁霄汉 编辑 | 李梦佳 2020年B站年度弹幕是"爷青回".一定有很多瞬间,让你感觉"爷的青春回来了".在这个卷积网络各种超参精确到小数点后三位的时 ...

  7. Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet

    CNN的发展史 上一篇回顾讲的是2006年Hinton他们的Science Paper,当时提到,2006年虽然Deep Learning的概念被提出来了,但是学术界的大家还是表示不服.当时有流传的段 ...

  8. 【卷积神经网络结构专题】经典网络结构之VGG(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第三篇文章,前面我们先后介绍了LeNet和A ...

  9. 谁说只有VGG才能做风格迁移,ResNet也可以!答案就在对抗攻击中

    https://www.toutiao.com/a6707818378641293836/ 2019-06-29 13:21:10 边策 发自 凹非寺 量子位 报道 | 公众号 QbitAI 风格迁移 ...

  10. 干货丨深度学习VGG模型核心拆解

    如今深度学习发展火热,但很多优秀的文章都是基于经典文章,经典文章中的一句一词都值得推敲和分析.此外,深度学习虽然一直被人诟病缺乏足够令人信服的理论,但不代表我们不能感性分析理解,下面我们将对2014年 ...

最新文章

  1. 关于图像特征的提取【转】
  2. mysql数据库设计实践_MYSQL教程分享20个数据库设计的最佳实践
  3. leetcode算法题--回文链表
  4. [Qt教程] 第39篇 网络(九)进程和线程
  5. 谈谈我对js中闭包的理解
  6. [Redux/Mobx] 为什么redux能做到局部渲染呢?
  7. 使用预训练模型进行句对分类(Paddle、PyTorch)
  8. 正则查看接口消耗时间超过4位数的
  9. Java基础---数组内容详解
  10. linux哪个模块允许保存文件,linux网络操作系统与实训 课后习题答案
  11. 感知机PLA算法实现[转载]
  12. Scp远程批量执行命令
  13. mvc crud_Spring MVC Hibernate MySQL集成CRUD示例教程
  14. 密码分析学中常见的攻击模式
  15. 服务器上多个php,php – 在多个服务器上扩展cronjobs
  16. Apache自带的ab压力测试工具用法详解
  17. 一年的时间,我出版了一本实体书
  18. python基础之文件处理
  19. 微信上收到的文件怎么打印出来
  20. Numpy 解一元二次方程

热门文章

  1. win7原版镜像_告诉你Ghost系统和原版系统之间的区别,看完再装机也不晚
  2. mysql5.045_Microsoft SQL Server数据库各版本下载地址集合
  3. 存储过程(数组参数、for循环、拼接的动态sql游标、merge into)
  4. java -version 自动被切换的问题 : C:\ProgramData\Oracle\Java\javapath;
  5. 西安交通大学MOOC C++期末1
  6. sklearn 增量学习
  7. java 等额本息计算方式
  8. Datav:从零开始的数据可视化大屏搭建系统
  9. 3DMAX - 使用编辑多边形的小技巧
  10. 抽象数据类型三元组Triplet基本操作与实现 严蔚敏版