tensorflow-slim训练的使用过程-附踩坑

想使用一下vgg16模型,第一步调用其他人的模型,第二步通过其他人的模型fine-tune自己的模型。

调用其他人的模型比较简单,网上找到了一个例子,只要下载好对应的测试图片以及其他人训练好的model就可以了。这里附上一个小例子,比较简单,并且能够了解使用vgg16 model的流程。

# Details: ## http://www.cs.toronto.edu/~frossard/post/vgg16/            

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

# Weights from Caffe converted using https://github.com/ethereon/caffe-tensorflow      

然后就想要怎么样可以通过其他人的模型训练自己的模型呢?问了一下图像方面处理的大神后,给我了一个tensorflow-slim的框架。还没有详细的了解这个框架,先跑了一遍流程。附上链接。

https://github.com/tensorflow/models/tree/master/research/slim#the-model-runs-out-of-cpu-memory

首先就是下载对应数据集,在tf-slim中使用的数据格式都是.tf结尾的所以要根据他的要求进行转换。这边直接下载了他帮我们转换好的例子。之后还要记录一下怎么样去转换图片。首先用的是例子里面的inception_v3的例子。因为他训练的数据集是在imagenet里面的,但是这个数据集他没有给出.tf文件。所以我先下载了flowers里面的文件,这个是已经转换好数据格式的。

然后下载了他预训练的模型,想要finetune。根据他说的方式,首先训练模型。因为预训练的模型是通过ImageNet的,这个模型的label总共有1001个,但是flowers数据集的label总共只有 5个,所以不能够使用原来的模型进行预测,这里只能够使用finetune好的模型进行预测。那么问题来了,作为一个新手来说不知道finetune时间要多久。所以我在服务器上跑了两天的时间,我就想为什么训练还没有结束呢。其实这个训练好像可以设置终止的时间。不过后来我知道了,于是在他4000多次就保存一次checkpoint,在他保存了两次之后我就停止了训练。那么现在我想要用他训练好的数据进行预测,但是我根据他的操作,去找到我对应的模型。我找到对应的文件夹下面生成了一堆文件,并不是类似于之前下好的inception.ckpt。

在训练过程中的checkpoint

这时候我想要预测怎么办?到底哪个是我需要的文件呢?我想了半天,后来问了一下另外一个老司机,他告诉我只要写到对应的文件目录就可以,不需要写出对应的文件。真的吗,tf写的官方教程也太不严谨了吧……他给出的evaluation是这样的。

好吧,虽然说是自己没有看清楚他这里说了,给出的例子是在一个预先训练好的模型上面。但是他上面的内容都是在说如何训练一个checkpoint。下面起码要给一个怎么用这些训练的checkpoint吧。而且训练的过程中生成了这么多的中间文件。

slim给出的评估代码


最后可使用的代码

好吧,我最后在评估模型的时候只写到了最后的文件目录,虽然他生成ckpt的时候是一个文件,说了一句我把模型暂存到了你想要保存自己训练模型的目录下面了啊,对应的文件名字叫做model.ckpt。但是在目录下面却有好多的文件,然后想要使用这个模型的时候却不能够用到对应的这个文件名。因为这个目录下面有一堆我第一张图放出来的东西。

最终的解决办法是,只要写到对应的目录,只要写到对应的目录,只要写到对应的目录就可以!

好了那么最终的结果还是令人高兴的,这边得到:

训练的过程
最终得到的结果

还有一个问题,就是在训练的时候权限的问题,不能够执行。幸好之前在写网站的时候遇到过类似的问题,所以非常简单的一条命令就解决了。

Chmod 777 filename

这里还有一个比较麻烦的是想要创建目录,因为我开的用户好像权限比较低,所以每次想要创建目录必须要su root

其他好像没有什么问题了。接下来要做的两个事情是:

1、看一次vgg16的模型怎么跑,之前跑的inception_v3

2、看一下这个图片怎么转换到对应的tf文件格式

你可能感兴趣的:(tensorflow-slim训练的使用过程-附踩坑)