跑SSD-tensorflow代码遇到的坑

将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 的换行是\nlinux 命令的续行符号\后面是不允许添加除换行以外符号的,空格都不允许。

所以上面的报错主要原因是换行符号。解决方法如下:

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

你可能感兴趣的:(python,tensorflow)