# SSD: Single Shot MultiBox Detector in TensorFlow
SSD is an unified framework for object detection with a single network. It has been originally introduced in this research [article](http://arxiv.org/abs/1512.02325).
This repository contains a TensorFlow re-implementation of the original [Caffe code](https://github.com/weiliu89/caffe/tree/ssd). At present, it only implements VGG-based SSD networks (with 300 and 512 inputs), but the architecture of the project is modular, and should make easy the implementation and training of other SSD variants (ResNet or Inception based for instance). Present TF checkpoints have been directly converted from SSD Caffe models.
The organisation is inspired by the TF-Slim models repository containing the implementation of popular architectures (ResNet, Inception and VGG). Hence, it is separated in three main parts:
* datasets: interface to popular datasets (Pascal VOC, COCO, ...) and scripts to convert the former to TF-Records;
* networks: definition of SSD networks, and common encoding and decoding methods (we refer to the paper on this precise topic);
* pre-processing: pre-processing and data augmentation routines, inspired by original VGG and Inception implementations.
## SSD minimal example
The [SSD Notebook](notebooks/ssd_notebook.ipynb) contains a minimal example of the SSD TensorFlow pipeline. Shortly, the detection is made of two main steps: running the SSD network on the image and post-processing the output using common algorithms (top-k filtering and Non-Maximum Suppression algorithm).
Here are two examples of successful detection outputs:
![](pictures/ex1.png "SSD anchors")
![](pictures/ex2.png "SSD anchors")
To run the notebook you first have to unzip the checkpoint files in ./checkpoint
```bash
unzip ssd_300_vgg.ckpt.zip
```
and then start a jupyter notebook with
```bash
jupyter notebook notebooks/ssd_notebook.ipynb
```
## Datasets
The current version only supports Pascal VOC datasets (2007 and 2012). In order to be used for training a SSD model, the former need to be converted to TF-Records using the `tf_convert_data.py` script:
```bash
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}
```
Note the previous command generated a collection of TF-Records instead of a single file in order to ease shuffling during training.
## Evaluation on Pascal VOC 2007
The present TensorFlow implementation of SSD models have the following performances:
| Model | Training data | Testing data | mAP | FPS |
|--------|:---------:|:------:|:------:|:------:|
| [SSD-300 VGG-based](https://drive.google.com/open?id=0B0qPCUZ-3YwWZlJaRTRRQWRFYXM) | VOC07+12 trainval | VOC07 test | 0.778 | - |
| [SSD-300 VGG-based](https://drive.google.com/file/d/0B0qPCUZ-3YwWUXh4UHJrd1RDM3c/view?usp=sharing) | VOC07+12+COCO trainval | VOC07 test | 0.817 | - |
| [SSD-512 VGG-based](https://drive.google.com/open?id=0B0qPCUZ-3YwWT1RCLVZNN3RTVEU) | VOC07+12+COCO trainval | VOC07 test | 0.837 | - |
We are working hard at reproducing the same performance as the original [Caffe implementation](https://github.com/weiliu89/caffe/tree/ssd)!
After downloading and extracting the previous checkpoints, the evaluation metrics should be reproducible by running the following command:
```bash
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
```
The evaluation script provides estimates on the recall-precision curve and compute the mAP metrics following the Pascal VOC 2007 and 2012 guidelines.
In addition, if one wants to experiment/test a different Caffe SSD checkpoint, the former can be converted to TensorFlow checkpoints as following:
```sh
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}
```
## Training
The script `train_ssd_network.py` is in charged of training the network. Similarly to TF-Slim models, one can pass numerous options to the training process (dataset, optimiser, hyper-parameters, model, ...). In particular, it is possible to provide a checkpoint file which can be use as starting point in order to fine-tune a network.
### Fine-tuning existing SSD checkpoints
The easiest way to fine the SSD model is to use as pre-trained SSD network (VGG-300 or VGG-512). For instance, one can fine a model starting from the former as following:
```bash
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
```
Note that in addition to the training script flags, one may also want to experiment with data augmentation parameters (random cropping, resolution, ...) in `ssd_vgg_preprocessing.py` or/and network parameters (feature layers, anchors boxes, ...) in `ssd_vgg_300/512.py`
Furthermore, the training script can be combined with the evaluation routine in order to monitor the performance of saved checkpoints on a validation dataset. For that purpose, one can pass to training and validation scripts a GPU memory upper limit such that both can run in parallel on the same device. If some GPU memory is available for the evaluation script, the former can be run in parallel as follows:
```bash
EVAL_DIR=${TRAIN_DIR}/eval
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=${TRAIN_DIR} \
--wait_for_checkpoints=True \
--batch_size=1 \
--max_num_batches=500
```
### Fine-tuning a network trained on ImageNet
One can also try to build a new SSD model based on standard architecture (VGG, ResNet, Inception, ...) and set up on top of it the `multibox` layers (with specific anchors, ratios, ...). For that purpose, you can fine-tune a network by only loading the weights of the original architecture, and initialize randomly the rest of network. For instance, in the case of the [VGG-16 architecture](http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz), one can train a new model as following:
```bash
DATASET_DIR=./tfrecords
TRAIN_DIR=./log/
CHECKPOINT_PATH=./checkpoints/vgg_16.ckpt
python 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} \
--checkpoint_model_scope=vgg_16 \
--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 \
--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 \
--save_summaries_secs=60 \
--save_interval_secs=600 \
--weight_decay=0.0005 \
--optimizer=adam \
--learning_rate=0.001 \
没有合适的资源?快使用搜索试试~ 我知道了~
基于tensorflow的SSD+SORT多目标跟踪源码
共73个文件
py:45个
pyc:21个
md:2个
需积分: 45 153 下载量 193 浏览量
2018-12-19
15:17:50
上传
评论 20
收藏 187.77MB RAR 举报
温馨提示
来源https://blog.csdn.net/ycc2011/article/details/85094651 根据上面两个代码,自己修改了对应的检测和关联数据接口; !!!使用视频流作为数据输入,并输出对应的每帧图像到对应目录,同时显示追踪过程到屏幕上。具体可参考对应源码。 从文件夹中的notebook进入,修改对应视频数据流源地址和对应追踪关联后的输出数据。 我需要一些csdn下载积分供自己以后用,所以设置了分值。。。
资源推荐
资源详情
资源评论
收起资源包目录
SSD+sort tensorflow_version.rar (73个子文件)
SSD+sort tensorflow_version
inspect_checkpoint.py 5KB
train_ssd_network.py 18KB
caffe_to_tensorflow.py 2KB
tf_convert_data.py 2KB
nets
__pycache__
ssd_vgg_300.cpython-36.pyc 18KB
ssd_common.cpython-36.pyc 11KB
__init__.cpython-36.pyc 102B
custom_layers.cpython-36.pyc 5KB
np_methods.cpython-36.pyc 6KB
inception.py 1KB
ssd_vgg_512.py 25KB
inception_v3.py 27KB
ssd_common.py 17KB
__init__.py 1B
xception.py 12KB
inception_resnet_v2.py 12KB
np_methods.py 9KB
custom_layers.py 6KB
ssd_vgg_300.py 31KB
vgg.py 10KB
nets_factory.py 3KB
caffe_scope.py 3KB
preprocessing
__pycache__
tf_image.cpython-36.pyc 9KB
__init__.cpython-36.pyc 111B
ssd_vgg_preprocessing.cpython-36.pyc 11KB
ssd_vgg_preprocessing.py 17KB
__init__.py 1B
preprocessing_factory.py 2KB
vgg_preprocessing.py 14KB
inception_preprocessing.py 14KB
tf_image.py 12KB
tf_extended
metrics.py 17KB
__pycache__
image.cpython-36.pyc 106B
tensors.cpython-36.pyc 3KB
metrics.cpython-36.pyc 9KB
__init__.cpython-36.pyc 313B
math.cpython-36.pyc 2KB
bboxes.cpython-36.pyc 14KB
bboxes.py 21KB
__init__.py 966B
tensors.py 4KB
math.py 3KB
image.py 0B
tf_utils.py 10KB
checkpoints
ssd_300_vgg.ckpt.data-00000-of-00001 100.27MB
ssd_300_vgg.ckpt.index 3KB
ssd_300_vgg.ckpt.zip 93.19MB
COMMANDS.md 12KB
eval_ssd_network.py 16KB
.gitignore 444B
README.md 9KB
notebooks
sort.py 7KB
__pycache__
visualization_camera.cpython-36.pyc 4KB
visualization.cpython-36.pyc 4KB
sort.cpython-36.pyc 8KB
视频检测版备份
ssd_notebook_camera.py 6KB
visualization_camera.py 5KB
visualization_video.py 5KB
ssd_notebook_video.py 5KB
.ipynb_checkpoints
ssd_notebook-checkpoint.ipynb 602KB
datasets
dataset_utils.py 5KB
pascalvoc_2012.py 3KB
dataset_factory.py 2KB
pascalvoc_common.py 5KB
__pycache__
pascalvoc_2007.cpython-36.pyc 3KB
__init__.cpython-36.pyc 106B
pascalvoc_common.cpython-36.pyc 3KB
dataset_utils.cpython-36.pyc 4KB
__init__.py 1B
pascalvoc_to_tfrecords.py 8KB
imagenet.py 7KB
cifar10.py 3KB
pascalvoc_2007.py 3KB
共 73 条
- 1
资源评论
ronales
- 粉丝: 2165
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功