将dataset convert to tfrecords时遇到的问题:
1. 在SSD的工程下面创建一个shell脚本tf_convert_data.sh,调用tf_convert_data.py将test set转化成tfrecords:这里直接运行会碰到无法读取图片,UTF-8无法decode的Erro,解决办法是打开SSD工程—>datasets—>pascalvoc_to_tfrecords.py,然后更改文件的83行(具体行数因人而异)读取方式为’rb’
filename = directory + DIRECTORY_IMAGES + name + '.jpg'
image_data = tf.gfile.FastGFile(filename, 'rb').read()
2. 脚本tf_convert_data.sh中outdir的文件夹(voc2007_tfrecords)需要事先建立,否则报错:
tensorflow.python.framework.errors_impl.NotFoundError: /data2/dingmengyuan/voc2007_tfrecords/voc_2007_tfrecords_000.tfrecord; No such file or directory
3. 运行脚本时又报错:
eval_net_network.sh: line 9: --dataset_name=pascalvoc_2007: command not found
eval_net_network.sh: line 10: --dataset_split_name=test: command not found
eval_net_network.sh: line 11: --model_name=ssd_300_vgg: command not found
原因:我用的是 windows 系统,然后将代码上传到服务器的 ubuntu 系统上执行。
windows 的默认换行是\n\r,而 linux 的换行是\n。linux 命令的续行符号\后面是不允许添加除换行以外符号的,空格都不允许。
所以上面的报错主要原因是换行符号。解决方法如下:
sed -i 's/\r$//g' [脚本文件名称]
使用 sed 流编辑命令,将 change.sh 每个行末的\r替换成为空。
参考网址:http://www.cnblogs.com/blog4ljy/p/9320487.html
评估模型 运行eval_ssd_network.sh时
1. 报错:TypeError: Can not convert a tuple into a Tensor or Operation.
解决方案:
参考网址: https://blog.csdn.net/w5688414/article/details/78529884
https://github.com/balancap/SSD-Tensorflow/issues/154
2. 利用tensorboard将评估结果可视化时,由于我是在服务器上运行,出来的网址粘贴到win下chrome浏览器中打不开
查了很久,说需要将服务器上的6006映射到本地(本人也是小白,照做了发现行不通),所以最简单的方法便是直接在cmd上运行
参考链接:https://stackoverflow.com/questions/41523005/how-to-use-tensorboard-in-a-docker-container-on-windows