数据集准备:

1)建立一个文件夹VOC2007,此文件夹放在SSD-Tensorflow-master目录下,VOC2007文件夹下存放内容如下:

其中txt文件中存放的是不含扩展名的xml文件名,含路径。

2)修改自己训练类别,datasets文件夹中pascalvoc_common.py(第24行)

VOC_LABELS = {'none': (0, 'Background'),'phone': (1, 'Indoor'),
}

图像数据格式转换为tensorflow可识别的格式tfrecods格式

1)修改datasets文件夹中pascalvoc_to_tfrecords.py文件:

#67行处,表示多少个图片对应一个tfrecods文件
# TFRecords convertion parameters.
RANDOM_SEED = 4242
SAMPLES_PER_FILES = 5#82,83行处可修改图片类型,将读取方式改为'rb'
# Read the image file.filename = directory + DIRECTORY_IMAGES + name + '.jpg'image_data = tf.gfile.FastGFile(filename, 'rb').read()

2)运行tf_convert_data.py文件 ,运行前需要传递一些参数,步骤如下:

1.在tf_convert_data.py同目录下创建一个tf_convert_data.sh文件,文件内容为(未成功完成转换):

#save voc data file
DATASET_DIR=./VOC2007/
#self build file to save tfrecords(自己创建的文件夹)
OUTPUT_DIR=./tfrecords_
python ./tf_convert_data.py \     --dataset_name=pascalvoc \   #不可更改      --dataset_dir=${DATASET_DIR} \   --output_name=voc_2007_train \   #输出的record文件前缀    --output_dir=${OUTPUT_DIR}  

2.可直接执行在终端执行命令,实现tf转换 :

./tf_conver_data.sh

3.或者另一种方法:在终端输入命令运行tf_convert_data.py,如下(可行):

~/SSD-Tensorflow-master$ python tf_convert_data.py --dataset_dir=./VOC2007/ --output_dir=./tfrecords_/

#执行结束,终端显示如下:
Instructions for updating:
Use tf.gfile.GFile.
>> Converting image 5/5
Finished converting the Pascal VOC dataset!

执行结束,在tfrecords文件夹下会生成产生的tfrecord文件。

4.采用一种笨方法,在tf_convert_data.py文件中直接加入自己的dataset_dir和output_dir,如下:

#从第33行开始,更改dataset_dir和output_dir
tf.app.flags.DEFINE_string('dataset_name', 'pascalvoc','The name of the dataset to convert.')
tf.app.flags.DEFINE_string('dataset_dir', './VOC2007/','Directory where the original dataset is stored.')
tf.app.flags.DEFINE_string('output_name', 'pascalvoc','Basename used for TFRecords output files.')
tf.app.flags.DEFINE_string('output_dir', './tfrecords_','Output directory where to store TFRecords files.')

在tf_conver_data.sh文件中只写入python执行语句,如下:


python tf_convert_data.py

运行成功。

训练参数更改,包括训练步数、训练模型保存、GPU、学习率、batch_size(train_ssd_network.py做修改);nets/ssd_vgg_300.py(使用此网络结构);eval_ssd_network.py(评估更改)

1)train_ssd_network.py

#从56行开始,分别记录的日志打印、保存、模型保存、GPU占用率
tf.app.flags.DEFINE_integer('log_every_n_steps', 10,'The frequency with which logs are print.')
tf.app.flags.DEFINE_integer('save_summaries_secs', 600,'The frequency with which summaries are saved, in seconds.')
tf.app.flags.DEFINE_integer('save_interval_secs', 600,'The frequency with which the model is saved, in seconds.')
tf.app.flags.DEFINE_float('gpu_memory_fraction', 0.8, 'GPU memory fraction to use.')#从150行,记录了批大小,训练图片的大小、训练的步数
tf.app.flags.DEFINE_integer('batch_size', 32, 'The number of samples in each batch.')
tf.app.flags.DEFINE_integer('train_image_size', None, 'Train image size')
tf.app.flags.DEFINE_integer('max_number_of_steps', 500,'The maximum number of training steps.')

2)ssd_vgg_300.py

#第94行,可修改类别数,标签数
default_params = SSDParams(img_shape=(300, 300),num_classes=2,no_annotation_label=2,feat_layers=['block4', 'block7', 'block8', 'block9', 'block10', 'block11'],feat_shapes=[(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)],anchor_size_bounds=[0.15, 0.90],

3)eval_ssd_network.py

#65行开始,更改类别数
tf.app.flags.DEFINE_integer('num_classes', 2, 'Number of classes to use in the dataset.')
tf.app.flags.DEFINE_integer('batch_size', 1, 'The number of samples in each batch.')

4)修改datasets/pascaloc_2007.py

#29行,修改如下
TRAIN_STATISTICS = {
'none': (0, 0),
'phone': (1920, 1080),
}
TEST_STATISTICS = {
'none': (0, 0),
'phone': (1, 1),
}
SPLITS_TO_SIZES = {
'train': 500,
'test': 500,
}

执行训练:

1)将下载好的vgg_16.ckpt模型,解压到checkpoints文件夹中

2)在train_ssd_network.py文件中,更改相应参数值,如下:

