VGG卷积神经网络模型解析

作者: gloomyfish 2019-01-05 08:40:17

一:VGG介绍与模型结构

VGG全称是Visual Geometry Group属于牛津大学科学工程系,其发布了一些列以VGG开头的卷积网络模型,可以应用在人脸识别、图像分类等方面,分别从VGG16~VGG19。VGG研究卷积网络深度的初衷是想搞清楚卷积网络深度是如何影响大规模图像分类与识别的精度和准确率的,最初是VGG-16号称非常深的卷积网络全称为(GG-Very-Deep-16 CNN),VGG在加深网络层数同时为了避免参数过多,在所有层都采用3x3的小卷积核,卷积层步长被设置为1。VGG的输入被设置为224x244大小的RGB图像,在训练集图像上对所有图像计算RGB均值,然后把图像作为输入传入VGG卷积网络,使用3x3或者1x1的filter,卷积步长被固定1。VGG全连接层有3层,根据卷积层+全连接层总数目的不同可以从VGG11 ~ VGG19,最少的VGG11有8个卷积层与3个全连接层,最多的VGG19有16个卷积层+3个全连接层,此外VGG网络并不是在每个卷积层后面跟上一个池化层,还是总数5个池化层,分布在不同的卷积层之下,下图是VGG11 ~GVV19的结构图:

考虑到整个网络的精简结构显示,ReLU激活函数并没有被显示在上述结构中。上述结构中一些说明:

  • conv表示卷积层
  • FC表示全连接层
  • conv3表示卷积层使用3x3 filters
  • conv3-64表示 深度64
  • maxpool表示***池化

上述VGG11 ~ VGG19参数总数列表如下:

 

在实际处理中还可以对***个全连接层改为7x7的卷积网络,后面两个全连接层改为1x1的卷积网络,这个整个VGG就变成一个全卷积网络FCN。在VGG网络之前,卷积神经网络CNN很少有突破10层的,VGG在加深CNN网络深度方面首先做出了贡献,但是VGG也有自身的局限性,不能***制的加深网络,在网络加深到一定层数之后就会出现训练效果褪化、梯度消逝或者梯度爆炸等问题,总的来说VGG在刚提出的时候也是风靡一时,在ImageNet竞赛数据集上都取得了不错的效果

 

在其他类似数据上同样表现不俗:

 

二:预训练模型使用(Caffe)

VGG本身提供了预训练模型供大家可以自由使用,预训练的VGG-16模型与VGG-19模型下载地址可以在这里发现:

https://www.robots.ox.ac.uk/~vgg/research/very_deep/

下载VGG-16模型之后使用OpenCV DNN模块相关API,就可以实现一个图像分类器,支持1000种图像分类,基于ImageNet 2014-ILSVRC数据集训练。原图:

 

VGG-16预测分类结果:

 

稍微有点尴尬的是,OpenCL初始化内存不够了,只能说我的机器不给力:

 

演示网络加载与图像分类的OpenCV程序代码如下:

  1. Net net = readNetFromCaffe(model_txt_file, model_bin_file); 
  2.     if (net.empty()) { 
  3.         printf("read caffe model data failure...\n"); 
  4.         return -1; 
  5.     } 
  6.     Mat inputBlob = blobFromImage(src, 1.0, Size(w, h), Scalar(104, 117, 123)); 
  7.     Mat prob; 
  8.     for (int i = 0; i < 10; i++) { 
  9.         net.setInput(inputBlob, "data"); 
  10.         prob = net.forward("prob"); 
  11.     } 
  12.     Mat probMat = prob.reshape(1, 1); 
  13.     Point classNumber; 
  14.     double classProb; 
  15.     minMaxLoc(probMat, NULL, &classProb, NULL, &classNumber); 
  16.     int classidx = classNumber.x; 
  17.     printf("\n current image classification : %s, possible : %.2f", labels.at(classidx).c_str(), classProb); 
  18.  
  19.     putText(src, labels.at(classidx), Point(20, 20), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 0, 255), 2, 8); 
  20.     imshow("Image Classification", src);  

学习OpenCV 深度学习视频教程 点击下面:

OpenCV深度学习模块 -《OpenCV 深度神经网络教程》

VGG 神经网络
上一篇:人工智能以及大数据将这样改变生活 下一篇:UNIT划重点—快速掌握对话系统技术原理
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

从零开始构建简单人工神经网络:1个隐藏层

我们在本文中将构建一个有1个输入层、1个隐藏层和1个输出层的神经网络。我们会看到,我们构建的神经网络能够找到非线性边界。

布加迪 ·  2020-03-26 09:00:00
AI芯片之卷积神经网络原理

卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。 它包括卷积层(convolutional layer)和池化层(pooling layer)。

人人都是极客 ·  2020-03-25 09:48:10
从零开始构建简单人工神经网络:1个输入层和1个输出层

本上下篇将介绍仅使用numpy Python库从零开始构建人工神经网络(ANN)。上篇将介绍构建一个很简单的ANN,只有1个输入层和1个输出层,没有隐藏层。下篇将介绍构建一个有1个输入层、1个隐藏层和1个输出层的ANN。

布加迪 ·  2020-03-25 09:00:00
华为开源只用加法的神经网络:实习生领衔打造,效果不输传统CNN

没有乘法的神经网络,你敢想象吗?无论是单个神经元的运算还是卷积运算,都不可避免地要使用乘法。

佚名 ·  2020-03-17 10:01:22
五分钟了解机器学习十大算法

本文为有志于成为数据科学家或对此感兴趣的读者们介绍最流行的机器学习算法。

Fahim ul Haq ·  2020-03-06 10:45:48
40纳秒完成图像分类,图像传感器自带神经网络登上Nature

AI芯片还可以怎么搞?最新登上Nature的研究带来新启发。试想一下,如果人类眼睛可以直接处理图像——不用劳烦大脑,那视觉图像信息的处理速度岂不是可以大大提升?

鱼羊 晓查 ·  2020-03-05 15:59:10
神经网络技术帮自主驾驶汽车识别幻影物体

以色列本古里安大学内盖夫网络安全研究中心的研究人员表示,在道路上投影图像形成幻影物体,可导致行驶中的半自主或全自主驾驶汽车误判并急刹车,从而危及车内驾驶员和乘客的生命。他们正在研究的神经网络技术,将解决自主驾驶汽车无法识别幻影物体的缺陷。

毛黎 ·  2020-02-07 13:33:13
二次元少女生成器、会开车的神经网络...2019年优秀的17个机器学习项目

为了挑选出2019年优秀的开源项目,最近某位Medium网友整理了2019年Reddit机器学习板块热门高赞项目资源汇总,一起来看看都有哪些项目上榜。

猿妹 ·  2019-12-25 14:29:35
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载