1.数据准备:
自己的图片打标,做成VOC2007格式,文件夹路径对应。
2.修改VOC_LABELS为自己的labels:
修改脚本".datasets/pascalvoc_common.py",修改里面的"VOC_LABELS",背景为0,其余改为自己的类。
3.生成训练数据:
运行tf_convert_data.py,将其里面的路径修改为自己的路径。
修改代码:
a.修改:/datasets/pascalvoc_common.py
第一类none不要动,其他的类修改为自己数据集的类
b.修改:datasets/pascalvoc_to_tfrecords.py
文件中,82行,格式改为相对应的‘.jpg’或‘.jpeg’,83行‘r’改为‘rb'
c.修改:nets/ssd_vgg_300.py
num_classes=21,
no_annotation_label=21,
将其修改为自己的类+1
d.修改:eval_ssd_network.py
num_classes', 21
修改num_classes为“类别数+1”
e.修改:datasets/pascalvoc_2007.py
根据自己的训练数据修改整个文件
none类不要动,其他类修改为自己数据集的类,其中括号内的第一个数为图片数,第二个数为目标数(也就是bonding box数,关于如何计算目标数,我写了一个python文件,在附录中),52行和76行的total是所有类的总和;
NUM_CLASSES改为自己的类别数(不用加一)
f.修改:train_ssd_network.py
num_classes为“类别数+1”
g.修改:max_number_of_steps
修改‘None’为最大训练步数(如50000),设为None时训练会一直进行,需要手动停止
参数配置参照:
python train_ssd_network.py
--train_dir=./logs/
--dataset_dir=./tfrecords
--num_classes=3
--dataset_name=pascalvoc_2007
--dataset_split_name=train
--model_name=ssd_300_vgg
--checkpoint_path=./checkpoints/model.ckpt-63669
--save_summaries_secs=60
--save_interval_secs=600
--weight_decay=0.0005
--optimizer=adam
--learning_rate=0.001
--batch_size=8
--gpu_memory_fraction=0.7
--max_number_of_steps=50000
--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