SSD算法TensorFlow版代码地址:https://github.com/balancap/SSD-Tensorflow
运行环境:Ubuntu 16.04
使用anaconda3安装python3.5,并安装如下模块
- tensorflow
- opencv
- py-opencv
如需使用GPU运行,自行安装CUDA,再用anaconda安装tensorflow-gpu模块
一、文件框架
(一)前期准备部分
1、tf_convert_data.py
将VOC2007格式的数据转换为TF-Records格式
运行脚本代码:
DATASET_DIR=./VOC2007/test/
OUTPUT_DIR=./tfrecords
python tf_convert_data.py \
--dataset_name=pascalvoc \
--dataset_dir=${DATASET_DIR} \
--output_name=voc_2007_train \
--output_dir=${OUTPUT_DIR}
在Ubuntu下,建立一个后缀为shell_name.sh的文件,将代码写入该文件,然后在终端上输入:
./shell_name.sh
shell_name:该脚本文件的名字
/VOC2007/test/此处改为自己的数据集
运行结果是生成一个TF-Records的集合文件,不再是分开的单个文件
2、eval_ssd_network.py
该文件用于评价SSD在数据集上的表现,并且画出召回准确率曲线以及mAP(mean Average Precision)指标
运行脚本代码:
EVAL_DIR=./logs/
CHECKPOINT_PATH=./checkpoints/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt
python eval_ssd_network.py \
--eval_dir=${EVAL_DIR} \
--dataset_dir=${DATASET_DIR} \
--dataset_name=pascalvoc_2007 \
--dataset_split_name=test \
--model_name=ssd_300_vgg \
--checkpoint_path=${CHECKPOINT_PATH} \
--batch_size=1
CHECKPOINT_PATH:需要加载的模型所在路径,可以修改
EVAL_DIR:生成的评价所存放的位置
batch_size:一次处理的数据量
3、caffe_to_tensorflow.py
将caffe模型的断点(checkpoint)转为tensorflow的断点(checkpoint)
如果想跑的模型是在caffe框架下搭建的,生成的是caffe的断点,可以利用这个文件转为tensorflow的断点
运行脚本代码:
CAFFE_MODEL=./ckpts/SSD_300x300_ft_VOC0712/VGG_VOC0712_SSD_300x300_ft_iter_120000.caffemodel
python caffe_to_tensorflow.py \
--model_name=ssd_300_vgg \
--num_classes=21 \
--caffemodel_path=${CAFFE_MODEL}
(二)训练部分
1、train_ssd_network.py
该文件用于训练SSD神经网络,有很多训练过程中可选的项:
- 数据集
- 优化器(optimiser)
- 超参数
- 模型(model)
- 断点(checkpoint)
运行脚本代码:
DATASET_DIR=./tfrecords
TRAIN_DIR=./logs/
CHECKPOINT_PATH=./checkpoints/ssd_300_vgg.ckpt
python train_ssd_network.py \
--train_dir=${TRAIN_DIR} \
--dataset_dir=${DATASET_DIR} \
--dataset_name=pascalvoc_2012 \
--dataset_split_name=train \
--model_name=ssd_300_vgg \
--checkpoint_path=${CHECKPOINT_PATH} \
--save_summaries_secs=60 \
--save_interval_secs=600 \
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.001 \
--batch_size=32
--model_name:模型名称
--save_summaries_secs
--save_interval_secs
--weight_decay
--optimizer:优化器的选择(有多种最小化损失函数的方法)
--learning_rate:学习率
--batch_size:一次可以输入到神经网络的数据量
--ssd_300_vgg.ckpt:模型名称
--logs:训练保存目录