SSD-Tensorflow测试及训练自己的数据错误锦集

时间:2021-09-16 16:53:11

深度学习小白一枚~入门初级,开始跑些实验,一路遇到很多很多问题,在此仅记录其中一部分,谢谢~

环境:

Ubuntu16.04+CUDA8.0+Cudnn8.0v6.0+python3.5+tensorflow1.4

一、    SSD测试

主要参考: https://blog.csdn.net/yexiaogu1104/article/details/77415990

1.  下载SSD-Tensorflow源码,下载模型ssd_300_vgg,存放在SSD-Tensorflow-master/checkpoints/目录下;

2.  在主目录 SSD-Tensorflow-master 打开终端,运行jupyter notebooknotebooks/ssd_notebook.ipynb,报错:

[C10:29:04.586 NotebookApp] Running as root is not recommended. Use --allow-rootto bypass.

解决方法:由于是根用户,需加--allow-root,即运行:jupyter notebooknotebooks/ssd_notebook.ipynb --allow-root

3.    进入服务器打开ssd_notebook.ipynb.ipynb文件后,配置一些路径:第4个cell中from notebooks importvisualization改成import notebooks。

4.  使用自己的图片,改变path = '../demo/'成自己的图片所在路径 。最后从头到尾运行所有cell

5.  一般运行到第六个cell报错,错误类型如果是没找到ssd_300_vgg.ckpt文件,是因为之前下载的ssd_300_vgg模型没有解压,就去相应文件夹将压缩包解压即可。若是报错没有matplotlib等依赖包,则终端命令安装即可。

6.  然后,如果是用网上博客教程中的.py文件进行测试,运行python ssd_Python.py可能会报错类:NameError:name 'true'/'null' is not define。原因是python里面没有true/false/null,其对应的是True/False/None。用vi打开ssd_Python.py后逐一修改,保存退出,再运行即可。

二、    用自己的数据训练SSD模型

主要参考:https://blog.csdn.net/liuyan20062010/article/details/78905517

1.  按照自己的数据和目标类别修改源码

2.  将自己的数据转换为tfrecord格式,转换之前要先到datasets—>pascalvoc_to_tfrecords.py修改第82行的原始数据格式(ubuntu要区分.jpg还是.JPG——因为我的数据后缀是.JPG,而之前用在faster rcnn的时候caffe没有区分大小写,所以一直没注意这个问题,然后这个就坑了我好几天……)——不然会报错说tensorflow.python.framework.errors_impl.NotFoundError,找不到你JPEGImages里的数据;修改第83行的“.r”为“.rb”——不然报错:UnicodeDecodeError: 'utf-8' codec can't decodebyte 0xff in position 0: invalid start byte。然后格式转换有三种方式:

(1)  直接在终端逐行命令输入。

(2)  写一个脚本文件tf_convert_data.sh,bash运行。

(3)  直接将变量带入tf_convert_data.py,终端运行Python3 tf_convert_data.py。

此时遇到过的报错有:

ImportError:libcublas.so.9.0: cannot open shared object file: No such file or directory

Failedto load the native TensorFlow runtime.

如果出现这个问题,就说明之前安装的tensorflow-gpu版本是默认的1.5或1.6版本,1.5版本要求cuda9.0,而我安装的cuda是8.0. 解决方法是回滚:pip3 install tensorflow-gpu==1.4

AttributeError:dataset_dir(dataset_dir参数没传对~很有可能是路径名称有错—注意ubuntu上的一些隐藏路径,注意检查每一个字母!)

3.  训练模型:只说从头到尾训练的方式

(1)   要注意保存日志和模型的时间间隔。之前由于考虑到自己的数据量很少(一百八十张),我就把参数save_summaries_secs和save_interval_secs改得很小,导致后面迭代到两万多次、模型就有七十几G……还是用别人博客里面的60s和600s

(2)   训练完之后,在TRAIN_DIR路径下会产生四种文件,导致后面做模型测试的时候不知是哪个作为CHECKPOINT_PATH,每个尝试,就报各种奇怪的错误。其实应该是将训练得到的整个文件夹作为自己训练得到的模型作为CHECKPOINT_PATH输入。