#变量提出进行赋值,自己加入的
TRAIN_DIR='./train_model/'#训练生成模型存放路径
DATASET_DIR='./tfrecords_/'#训数据存放路径
DATASET_NAME='pascalvoc_2007'#数据名前缀
NUM_CLASSES=2
DATASET_SPLIT_NAME='train'
MODEL_NAME='ssd_300_vgg'#加载模型名字
CHECKPOINT_PATH='./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.00004
OPTIMIZER='rmsprop'
LEARNING_RATE=0.01
LEARNING_RATE_DECAY_FACTOR=0.94
BATCH_SIZE=32
GPU_MEMORY_FRACTION=0.8

3)在SSD-Tensorflow-master文件夹下建立一个vgg16_train.sh文件,内容如下:


python ./train_ssd_network.py

4)执行命令:./vgg16_train.sh

5)开始训练,训练过程如下:

遇到的问题:

1) 提示:SyntaxError:Non-ASCII character '\xe8' in file

解决:文件头部:#-*-coding:utf-f-*-

2) 问题

解决:在train_model文件下删除checkpoint文件

3) 问题

解决:将'NCHW'改为 DATA_FORMAT='NHWC'

关于ssd-tensorlow如何训练自己的数据集合相关推荐

  1. ssd目标检测训练自己的数据_目标检测Tensorflow object detection API之训练自己的数据集...

    构建自己的模型之前,推荐先跑一下Tensorflow object detection API的demo JustDoIT:目标检测Tensorflow object detection API​zh ...

  2. detectron2训练自己的数据集和转coco格式

    参考 关于coco的格式 https://detectron2.readthedocs.io/en/latest/tutorials/datasets.html#register-a-dataset ...

  3. SSD配置和训练以及遇到的坑

    SSD配置 1.clone作者github下的caffe文件包 git clone https://github.com/weiliu89/caffe.git cd caffe git checkou ...

  4. Caffe SSD编译、训练及测试

    SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征以用于检测.SSD的网络结构如上图所示(上面是SSD模型,下面是Yolo模型),可以明显看到SSD利用了多尺度的特 ...

  5. YOLO-v5训练自己的数据+TensorRT推理部署(2)

    YOLO-v5训练自己的数据+TensorRT推理部署(2) 代码下载地址:下载地址 YOLO v5转TensorRT模型并调用 0.pt模型转wts模型 python3 gen_wts.py # 注 ...

  6. YOLO-v5训练自己的数据+TensorRT推理部署(1)

    YOLO-v5训练自己的数据+TensorRT推理部署(1) 代码下载地址:下载地址 YOLO v5在医疗领域中消化内镜目标检测的应用 YOLO v5训练自己数据集详细教程

  7. YOLOv3: 训练自己的数据(绝对经典版本1)

    为什么80%的码农都做不了架构师?>>>    windows版本:请参考:https://github.com/AlexeyAB/darknet linux       版本:请参 ...

  8. DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态

    DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态 目录 数据集csv文件内容 输出结果 设计思路 训练记录全过程 数据集csv文件内容 输 ...

  9. DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态

    DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态 目录 输出结果 设计思路 训练记录全过程 输出结果 设计思路 训练记录全过程 INFO:tensor ...

最新文章

  1. 2D图片3秒变立体,Adobe实习生的智能景深算法,登上顶级期刊
  2. 台湾大学林轩田机器学习技法课程学习笔记15 -- Matrix Factorization
  3. Qt5模型/视图结构-视图(View)
  4. [最新]制作u盘引导安装ubuntu11.04
  5. 关于程序员前途的看法和我系列文章的想法
  6. android瀑布流效果(仿蘑菇街)
  7. 发布 学习进度条 博客要求
  8. Android开发之EditText属性详解
  9. 制作u盘winpe启动盘_制作U盘启动盘
  10. 查看计算机启动项命令,运行命令开机启动项msconfig命令简介及教程
  11. 棋牌麻将 - 基础名词讲解与汇总
  12. Windows 10 驱动开发 及 驱动签名
  13. 计算机面试专业英语词汇,英语面试中常用高频词汇
  14. 中央民族大学计算机考研2020,2020年中央民族大学856计算机学科专业综合考研复习资料...
  15. java 幽灵引用_全面解析Java中的GC与幽灵引用
  16. 智能电视如何测试软件,智能电视屏幕如何快速识别好坏?教你几招!
  17. 3ds max中的对象绕局部坐标系旋转的动画
  18. 人民币大小写金额转换
  19. Python算法题笔记
  20. 全球液晶面板市场格局或将改变,TCL将超越京东方成为老大

热门文章

  1. Thinkphp5 请求报错
  2. 【新用户专享】腾讯云发车,360元三年1核2G云服务器
  3. 2016年4月20日作业
  4. input file上传图片预览
  5. Java 程序性能优化《第一章》Java性能调优概述 1.4小结
  6. 职场必须要会的餐桌礼仪
  7. Unity3D-RPG项目实战(1):发动机的特殊文件夹
  8. 《python cookbook》chapter 1
  9. 基于spring自动注入及AOP的表单二次提交验证
  10. 骨传导技术:帮你摆脱噪音的困扰