利用vgg预训练模型提取图像特征及常见问题

VGG卷积神经网络是牛津大学在2014年提出来的模型。当这个模型被提出时,由于它的简洁性和实用性,马上成为了当时最流行的卷积神经网络模型。它在图像分类和目标检测任务中都表现出非常好的结果。在2014年的ILSVRC比赛中,VGG 在Top-5中取得了92.3%的正确率。有VGG16和VGG19,模型的权重由ImageNet训练而来
1、VGG结构
在这里插入图片描述
下面以VGG16为例来说明:
在这里插入图片描述
看出VGG16由13个卷积层+3个全连接层=16层构成,过程为:
经过的卷积核大小为333,stride=1,padding=1,pooling为采用2x2的max pooling方式。
(1) 输入:输入224 * 224 * 3的图片。
(2) Conv1_1+conv1_2+pool1:经过64个卷积核的两次卷积后,采用一次max pooling。经过第一次卷积后,有(3 * 3 * 3) * 64=1728个训练参数;第二次卷积后,有(3 * 3 * 64) * 64=36864个训练参数,大小变为112 * 112 * 64.
(3) Conv2_1+conv2_2+pool2:经过两次128个的卷积核卷积之后,采用一次max pooling,有(3 * 3 * 128) * 128=147456个训练参数,大小变为56 * 56 * 128.
(4) Conv3_1+conv3_2+con3_3+pool3: 经过三次256个的卷积核卷积之后,采用一次max pooling,有(3 * 3 * 256) * 256=589824个训练参数,大小变为28 * 28 * 256.
(5) Conv4_1+conv4_2+con4_3+pool4: 经过三次512个的卷积核卷积之后,采用一次max pooling,有(3 * 3 * 512) * 512=2359296个训练参数,大小变为14 * 14 * 512.
(6) Conv5_1+conv5_2+con5_3+pool5: 再经过三次512个的卷积核卷积之后,采用一次max pooling,有(3 * 3 * 512) * 512=2359296个训练参数,大小变为7 * 7 * 512.
(7) Fc6+Fc7+Fc8:经过三次全连接,最终得到1000维的向量。

2、利用tensorflow搭建网络并提取指定层特征
包括定义网络参数,定义卷积层、池化层、全连接层操作,定义网络结构,等操作,然后根据是分类任务或是其他任务定义损失函数开始训练等。代码较长,在此就不列出,会附在附件中,需要的同事可查看。因为我只需要利用预训练好的vgg提取图像的特征,所以会去掉最后一层softmax,这里需要提前下载在大的图像数据集ImageNet上训练好的网络权重文件vgg16.npy。 encoding must be 'ASCII', 'latin1', or 'bytes' ,当npy文件中只有层名字时候,选用encoding= 'latin1',当npy文件中既有层名字又有各个参数,使用encoding='bytes'.这里是第一种情况,所以用encoding= 'latin1'。选用加载方法如下:vgg16_npy_path为vgg16.npy文件的存放路径,
在这里插入图片描述
提取图像特征的代码如下,需要提取哪一层的特征,就把名字修改一下即可,如:我提取的是fc7层,下面就写vgg.fc7,每层名字的定义在vgg16.py文件中,到此操作完毕。
在这里插入图片描述
3、遇到的问题
在调用vgg16.py函数时,一直报下面这个错误:
在这里插入图片描述
查找原因发现是因为split()这个函数在不同版本的tensorflow中参数位置发生了改变,在tensorflow<0.12.0版本中的用法是:
tf.split(axis, num_or_size_splits, value)
在tensorflow>0.12.0版本中的用法是:
tf.split(value, num_or_size_splits, axis)
在vgg16.py对应位置上修改即可,
在这里插入图片描述

完整代码:https://github.com/2281123066/vgg-tensorflow.git
vgg16,vgg19模型下载:
链接:https://pan.baidu.com/s/1S0hBs3ioP-TUgd3IS82syQ 密码:s4po

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值