TensorFlow VGG-16 VGG-19预训练及可训练模型

在我们的实际项目中,一般不会直接从第一层直接开始训练,而是通过在大的数据集上(如ImageNet)训练好的模型,把前面那些层的参数固定,在运用到我们新的问题上,修改最后一到两层,用自己的数据去微调(finetuning),一般效果也很好。

所谓finetuning,就是说我们针对某相似任务已经训练好的模型,比如CaffeNet, VGG-16, ResNet等, 再通过自己的数据集进行权重更新, 如果数据量比较小,可以只更新最后一层,其他层的权重不变,如果数据量中等,可以训练后面几层,如果数据量很大,那OK,直接从头训练,只不过在训练时间上,需要花费比较多。

在网络训练好之后,只需要forward过程就能做预测,当然,我们也可以直接把这个网络当成一个feature extractor来用,可以直接用任何一层的输出作为特征,根据R-CNN论文对Alexnet的实验结果,如果不做fine-tuning,pool5和fc6和fc7的特征效果并没有很强的提升,所以,如果直接用作feature extractor,直接用pool的最后一层输出就OK。


vgg-16一种深度卷积神经网络模型,16表示其深度。模型可以达到92.7%的测试准确度。它的数据集包括1400万张图像,1000个类别。

TensorFlow VGG-16 预训练模型

https://github.com/ry/tensorflow-vgg16

vgg-16是我最喜欢运行的图像分类的模型,因为它的简单性和准确性。这种模型的创造者发表了可用于Caffe的预先训练二进制。

https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-readme-md

MD5 (VGG_ILSVRC_16_layers.caffemodel) = 441315b0ff6932dbfde97731be7ca852

这是将特定的文件转换到一个tensorflow模型并检查其正确性。

运行make下载原始的caffe模型并转换。tf_forword.py里有一个怎样使用产生的vgg16.tfmodel的例子。如果你不想按照caffe,你可以从这下载输出https://github.com/ry/tensorflow-vgg16/raw/master/vgg16-20160129.tfmodel.torrent

TF模型的输入(“image”)应该是[批次,高度,宽度,通道],其中高度=宽度=224,通道=3.值应该在0到1之间。

输出(“prob”)是一个1000维的类概率向量,这个向量的索引对应syset.txt里的行号

https://github.com/leihe001/tensorflow-vgg

这是个基于tensorflow-vgg16Caffe to TensorFlow的VGG16和VGG19的一个TensorFlow的实现。

我们修改了tensorflow-vgg16的实现使用numpy加载取代默认的tensorflow加载,目的是加速初始化和减少总的内存使用量。此实现允许进一步修改网络,例如移除FC层,或者增加批大小。

为了使用VGG网络,需要下载VGG16 NPYVGG19的npy文件。

## 使用 使用这个编译VGG工程

vgg = vgg19.Vgg19()
vgg.build(images)

或者

vgg = vgg16.Vgg16()
vgg.build(images)

图像是一个维度是[None,224,224,3]的张量。

张量可以是一个占位,一个变量甚至是一个常量。

所有的VGG层(张量)可以通过vgg对象访问。例如,vgg.conv1_1, vgg.conv1_2, vgg.pool5, vgg.prob, ...test_vgg16.py and test_vgg19.py包含样例的使用。

##额外 在我的另一个tensorflow图像风格合成项目中使用了这个库:stylenet

##更新 添加一个可训练的VGG19版本vgg19_trainable.支持从现有的变量或从开始训练。(但是不包括训练器)

test_vgg19_trainabel里添加了一个简单的测试。switch里有如何训练,关闭训练模型进行验证,以及如何保存的例子。

我添加了一个单独的文件(不是修改现有的),因为我想保持原始VGG网络的简单性。

猜你喜欢

转载自blog.csdn.net/jiangjiang_jian/article/details/80407036