搭建神经网络SSD

搭建神经网络SSD

搭建SSD框架
https://github.com/balancap/SSD-Tensorflow 下载解压

训练模型

  • 下载 pascalvoc 数据,自己的数据根据 voc 格式改写,如图所示。
    搭建神经网络SSD_第1张图片

  • 标记数据,生成 txt 文件,train.txt,trainval.txt,test.txt,val.txt

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

#原始的
#VOC_LABELS={
# 'none':(0,'Background'),
# 'aeroplane':(1,'Vehicle'),
# 'bicycle':(2,'Vehicle'),
# 'bird':(3,'Animal'),
# 'boat':(4,'Vehicle'),
# 'bottle':(5,'Indoor'),
# 'bus':(6,'Vehicle'),
# 'car':(7,'Vehicle'),
# 'cat':(8,'Animal'),
# 'chair':(9,'Indoor'),
# 'cow':(10,'Animal'),
# 'diningtable':(11,'Indoor'),
# 'dog':(12,'Animal'),
# 'horse':(13,'Animal'),
# 'motorbike':(14,'Vehicle'),
# 'person':(15,'Person'),
# 'pottedplant':(16,'Indoor'),
# 'sheep':(17,'Animal'),
# 'sofa':(18,'Indoor'),
# 'train':(19,'Vehicle'),
# 'tvmonitor':(20,'Indoor'),
#}
#修改后的
VOC_LABELS={
'none':(0,'Background'),
'pantograph':(1,'Vehicle'),
}
  • 将图像数据转换为 tfrecods 格式

SSD-Tensorflow-master—>datasets—>pascalvoc_to_tfrecords.py 。。。然后更改文件的 83 行读取方式为’rb’ )如果你的文件不是.png 格式,也可以修改图片的类型。
在这里插入图片描述
此外, 修改 67 行,可以修改几张图片转为一个 tfrecords
搭建神经网络SSD_第2张图片
在 SSD-Tensorflow-master 文件夹下创建 tf_conver_data.sh

#!/bin/bash
#thisisashellscripttoconvertpascalVOCdatasetsintotf-recordsonly
#directorywheretheoriginaldatasetisstored
DATASET_DIR=/home/buu123/Model/SSD/SSD-Tensorflow-master/VOCdevkit/VOC2007/ 

#VOC 数据保存的文件夹

#outputdirectorywheretostoreTFRecordsfiles

OUTPUT_DIR=/home/buu123/Model/SSD/SSD-Tensorflow-master/VOCdevkit/VOC2007/Seg mentationClass
 #自己建立的保存 tfrecords 数据的文件夹
python./tf_convert_data.py\
--dataset_name=pascalvoc\
--dataset_dir=${DATASET_DIR}\
--output_name=voc_2007_train\
--output_dir=${OUTPUT_DIR}
在终端运行 tf_convert_data.sh 文件

  • 训练模型
    train_ssd_network.py 修改第 154 行的最大训练步数,将 None 改为比如 50000。 (tf.contrib.slim.learning.training 函数中 max-step 为 None 时训练会无限进行。)train_ssd_network.py,网络参数配置,若需要改,再此文件中进行修改,修改如图 33 中的数字 600,可以改变训练多长时间保存一次模型
    搭建神经网络SSD_第3张图片
    需要改的地方:

    (1) nets/ssd_vgg_300.py (因为使用此网络结构) ,修改 87 和 88 行的类别 default_params=SSDParams(
    img_shape=(300,300),
    num_classes=21, #根据自己的数据修改为类别+1
    no_annotation_label=21,#根据自己的数据修改为类别+1
    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], #anchor_size_bounds=[0.20,0.90],

    (2)train_ssd_network.py,修改类别 120 行,GPU 占用量,学习率,batch_size 等 tf.app.flags.DEFINE_integer( ‘num_classes’,21,‘Numberofclassestouseinthedataset.’)
    #根据自己的数据修改为类别+1

    (3)eval_ssd_network.py 修改类别,66 行
    #=# #Mainevaluationflags. #=#
    tf.app.flags.DEFINE_integer(
    ‘num_classes’,21,‘Numberofclassestouseinthedataset.’)
    #根据自己的数据修改为类别+1

    (4)datasets/pascalvoc_2007.py 根据自己的训练数据修改整个文件
    TRAIN_STATISTICS={
    ‘none’:(0,0),
    ‘aeroplane’:(238,306), #238 图片书, 306 目标总数
    ‘bicycle’:(243,353),
    ‘bird’:(330,486),
    ‘boat’:(181,290),
    ‘bottle’:(244,505),
    ‘bus’:(186,229),
    ‘car’:(713,1250),
    ‘cat’:(337,376),
    ‘chair’:(445,798),
    ‘cow’:(141,259),
    ‘diningtable’:(200,215),
    ‘dog’:(421,510),
    ‘horse’:(287,362),
    ‘motorbike’:(245,339),
    ‘person’:(2008,4690),
    ‘pottedplant’:(245,514),
    ‘sheep’:(96,257),
    ‘sofa’:(229,248),
    ‘train’:(261,297),
    ‘tvmonitor’:(256,324),
    ‘total’:(5011,12608), //5011 为训练的图片书,12608 为目标总数
    }
    TEST_STATISTICS={
    ‘none’:(0,0),
    ‘aeroplane’:(1,1),
    ‘bicycle’:(1,1),
    ‘bird’:(1,1),
    ‘boat’:(1,1),
    ‘bottle’:(1,1),
    ‘bus’:(1,1),
    ‘car’:(1,1),
    ‘cat’:(1,1),
    ‘chair’:(1,1),
    ‘cow’:(1,1),
    ‘diningtable’:(1,1),
    ‘dog’:(1,1),
    ‘horse’:(1,1),
    ‘motorbike’:(1,1),
    ‘person’:(1,1),
    ‘pottedplant’:(1,1),
    ‘sheep’:(1,1),
    ‘sofa’:(1,1),
    ‘train’:(1,1),
    ‘tvmonitor’:(1,1),
    ‘total’:(20,20),
    }
    SPLITS_TO_SIZES={
    ‘train’:5011, #训练数据量
    ‘test’:4952, #测试数据量
    }
    SPLITS_TO_STATISTICS={
    ‘train’:TRAIN_STATISTICS,
    ‘test’:TEST_STATISTICS,
    }
    NUM_CLASSES=20 #类别,根据自己数据的实际类别修改(不包含背景)

新建 train.sh 文件

#!/bin/bash DATASET_DIR=./tfrecords ### 训 练 集 转 化 成 tfrecords 存 储 的 路 径 
TRAIN_DIR=./logs/ ### 存 储 训 练 结 果 的 路 径 , 包 括 checkpoint 和 event , 自 行 指 定 CHECKPOINT_PATH=./checkpoints/vgg_16.ckpt###下载 vgg_16 模型 
pythontrain_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,ss d_300_vgg/block11_box \ --trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/bl ock9,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

测试模型
将得到的训练模型输入到 checkpoints 文件夹中,在终端运行 test.py

你可能感兴趣的:(人工智能,ROS,Python,TensorFlow)