您的位置:首页
『TensorFlow』SSD源码学习_其一:项目介绍导读
2018-06-30 19:50
651 查看
原项目地址:SSD-Tensorflow
Fork版本项目地址:SSD
根据README的介绍,该项目收到了tf-slim项目中包含了多种经典网络结构(分类用)的启发,使用了模块化的编程思想,可以替换检查网络的结构,其模块组织如下:
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.
项目给提供了两个已训练的VGG网络,输入分别为300和512。
除此之外,还有一个迷你的SSD展示ipynb脚本,可以快读演示预测ssd_notebook。
脚本
将数据转换为一组TF-Record文件,调用示意如下:
可以自定义训练的明细(dataset, optimiser, hyper-parameters, model, ...)
可以载入ckeckpoints后fine-tune
使用VGG-300模型进行微调的示意如下,
这个脚本可以在训练脚本运行的同时运行,动态的监测当前训练效果,此时命令如下:
而且文档描述的很不简单,eval脚本可以监测到GPU空闲,
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:
脚本
one may also want to experiment with data augmentation parameters (random cropping, resolution, ...) in
在前一个命令中,训练脚本随机初始化checkpoint_exclusive de_scope的权重,并从检查点文件vgg_16加载。ckpt网络的剩余部分。注意,我们还指定了trainable_scope参数,以便此时只训练新的SSD组件,并保持VGG网络的其余部分不变。一旦网络收敛到良好的第一个结果(例如~0.5 mAP),就可以对整个网络进行如下微调:
在TF-Slim模型页面上可以找到许多流行的深度架构的预先训练权重。
Fork版本项目地址:SSD
根据README的介绍,该项目收到了tf-slim项目中包含了多种经典网络结构(分类用)的启发,使用了模块化的编程思想,可以替换检查网络的结构,其模块组织如下:
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.
项目给提供了两个已训练的VGG网络,输入分别为300和512。
除此之外,还有一个迷你的SSD展示ipynb脚本,可以快读演示预测ssd_notebook。
脚本tf_convert_data.py
将数据转换为一组TF-Record文件,调用示意如下: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}
脚本caffe_to_tensorflow.py
可以把caffe的模型转换为checkpoints,供程序使用: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}
脚本train_ssd_network.py
用于训练模型,
可以自定义训练的明细(dataset, optimiser, hyper-parameters, model, ...)
可以载入ckeckpoints后fine-tune
使用VGG-300模型进行微调的示意如下,
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
脚本eval_ssd_network.py
使用checkpoint文件来检验训练效果,调用示意如下: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
这个脚本可以在训练脚本运行的同时运行,动态的监测当前训练效果,此时命令如下:
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
而且文档描述的很不简单,eval脚本可以监测到GPU空闲,
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:
脚本ssd_vgg_preprocessing.py、
[code]ssd_vgg_300/512.py
one may also want to experiment with data augmentation parameters (random cropping, resolution, ...) in 、[code]ssd_vgg_300/512.py
ssd_vgg_preprocessing.pyor/and network parameters (feature layers, anchors boxes, ...) in
ssd_vgg_300/512.py
预训练分类网络扩展为SSD
可以尝试构建一个基于标准体系结构的新的SSD模型(VGG, ResNet, Inception,…),并在其之上设置multibox层(使用特定的锚点,比率,…)。为此,还可以只加载原始架构的权重,并随机初始化网络的其余部分,从而对网络进行微调。例如,在vgg16架构的情况下,可以将一个新模型训练如下: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 \ --learning_rate_decay_factor=0.94 \ --batch_size=32
在前一个命令中,训练脚本随机初始化checkpoint_exclusive de_scope的权重,并从检查点文件vgg_16加载。ckpt网络的剩余部分。注意,我们还指定了trainable_scope参数,以便此时只训练新的SSD组件,并保持VGG网络的其余部分不变。一旦网络收敛到良好的第一个结果(例如~0.5 mAP),就可以对整个网络进行如下微调:
DATASET_DIR=./tfrecords TRAIN_DIR=./log_finetune/ CHECKPOINT_PATH=./log/model.ckpt-N 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 \ --save_summaries_secs=60 \ --save_interval_secs=600 \ --weight_decay=0.0005 \ --optimizer=adam \ --learning_rate=0.00001 \ --learning_rate_decay_factor=0.94 \ --batch_size=32
在TF-Slim模型页面上可以找到许多流行的深度架构的预先训练权重。
相关文章推荐
- 『TensorFlow』SSD源码学习_其四:数据介绍及TFR文件生成
- 『TensorFlow』SSD源码学习_其八:网络训练
- 『TensorFlow』SSD源码学习_其二:基于VGG的SSD网络前向架构
- 『TensorFlow』SSD源码学习_其六:标注格式整理
- 『TensorFlow』SSD源码学习_其三:搜索网格生成
- 『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理
- 『TensorFlow』SSD源码学习_其七:损失函数
- 网上图书商城项目学习笔记-024后台模块介绍及管理员登录
- 仿美团项目学习源码分析(2)---JS之slice()方法
- TensorFlow学习笔记之源码分析----最近算法nearest_neighbor.py
- 电力系统项目学习(1)--项目介绍
- Github上Stars最多的53个深度学习项目,TensorFlow遥遥领先
- 专访许鹏:谈C程序员修养及大型项目源码阅读与学习
- Android源码学习之单例模式应用及优点介绍
- 唐宇迪之tensorflow学习笔记项目实战(LSTM情感分析)
- apache的开源项目-模板引擎(Velocity)_学习了两天就上手啦_源码下载
- BaseRecyclerViewAdapterHelper开源项目之BaseQuickAdapter源码学习之预加载的实现(二)
- MP4学习(三)ts-mp4源码阅读(1)介绍
- 深度学习框架的介绍与比较(Caffe, TensorFlow, MXNet, Torch, Theano)
- 【机器人学】机器人开源项目KDL源码学习:(8)KDL的精髓