MobileNet 训练检测网实验总结
MobileNet做目标检测的包在tensorflow/models/object_detection里。先下载一个ssd_mobilenet_v1的预训练模型。
1.数据制作
准备VOC格式的数据集
使用 脚本 ../object_detection/cre
ate_pascal_tf_record.py 把VOC数据转化成 tf.record文件。
# DATA
python bread_pascal_record.py --data_dir=/home/wrz/zifu/VOCdevkit2007/VOC2007 --year=VOC2007 --output_path=/hyw/zifu.record --label_map_path=/hyw/zifu_label_map.pbtxt
- 这个脚本需要提供 标签文件label_map.txt ,在object_detection/data/下有很多label_map.txt的例子
- 这个脚本对取xml文件,每张图片生成tf.example的数据结构,如果报错找不到图片,可以在主函数中
print data
,看下data[dir]
和data[filename]
,在函数dict_to_tf_example
中对应修改img_path
- 函数
dict_to_tf_example
中展示了对xml文件读取和创建tf.example类型的过程,可以在这里根据对label的需要做改动
2.训练
网络结构文件 ../object_detection/samples/configs/下有mobilenet_ssd的训练用的网络结构文件ssd_mobilenet_v1_pets.config,修改下面几处:
- num_class
- fine_tune_checkpoint: “/home/wrz/MobileNet-master/models-master/object_detection/ssd_mobilenet_v1_coco_11_06_2017/model.ckpt
- input_path: “/home/wrz/MobileNet-master/models-master/object_detection/hyw/zifu.record”
- label_map_path: “/home/wrz/MobileNet-master/models-master/object_detection/hyw/zifu_label_map.pbtxt”
- train_config: batch_size;learning_rate
关于网络结构文件,其结构如下
--model:{} --train_config:{ --optimizer: {} --data_augmentation_options:{} ... } --train_input_reader: {} --eval_config: {} --eval_input_reader: {}
-
类似caffe.proto对layers的参数定义,tensorflow在object_detect/protos/ 下有对config文件各个部分的参数定义。例如在optimizer.proto中可以找到learning_rate,在train_config.proto中有batch_size:
syntax = "proto2"; package object_detection.protos; import "object_detection/protos/optimizer.proto"; import "object_detection/protos/preprocessor.proto"; message TrainConfig { // Input queue batch size. optional uint32 batch_size = 1 [default=32]; // Data augmentation options. repeated PreprocessingStep data_augmentation_options = 2; // Whether to synchronize replicas during training. optional bool sync_replicas = 3 [default=false]; // How frequently to keep checkpoints. optional uin