VGG全称是Visual Geometry Group属于牛津大学科学工程系,其发布了一些列以VGG开头的卷积网络模型,可以应用在人脸识别、图像分类等方面,分别从VGG16~VGG19。

一: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的结构图:

 VGG卷积神经网络模型解析(VGG卷积神经网络) VGG 神经网络 第1张

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

  • conv表明卷积层
  • FC表明全衔接层
  • conv3表明卷积层运用3x3 filters
  • conv3-64表明 深度64
  • maxpool表明***池化

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

VGG卷积神经网络模型解析(VGG卷积神经网络)  VGG 神经网络 第2张

在实践处理中还能够对***个全衔接层改为7x7的卷积网络,后边两个全衔接层改为1x1的卷积网络,这个整个VGG就变成一个全卷积网络FCN。在VGG网络之前,卷积神经网络CNN很少有打破10层的,VGG在加深CNN网络深度方面首要做出了奉献,可是VGG也有自身的局限性,不能***制的加深网络,在网络加深到必定层数之后就会呈现练习作用褪化、梯度消逝或许梯度爆破等问题,总的来说VGG在刚提出的时分也是风行一时,在ImageNet比赛数据集上都取得了不错的作用

VGG卷积神经网络模型解析(VGG卷积神经网络)  VGG 神经网络 第3张

在其他相似数据上相同体现不俗:

VGG卷积神经网络模型解析(VGG卷积神经网络)  VGG 神经网络 第4张

二:预练习模型运用(Caffe)

VGG自身供给了预练习模型供我们能够自在运用,预练习的VGG-16模型与VGG-19模型下载地址能够在这里发现:

http://www.robots.ox.ac.uk/~VGG/research/very_deep/

下载VGG-16模型之后运用OpenCV DNN模块相关API,就能够完成一个图画分类器,支撑1000种图画分类,根据ImageNet 2014-ILSVRC数据集练习。原图:

VGG卷积神经网络模型解析(VGG卷积神经网络)  VGG 神经网络 第5张

VGG-16猜测分类成果:

VGG卷积神经网络模型解析(VGG卷积神经网络)  VGG 神经网络 第6张

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

VGG卷积神经网络模型解析(VGG卷积神经网络)  VGG 神经网络 第7张

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

  1. Netnet=readNetFromCaffe(model_txt_file,model_bin_file);
  2. if(net.empty()){
  3. printf("readcaffemodeldatafailure...\n");
  4. return-1;
  5. }
  6. MatinputBlob=blobFromImage(src,1.0,Size(w,h),Scalar(104,117,123));
  7. Matprob;
  8. for(inti=0;i<10;i++){
  9. net.setInput(inputBlob,"data");
  10. prob=net.forward("prob");
  11. }
  12. MatprobMat=prob.reshape(1,1);
  13. PointclassNumber;
  14. doubleclassProb;
  15. minMaxLoc(probMat,NULL,&classProb,NULL,&classNumber);
  16. intclassidx=classNumber.x;
  17. printf("\ncurrentimageclassification:%s,possible:%.2f",labels.at(classidx).c_str(),classProb);
  18. putText(src,labels.at(classidx),Point(20,20),FONT_HERSHEY_SIMPLEX,1.0,Scalar(0,0,255),2,8);
  19. imshow("ImageClassification",src);

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

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

转载请说明出处
知优网 » VGG卷积神经网络模型解析(VGG卷积神经网络)

发表评论

您需要后才能发表评论