这里作为自己在运行SSD(Tensorflow)版本的一个记录。主要参考github中的内容,链接如下:
https://github.com/balancap/SSD-Tensorflow
因为服务器上没有配置jupyter 所以我也没有使用jupyter的内容,直接从图片转换开始。基本上是翻译了github上的内容,加上自己的操作步骤。
1、在当前目录下创建文件夹,命名为 tfrecords
2、控制台运行:
python tf_convert_data.py --dataset_name=pascalvoc --dataset_dir=/project/SSD-Tensorflow/data/VOC2007/test/ --output_name=voc_2012_train --output_dir=./tfrecords
--dataset_dir=/project/SSD-Tensorflow/data/VOC2007/test/ 这里写的是VOC2007/test/ 在主机上的位置
原github中写的是2007,这样在训练的时候在tfrecords中找不到2012的图片名字,所以在这里直接改成了2012
结果可以看到显示的是:
>> Converting image 4952/4952
Finished converting the Pascal VOC dataset!
3、训练
下载ssd_300_vgg.ckpt.zip文件,解压到checkpoints文件夹下。
这个时候checkpoints文件夹下应该除了ssd_399_vgg.ckpt.zip文件之外,还有ssd_300_vgg_ckpt.data-000000-of-000001以及ssd_300_vgg_ckpt.index两个文件。
控制台运行:
python train_ssd_network.py --train_dir = ./logs/ --dataset_dir=./tfrecords --dataset_name=pascalvoc_2012 --dataset_split_name=train --model_name=ssd_300_vgg --checkpoint_path=./checkpoints/ssd_300_vgg.ckpt --save_summaries_secs=60 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.001 --batch_size=32
就可以看到结果。
这里记录一个问题,刚开始我运行的语句是:
python train_ssd_network.py --train_dir = ./logs/ --dataset_dir=./tfrecords --dataset_name=pascalvoc_2012 --dataset_split_name=train --model_name=ssd_300_vgg --checkpoint_path=./checkpoints/ssd_300_vgg.ckpt.zip --save_summaries_secs=60 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.001 --batch_size=32
后来又尝试了:
python train_ssd_network.py --train_dir = ./logs/ --dataset_dir=./tfrecords --dataset_name=pascalvoc_2012 --dataset_split_name=train --model_name=ssd_300_vgg --checkpoint_path=./checkpoints/ssd_300_vgg.ckpt.data-000000-of-000001 --save_summaries_secs=60 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.001 --batch_size=32
这两个都会报错,结果如下:
DataLossError (see above for traceback): Unable to open table file ./checkpoints/ssd_300_vgg.ckpt.zip: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
我的解决方法是:
不要指定某一个具体的文件,直接写ssd_300_ckpt, 就可以解决了。
过程中还遇到了一个问题,但是已经被前人解决掉了,记录如下:
出现这个问题是因为我原来是直接在sdd_300_vgg.ckpt.zip中解压的,这样在找这个ckpt的时候其实需要进两层目录,我只进了一层,所以找不到。
借鉴博客:
https://blog.csdn.net/yexiaogu1104/article/details/77416020
这篇博客看起来挺详细的,留作以后学习代码的备用。