/KITTI-Objects-Detection-Using-SSD-in-Tensorflow

This project was used to prepare a competition in the summer of 2018 ; The origin training structure is based on the SSD-Tensorflow by balancap.

Primary LanguageJupyter Notebook

KITTI Objects Detection Using SSD in Tensorflow

文件位置

数据集

训练结果

检测图片结果

数据集转换

KITTI->VOC

VOC->TFRecord

  • pascalvoc_common.py 48行根据实际修改VOC_LABELS

  • pascalvoc_2007.py 80和90行修改SPLITS_TO_SIZES中的train和test的个数,和NUM_CLASSES(实际类别数,不用+1) 在SSD/ 执行

      DATASET_DIR=./VOC_KITTI/
      OUTPUT_DIR=./tfrecords_VOC_KITTI
      python3 tf_convert_data.py --dataset_name=pascalvoc --dataset_dir=${DATASET_DIR} --output_name=voc_2007_test --output_dir=${OUTPUT_DIR} --txt_name=test
    

**注:**txt_name 和 output_name 需根据实际情况改变,训练数据集--train,测试--test

Training

  • train_ssd_network.py 中135行修改类别数(实际类别数+1)

  • ssd_vgg_300.py 中96行修改类别数(实际类别数+1)

  • 运行 train.sh ,其内容如下

      DATASET_DIR=tfrecords_VOC_KITTI
      TRAIN_DIR=logs/finetune_kitti_VOC/
      CHECKPOINT_PATH=./checkpoints/ssd_300_vgg.ckpt
      python3 train_ssd_network.py --train_dir=${TRAIN_DIR} --dataset_dir=${DATASET_DIR} --dataset_name=pascalvoc_2007 --dataset_split_name=train --model_name=ssd_300_vgg --checkpoint_path=${CHECKPOINT_PATH} --save_summaries_secs=600 --save_interval_secs=600 --weight_decay=0.0005 --optimizer=adam --learning_rate=0.001 --batch_size=32 --gpu_memory_fraction=0.9 --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
    
  • 原始训练数据需 下载
  • 训练命令处加上一行checkpoint_exclude_scopes原因:预训练的checkpoints是用21个类别来训练的,与实际训练类别数不同,加上后舍弃了一些层,只用这个原始结构中的weights来训练

Evaluation

  • eval_ssd_network.py 中66行修改类别数(实际类别数+1)

  • 运行 eval.sh ,其内容如下

      DATASET_DIR=tfrecords_VOC_KITTI
      EVAL_DIR=./logs/eval_KITTI_VOC/
      CHECKPOINT_PATH=./logs/finetune_kitti_VOC/model.ckpt-7311
      python3 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
    

Demo

demo

上图中的测试图片均来源自网络

  • kitti_demo.py 42行修改模型地址,68行修改测试图片目录地址,72行修改测试图片目录中图片

  • visualization.py 最后一行取消注释可实现测试图片显示

  • 在./notebooks 运行

      python kitti_demo.py
    

测试图片保存在DetectResults文件夹中,图片命名为测试源图片名

VGG_512

  • ssd_512文件夹中内容替换原有文件即可

Reference