当前位置: 首页 > 科技观察

VGG卷积神经网络模型分析

时间:2023-03-12 03:35:49 科技观察

1:VGG简介及模型结构VGG全称VisualGeometryGroup,隶属于牛津大学理工学院。它发布了一系列以VGG为起点的卷积网络模型,可以应用于人脸识别,图像分类等,分别从VGG16到VGG19。VGG研究卷积网络深度的初衷是想弄清楚卷积网络的深度如何影响大规模图像分类识别的精度和准确性。最初,VGG-16全称为极深卷积网络(GG-Very-Deep-16CNN),为了在加深网络层数的同时避免参数过多,VGG一共使用了3x3的小卷积核层,卷积层的步长设置为1。VGG的输入设置为224x244大小的RGB图像,对训练集图像上的所有图像计算RGB均值,然后将图像作为输入传入VGG卷积网络,使用3x3或1x1滤波器,卷积步长固定为1。VGG全连接层有3层。根据卷积层+全连接层的总数,可以从VGG11到VGG19。最小的VGG11有8个卷积层和3个全连接层,最多的VGG19有16个卷积层。+3个全连接层。另外,VGG网络并不是每个卷积层后面都跟一个池化层,而是一共5个池化层,分布在不同的卷积层下。下图是VGG11~GVV19的结构图:考虑到整个网络的简化结构展示,ReLU激活函数没有在上图结构中展示。上面结构中的一些解释:conv表示卷积层FC表示全连接层conv3表示卷积层使用3x3的过滤器conv3-64表示深度64maxpool表示池化以上VGG11~VGG19的参数总数罗列如下:在实际处理中你也可以把第一个全连接层改成7x7的卷积网络,后面两个全连接层改成1x1的卷积网络。整个VGG就变成了一个全卷积网络FCN。在VGG网络之前,卷积神经网络CNN很少突破10层。VGG首先为加深CNN网络的深度做出了贡献。然而,VGG也有其自身的局限性。它不能以可控的方式加深网络。加深到一定层数后,会出现训练效果衰减、梯度消失或梯度爆炸等问题。总的来说,VGG刚提出的时候也很火爆,在ImageNet竞赛数据集上取得了不错的成绩。在其他类似数据中也表现不错:2:预训练模型使用(Caffe)VGG本身提供了预训练模型供大家自由使用。预训练的VGG-16模型和VGG-19模型的下载地址可以在这里找到:http://www.robots.ox.ac.uk/~vgg/research/very_deep/下载完VGG-16模型后使用OpenCVDNN模块相关API,可以实现一个图像分类器,支持1000种图像分类,基于ImageNet2014-ILSVRC数据集训练。原图:VGG-16预测分类结果:OpenCL初始化内存不够有点尴尬,只能说我机器不给力:演示网络加载和图像分类的OpenCV程序代码如下:Netnet=readNetFromCaffe(model_txt_file,model_bin_file);if(net.empty()){printf("readcaffemodeldatafailure...\n");return-1;}MatinputBlob=blobFromImage(src,1.0,Size(w,h),Scalar(104,117,123));Matprob;for(inti=0;i<10;i++){net.setInput(inputBlob,"data");prob=net.forward("prob");}MatprobMat=prob.reshape(1,1);点类编号;doubleclassProb;minMaxLoc(probMat,NULL,&classProb,NULL,&classNumber);intclassidx=classNumber.x;printf("\ncurrentimageclassification:%s,possible:%.2f",labels.at(classidx).c_str(),classProb);putText(src,labels.at(classidx),Point(20,20),FONT_HERSHEY_SIMPLEX,1.0,Scalar(0,0,255),2,8);imshow("ImageClassification",src);学习OpenCV深度学习视频教程点击下方:OpenCV深度学习模块-《OpenCV 深度神经网络教程》