SSD源码测试

下载源码:

github地址

  • 解压:
SSD源码测试_第1张图片

这里的代码比较全:

  1. datasets是数据工厂
  2. notebooks是测试文件
SSD源码测试_第2张图片
  1. checkpoints是cpkt文件,解压到当前目录。
  2. demo和pictures均是图片
  3. net是网络结构文件
  4. deployment是训练用的部署文件

开始玩玩这个代码

其他暂时未追究,分三步。
1.测试
2.验证
3.训练

测试

在notebook中有ssd_tests.ipynb文件
在SSD-Tensorflow-master根目录,在cmd中输入,shitf + 鼠标右键

jupyter  notebook

会在浏览器打开jupyter notebook

SSD源码测试_第3张图片

直接运行所有的cell,记得解压checkpoints的文件。

SSD源码测试_第4张图片

验证

先做数据,先还是下载VOC 2007数据
这里有数据地址:
链接:https://pan.baidu.com/s/15Tster6-DhDc1J5rhguHoA
提取码:1j36

  • 先生成tfrecord
    修改datasets/pascalvoc_to_tfrecords.py 代码,如下,

在根目录下运行tf_convert_data.py
公认的操作如下,linux下建立.sh文件:

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}

我是如下操作,没在cmd输入参数,修改了tf_convert_data.py的参数默认值。

tf.app.flags.DEFINE_string(
    'dataset_name', 'pascalvoc',
    'The name of the dataset to convert.')
tf.app.flags.DEFINE_string(
    'dataset_dir', 'F:/my_code/object_detector/VOCdevkit/VOC2007/',
    'Directory where the original dataset is stored.')
tf.app.flags.DEFINE_string(
    'output_name', 'voc_2007_test',
    'Basename used for TFRecords output files.')
tf.app.flags.DEFINE_string(
    'output_dir', './datasets/',
    'Output directory where to store TFRecords files.')

注意这里的

tf.app.flags.DEFINE_string(
    'output_name', 'voc_2007_test',
    'Basename used for TFRecords output files.')

最好以voc_2007_*_ 这样的格式,其他格式会报错,因为在pascalvoc_2007.py中如下。

SSD源码测试_第5张图片

制作train数据 和 test数据:

voc_2007_train 和 voc_2007_test

结果:

SSD源码测试_第6张图片
  • 得到tfcord文件:
SSD源码测试_第7张图片
  • 开始测试模型的精度

报错:


SSD源码测试_第8张图片

点这里解决
在eval_ssd_network.py加一个函数flatten()

def flatten(x): 
    result = [] 
    for el in x: 
        if isinstance(el, tuple): 
            result.extend(flatten(el))
        else: 
            result.append(el) 
    return result

如下:

SSD源码测试_第9张图片

再修改:

eval_op=flatten(list(names_to_updates.values())),

输入:

python .\eval_ssd_network.py
SSD源码测试_第10张图片

搞定得到日志文件:

SSD源码测试_第11张图片

运行tensorboard:

SSD源码测试_第12张图片

训练

  1. 生成数据
  2. 也是建立.sh文件。
#!/bin/bash

#The directory where the dataset files are stored.
DATASET_DIR=/home/doctorimage/kindlehe/common/dataset/VOC2007/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007_tfrecord/
#../../../../common/dataset/VOC2007/VOCtrainval_06-Nov-2007/VOCdevkit/VOC2007_tfrecord/

#Directory where checkpoints and event logs are written to.
TRAIN_DIR=.././log_files/log_finetune/

#The path to a checkpoint from which to fine-tune
CHECKPOINT_PATH=/home/doctorimage/kindlehe/common/models/tfmodlels/SSD/VGG_VOC0712_SSD_300x300_ft_iter_120000/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt
#../../../../common/models/tfmodlels/SSD/VGG_VOC0712_SSD_300x300_ft_iter_120000/VGG_VOC0712_SSD_300x300_ft_iter_120000.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=60 \
    --save_interval_secs=600 \
    --weight_decay=0.0005 \
    --optimizer=adam \
    --learning_rate=0.001 \
    --batch_size=32

我是win10玩家:

python ./train_ssd_network.py  --train_dir=./train_model/  --dataset_dir=./tfrecords_/  --dataset_name=pascalvoc_2007 --dataset_split_name=train --model_name=ssd_300_vgg   --checkpoint_path=./checkpoints/vgg16.ckpt   --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=24      --gpu_memory_fraction=0.9    

注意:

  • –dataset_name=pascalvoc_2007
  • –dataset_split_name=train
  • –model_name=ssd_300_vgg这三个参数不要自己随便取,在代码里,这三个参数是if…else…语句,有固定的判断值,所以要根据实际情况取选择
  • tf.contrib.slim.learning.training函数中max-step为None时训练会无限进行

参考:
Kindle君
SSD-tensorflow 测试与训练实践

你可能感兴趣的:(SSD源码测试)