Win10成功运行ssd_tensorflow的目标检测

环境:win10+tensorflow1.10+cpu

  • 运行ssd_tensorflow官方demo
  1. 下载https://github.com/balancap/SSD-Tensorflow到本地

  1. 解压ssd_300_vgg.ckpt.zip 到checkpoint文件夹下(注意一定是checkpoint文件夹下,不能在checkpoint下还有子文件夹!!)

  1. 测试demo(这里我和别的博客步骤不一样,是因为按照通常的步骤来,会在from nets import ssd_vgg_300, ssd_common, np_methods

from preprocessing import ssd_vgg_preprocessing

from notebooks import visualization这里报错找不到ssd_vgg_300之类的,也不知道什么原因)

  1. 把原本在notebooks文件下ssd_notebook.ipynb拷贝到SSD-Tensorflow-master目录下

  1. 在SSD-Tensorflow-master目录下输入cmd,按Enter键进入。

  1. 输入 jupyter notebook,随后会弹出的一个浏览器界面(没有就自己复制去浏览器输入跳转)

浏览器弹出的界面

  1. 在这个页面下找到ssd_notebook.ipynb并打开

修改这几个地方!!!!!!!

(这里image_names[-6]表示测试文件夹中的倒数第几张图片,可以自己改变)

  1. 运行测试例子

等待结果出现

(图来自网络,自己忘记保存了)

  • 利用ssd_tensorflow训练自己的数据集
  1. 准备数据:从voc 2012数据集中提取出来的四个类(具体可以看我的另一篇博客:从voc2012中提取需要的类的图片和xml)

注:如果是自己制作的数据集,文件夹格式也应该和voc一样!!

Annotions:存放图片信息的xml;

JPEGImages:存放着图片

ImageSets:里面的文件夹main存放着训练集,验证集,测试集划分的信息(从voc提取需要的类或者是自己的数据之后,需要划分生成这四个文本,详细代码请看另一篇博客:python划分训练,测试,验证集)如果是voc2012,voc2007数据集,本来就有的~

 2. 修改datasets文件夹中pascalvoc_common.py文件,将训练类修改别成自己的。

3.将图像数据转换为tfrecods格式,修改datasets文件夹中的pascalvoc_to_tfrecords.py文件,然后更改文件的83行读取方式为’rb‘,如果你的文件不是.jpg格式,也可以修改图片的类型。

  1. 运行tf_convert_data.py文件(DATASET_DIR是自己数据集的路径,OUTPUT_DIR是自己设置的保存tfrecords的路径,其他选项保持默认如截图

命令:

Window系统下:

  1. 运行成功的话,会看到自己设置的保存tfrecords的路径出现这些文件

  1. 训练模型train_ssd_network.py文件中修改

(1)修改最大训练步数

(2)由于我是cpu运行,我还改了这里(如果是gpu训练,可以不用改)

(3)修改训练的类别数

(4)可以改变初始学习率,batch size,多久保存一下模型,看自己

  1. 修改nets/ssd_vgg_300.py(因为使用此网络结构) ,修改97 和98行的类别

  1. 修改eval_ssd_network.py

  1. 修改datasets/pascalvoc_2007.py 根据自己的训练数据修改整个文件

(1)

(2)

(3)

(4)

  1. 通过加载预训练好的vgg16模型,训练网络

链接:https://pan.baidu.com/s/1diWbdJdjVbB3AWN99406nA 密码:ge3x(来自参考博主)

  1. 运行train_ssd_network.py

命令:(# (1)通过加载预训练好的vgg16模型,对数据集进行训练) vgg开始训练其中某些层的参数

python  train_ssd_network.py  -train_dir=D:\ssd_tensorflow\SSD-Tensorflow-master\logs  -dataset_dir=D:\ssd_tensorflow\SSD-Tensorflow-master\tfrecords  -dataset_name=pascalvoc_2007  -dataset_split_name=test  -model_name=ssd_300_vgg   -checkpoint_path=D:\ssd_tensorflow\SSD-Tensorflow-master\checkpoints\vgg_16.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=4

train_dir:#训练生成模型的存放路径

dataset_dir:#数据存放路径

dataset_name:#数据名的前缀

dataset_split_name:

model_name: 加载的模型的名字

checkpoint_path: 所加载模型的路径

checkpoint_model_scope:所加载模型里面的作用域名

checkpoint_exclude_scopes:指定哪些层的参数不需要从vgg16模型里面加载进来

trainable_scopes:指定哪些层的参数是需要训练的,未指定的参数保持不变,若注释掉此命令,所有的参数均需要训练

save_summaries_secs:多久保存一下日志

save_interval_secs:多久保存一下模型

weight_decay:正则化的权值衰减的系数

optimizer:选取的最优化函数

learning_rate:学习率

learning_rate_decay_factor:学习率的衰减因子

batch_size:每一批次处理的图片数量

(2)从自己预训练好的模型开始训练(依然可以指定要训练哪些层)

(当你的模型通过vgg训练的模型收敛到大概o.5mAP的时候,可以进行这一步的fine-tune)

# 通过加载预训练好的vgg16模型,对“voc07trainval+voc2012”进行训练

# 通过checkpoint_exclude_scopes指定哪些层的参数不需要从vgg16模型里面加载进来

# 通过trainable_scopes指定哪些层的参数是需要训练的,未指定的参数保持不变

DATASET_DIR=/home/doctorimage/kindlehe/common/dataset/VOC0712/

TRAIN_DIR=.././log_files/log_finetune/train_voc0712_20170816_1654_VGG16/

CHECKPOINT_PATH=./log_files/log_finetune/train_voc0712_20170712_1741_VGG16/model.ckpt-253287

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} \  #所加载模型的路径
    --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 \  #每60s保存一下日志
    --save_interval_secs=600 \  #每600s保存一下模型
    --weight_decay=0.0005 \     #正则化的权值衰减的系数
    --optimizer=adam \          #选取的最优化函数
    --learning_rate=0.001 \     #学习率
    --learning_rate_decay_factor=0.94 \ #学习率的衰减因子
    --batch_size=24 \   
    --gpu_memory_fraction=0.9   #指定占用gpu内存的百分比

(3)从头开始训练自己的模型

# 注释掉CHECKPOINT_PATH,不提供初始化模型,让模型自己随机初始化权重,从头训练

# 删除checkpoint_exclude_scopes和trainable_scopes,因为是从头开始训练

# CHECKPOINT_PATH=./log_files/log_finetune/train_voc0712_20170712_1741_VGG16/model.ckpt-253287

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} \ #所加载模型的路径,这里注释掉

    #--checkpoint_model_scope=vgg_16 \   #所加载模型里面的作用域名

    --save_summaries_secs=60 \  #每60s保存一下日志

    --save_interval_secs=600 \  #每600s保存一下模型

    --weight_decay=0.0005 \     #正则化的权值衰减的系数

    --optimizer=adam \          #选取的最优化函数

    --learning_rate=0.00001 \   #学习率

    --learning_rate_decay_factor=0.94 \ #学习率的衰减因子

    --batch_size=32

  • 11
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值