阅读此文默认你已经可以成功运行SSD-TensorFlow的官方源码,也就是能够在VOC2007数据集上成功训练。下面将介绍一下如何用SSD-Tensorflow 训练自己的数据。如果不清楚的话可以参考链接:
https://github.com/balancap/SSD-Tensorflow https://blog.csdn.net/ei1990/article/details/75282855 https://blog.csdn.net/liuyan20062010/article/details/78905517
明确2件事:
1)、训练自己的数据,我们选用的是什么模型?
2)、用什么模型来fine-tune?
1、我们在设置训练参数的时候,设置的model_name=ssd_300_vgg,就是我们要用ssd_300_vgg这个模型来训练我们的数据,当然我们的数据的类别跟模型默认的类别=21可能不一致,这就需要在训练的时候设置一下参数,num_classes=4,(如果搞清楚前面数据转换步骤这一点应该很容易理解),同理dataset_name要设置成自己的数据名。
2、我们这里选用vgg_16模型进行训练,意思就是利用vgg_16模型里的一些参数初始化我们的ssd_300_vgg模型里的部分参数,只训练其它层的参数,这就需要将指定哪些层不需要初始化,需要训练哪些层。
14. --checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \ 15. --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \
这里直接复制这两行就可以了。
最后附上我的训练文件,vgg_16.ckpt官网下载路径
1. #!/bin/bash 2. DATASET_DIR=./tfrecords ###训练集转化成tfrecords存储的路径 3. TRAIN_DIR=./logs/ ###存储训练结果的路径,包括checkpoint和event,自行指定 4. CHECKPOINT_PATH=./checkpoints/vgg_16.ckpt ###下载vgg_16模型 5. python train_ssd_network.py \ 6. --train_dir=${TRAIN_DIR} \ 7. --dataset_dir=${DATASET_DIR} \ 8. --dataset_name=xxxxxx \ ###具体指定,改为your_data_name, 如果你在前面搞清楚了如何转换自己的数据的话 9. --dataset_split_name=train \ 10. --model_name=ssd_300_vgg \ 11. --num_classes=4 12. --checkpoint_path=${CHECKPOINT_PATH} \ 13. --checkpoint_model_scope=vgg_16 \ ####改为vgg_16 14. --checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \ 15. --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box \ 16. --save_summaries_secs=60 \ 17. --save_interval_secs=600 \ 18. --weight_decay=0.0005 \ 19. --optimizer=adam \ 20. --learning_rate=0.001 \ 21. --learning_rate_decay_factor=0.94 \ 22. --batch_size=32
这里只是简单的介绍一下,如介绍的不清楚还请见谅,有问题可以联系我。
文章来源: SSD-Tensorflow 训练自己的数据集