关于ssd-tensorlow如何训练自己的数据集合
数据集准备:
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如何训练自己的数据集合相关推荐
- ssd目标检测训练自己的数据_目标检测Tensorflow object detection API之训练自己的数据集...
构建自己的模型之前,推荐先跑一下Tensorflow object detection API的demo JustDoIT:目标检测Tensorflow object detection APIzh ...
- detectron2训练自己的数据集和转coco格式
参考 关于coco的格式 https://detectron2.readthedocs.io/en/latest/tutorials/datasets.html#register-a-dataset ...
- SSD配置和训练以及遇到的坑
SSD配置 1.clone作者github下的caffe文件包 git clone https://github.com/weiliu89/caffe.git cd caffe git checkou ...
- Caffe SSD编译、训练及测试
SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征以用于检测.SSD的网络结构如上图所示(上面是SSD模型,下面是Yolo模型),可以明显看到SSD利用了多尺度的特 ...
- YOLO-v5训练自己的数据+TensorRT推理部署(2)
YOLO-v5训练自己的数据+TensorRT推理部署(2) 代码下载地址:下载地址 YOLO v5转TensorRT模型并调用 0.pt模型转wts模型 python3 gen_wts.py # 注 ...
- YOLO-v5训练自己的数据+TensorRT推理部署(1)
YOLO-v5训练自己的数据+TensorRT推理部署(1) 代码下载地址:下载地址 YOLO v5在医疗领域中消化内镜目标检测的应用 YOLO v5训练自己数据集详细教程
- YOLOv3: 训练自己的数据(绝对经典版本1)
为什么80%的码农都做不了架构师?>>> windows版本:请参考:https://github.com/AlexeyAB/darknet linux 版本:请参 ...
- DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态
DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态 目录 数据集csv文件内容 输出结果 设计思路 训练记录全过程 数据集csv文件内容 输 ...
- DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态
DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态 目录 输出结果 设计思路 训练记录全过程 输出结果 设计思路 训练记录全过程 INFO:tensor ...
最新文章
- 2D图片3秒变立体,Adobe实习生的智能景深算法,登上顶级期刊
- 台湾大学林轩田机器学习技法课程学习笔记15 -- Matrix Factorization
- Qt5模型/视图结构-视图(View)
- [最新]制作u盘引导安装ubuntu11.04
- 关于程序员前途的看法和我系列文章的想法
- android瀑布流效果(仿蘑菇街)
- 发布 学习进度条 博客要求
- Android开发之EditText属性详解
- 制作u盘winpe启动盘_制作U盘启动盘
- 查看计算机启动项命令,运行命令开机启动项msconfig命令简介及教程
- 棋牌麻将 - 基础名词讲解与汇总
- Windows 10 驱动开发 及 驱动签名
- 计算机面试专业英语词汇,英语面试中常用高频词汇
- 中央民族大学计算机考研2020,2020年中央民族大学856计算机学科专业综合考研复习资料...
- java 幽灵引用_全面解析Java中的GC与幽灵引用
- 智能电视如何测试软件,智能电视屏幕如何快速识别好坏?教你几招!
- 3ds max中的对象绕局部坐标系旋转的动画
- 人民币大小写金额转换
- Python算法题笔记
- 全球液晶面板市场格局或将改变,TCL将超越京东方成为老大