ssd_tensorflow训练自己的模型填坑记

人工智能开发真的很难,虽然网上有相应的教程,但在关键的环节还是要自己摸索,否则搞的一头雾水。昨天开始研究SSD_Tensorflow的训练,想实现训练自己的模型。但万事开头难啊,网上找资料照着做,然而可能机器配制环境什么不一样,总是会出问题。有的是linux平台下的实现方面,在windows平台下行不通。通过查阅资料,参数调试,总算可以训练起来了,但又不知道如何保存训练的结果,而且遇到各种大坑。
第一个坑就是参数配制了,网上找了很多参数配制,有的直接用终端terminam来输入参数的,但不知道如何打开终端,然后折腾了很久,才在搜索引擎中找到方法。所以说搜索引擎帮了大忙,要自己完全独立的探索,估计就搞不了了。打开终端很空间,就是在pycharm的左下角点下,然后打开。但打开终端后,输入参数又出现问题,

又折腾了半天,最后直接在代码里改参数好了。参数改了半天,才得以相对正确的参数配制。
tf.app.flags.DEFINE_string(
‘dataset_name’, ‘pascalvoc_2007’, ‘The name of the dataset to load.’)
tf.app.flags.DEFINE_integer(
‘num_classes’, 21, ‘Number of classes to use in the dataset.’)
tf.app.flags.DEFINE_string(
‘dataset_split_name’, ‘train’, ‘The name of the train/test split.’)
tf.app.flags.DEFINE_string(
‘dataset_dir’, ‘imagedata/tfrecords’, ‘The directory where the dataset files are stored.’)
tf.app.flags.DEFINE_integer(
‘labels_offset’, 0,
‘An offset for the labels in the dataset. This flag is primarily used to ’
‘evaluate the VGG and ResNet architectures which do not use a background ’
‘class for the ImageNet dataset.’)
tf.app.flags.DEFINE_string(
‘model_name’, ‘ssd_300_vgg’, ‘The name of the architecture to train.’)
tf.app.flags.DEFINE_string(
‘preprocessing_name’, None, ‘The name of the preprocessing to use. If left ’
‘as None, then the model_name flag is used.’)
然而又出现:

还有pycharm内存不足的问题。

查找了半天资料,网上的几种方法试过了都没有用。最后把batch_size设置成16,然后
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.6)
config = tf.ConfigProto(gpu_options=gpu_options)
这样终于可以运行起来了。但出现一个问题,我让电脑开着跑了一晚止,结果早上起来发现笔记本电脑的电源插头松了,然后电脑待机没电了。然后重新开始,好像从step9000多开始跑,似乎一直都停不下来,速度也比较慢。后来才看到一个参数设置成50000了,tf.app.flags.DEFINE_integer(‘max_number_of_steps’, 10000,
‘The maximum number of training steps.’)
我把它改成10000,但跑完后没有ckpt这样的文件保存,也就是说我没办法保存训练后的数据。然后每次都会从上次的step来跑,似乎是保存了某个配制文件,但又找到到配制文本所在的地方。感觉每步都是坑啊。如果顺利实现这一步,下一步尝试制作自己的VOC数据集,然后来训练自己的数据。INFO:tensorflow:Stopping Training.
INFO:tensorflow:Finished training! Saving model to disk.
INFO:tensorflow:Recording summary at step 10005.
就是不知道模型保存到什么地方去了。
后来发现,原来跑C盘去了。但其它同样的路径确不是在C盘,看来这是底层代码的问题。 话说昨天晚上训练了一晚上,结果因为电脑待机了,电源插头松了,所以没有训练完毕。但今天上午还可以继续训练,并且训练的step每次都是从之前中断的数字开始,我重启pycharm也是这样,重启电脑还是这样。这样我就判断肯定是从文件中读取了这个训练的起点次数的,但奇怪的是我设置的保存模型的路径中找不到这个文件,我还以为是训练失败,但调试输出每次都显示保存到磁盘了。然后今天上午又折腾了一上午,又遇到了几个坑,说save_path为None,我突然看到C盘下面有个tmp和log文件夹,打开一看,里面果然有很多ckpt文件,然后我删除后就出现save_path为None的错误。原来要新建一个空的tmp文件,然后训练就可以了。这样我已经可以实现训练数据这一步了,并且知道如何配制训练参数,不过很多变量和代码还是不太理解,但相比之前进步多了。接下来我可以测试下生成的ckpt模型,看看这个识别效率怎么样,不管识别效率好还是坏,如果可以识别出效果,那就说明训练的数据是有效果的。下一步则可以尝试制作自己的数据集,用VOC标签工具制作一些数据集来尝试训练。数据集的下载和收集是一件很困难的事情,大部分是英文网站,所以英语也要深入学习。另外还要研究各种数据集之间的转换,如VOC转tf的数据集,或者caffe的数据集或者 imgnet的数据集转换等。一步一步来,慢慢的就可以掌握更多的理论,然后想办法把它布局到手机移动平台中,或者应用到有用的场景中。另外还要加强理论上的学习,只有理论达到一定的高度才能在实践中走的更远,实践的话就是要探索市场化产品,当然这个难度比较大,尤其是一个人单干的情况下。说实话这种研发即是脑力活又是体力活,真的很不简单。

猜你喜欢

转载自blog.csdn.net/SAME999ABC/article/details/82558980