SSD-Tensorflow 训练自己的数据集

阅读此文默认你已经可以成功运行SSD-TensorFlow的官方源码,也就是能够在VOC2007数据集上成功训练。下面将介绍一下如何用SSD-Tensorflow 训练自己的数据。如果不清楚的话可以参考链接:

https://github.com/balancap/SSD-Tensorflow
https://blog.csdn.net/ei1990/article/details/75282855
https://blog.csdn.net/liuyan20062010/article/details/78905517

明确2件事:

1)、训练自己的数据,我们选用的是什么模型?

2)、用什么模型来fine-tune?

1、我们在设置训练参数的时候,设置的model_name=ssd_300_vgg,就是我们要用ssd_300_vgg这个模型来训练我们的数据,当然我们的数据的类别跟模型默认的类别=21可能不一致,这就需要在训练的时候设置一下参数,num_classes=4,(如果搞清楚前面数据转换步骤这一点应该很容易理解),同理dataset_name要设置成自己的数据名。

2、我们这里选用vgg_16模型进行训练,意思就是利用vgg_16模型里的一些参数初始化我们的ssd_300_vgg模型里的部分参数,只训练其它层的参数,这就需要将指定哪些层不需要初始化,需要训练哪些层。

 --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 \

这里直接复制这两行就可以了。

最后附上我的训练文件,vgg_16.ckpt官网下载路径

#!/bin/bash
DATASET_DIR=./tfrecords  ###训练集转化成tfrecords存储的路径
TRAIN_DIR=./logs/        ###存储训练结果的路径,包括checkpoint和event,自行指定
CHECKPOINT_PATH=./checkpoints/vgg_16.ckpt ###下载vgg_16模型
python train_ssd_network.py \
 --train_dir=${TRAIN_DIR} \
 --dataset_dir=${DATASET_DIR} \
 --dataset_name=xxxxxx \ ###具体指定,改为your_data_name, 如果你在前面搞清楚了如何转换自己的数据的话
 --dataset_split_name=train \
 --model_name=ssd_300_vgg \
 --num_classes=4
 --checkpoint_path=${CHECKPOINT_PATH} \
 --checkpoint_model_scope=vgg_16 \     ####改为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  

这里只是简单的介绍一下,如介绍的不清楚还请见谅,有问题可以联系我。


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
您好!对于使用SSD(Single Shot MultiBox Detector)训练自己的数据集,您可以按照以下步骤进行操作: 1. 数据集准备:收集并标注您自己的数据集,确保每个样本都有正确的边界框标注和相应的类别标签。您可以使用标注工具,如LabelImg,进行标注。 2. 数据集格式转换:将数据集转换为SSD所需的格式。SSD使用Pascal VOC或COCO等标准格式。您可以使用数据转换工具,如convert2ssd.py脚本,将数据集转换为SSD可接受的格式。 3. 配置网络模型:根据您的需求和数据集的类别数,选择合适的SSD网络模型。您可以在网络模型配置文件中进行相关设置,如设置输入图像大小、锚框尺寸和比例等。 4. 数据集划分:将数据集划分为训练集和验证集。通常,80%的数据用于训练,20%的数据用于验证。 5. 训练模型:使用标注好的数据集进行模型训练。您可以使用深度学习框架,如TensorFlow或PyTorch,加载SSD网络模型,并结合优化算法(如随机梯度下降)进行模型训练。 6. 模型评估和调优:在训练过程中,您可以定期评估模型在验证集上的性能,并进行相应的调优,如调整学习率、增加训练轮次等。 7. 模型推理:在完成模型训练后,您可以使用该模型进行目标检测任务。通过将输入图像传入SSD模型,您可以获取检测到的目标边界框和对应的类别标签。 请注意,这只是一个基本的概述,具体的实现细节可能因您使用的深度学习框架和数据集格式而有所不同。同时,由于SSD算法较为复杂,可能需要一定的计算资源和时间来完成训练过程。祝您成功训练自己的SSD模型!如果您有任何进一步的问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值