一、模型下载
下载FasterRCNN源码
链接:https://pan.baidu.com/s/1r9L76SOoZOJxoKya5byf6Q
提取码:jnjv
二、准备数据集
1、利用labelImg对训练目标进行标注
2、将标注后的文件分别放入…\models\research\object_detection\images\路径下test、train文件中,其中包含xml文件和原图。
3、在…\models\research\object_detection文件夹下执行如下代码,生成可识别标注文件:
python xml_to_csv.py
4、执行后会在…\models\research\object_detection\images\文件夹下生成test_labels.csv、train_labels.csv两个文件。
三、配置训练环境
1、 在开始菜单中找到打开Anaconda Prompt
2、 在tensorflow-gpu环境下操作
activate tensorflow-gpu
3、每次进入需要执行如下指令
set PYTHONPATH=F:\FasterRCNN\models; F:\FasterRCNN\models\research; F:\FasterRCNN\models\research\slim
注:其中F:\FasterRCNN\models为自己解压后的FasterRCNN文件路径。
4、 删除…\FasterRCNN\models\research\slim文件下BUILD文件
在该文件下执行:
python setup.py build
python setup.py install
5、进入到model/research目录下执行如下指令:
python setup.py build
python setup.py install
四、配置识别模型
1、打开generate_tfrecord.py在33行,将文件进行如下修改
修改前:
def class_text_to_int(row_label):
if row_label == 'Car':
return 1
if row_label == 'Van':
return 2
if row_label == 'Truck':
return 3
if row_label == 'Pedestrian':
return 4
if row_label == 'Person_sitting':
return 5
if row_label == 'Cyclist':
return 6
if row_label == 'Tram':
return 7
if row_label == 'Misc':
return 8
else:
return 0
修改后:
def class_text_to_int(row_label):
if row_label == ' strawberry':
return 1
else:
return 0
注:这里有几个识别目标就有几个row_label ,这里只识别一个strawberry,因此就一个。
2、打开training/labelmap.pbtxt进行修改:
修改前:
item {
id: 1
name: 'Car'
}
item {
id: 2
name: 'Van'
}
item {
id: 3
name: 'Truck'
}
item {
id: 4
name: 'Pedestrian'
}
item {
id: 5
name: 'Person_sitting'
}
item {
id: 6
name: 'Cyclist'
}
item {
id: 7
name: 'Tram'
}
item {
id: 8
name: 'Misc'
}
修改后:
item {
id: 1
name: 'strawberry'
}
注:这里注意要与前面对应。
3、配置训练路径:
python generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record
python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record
注:在…\models\research\object_detection下执行,这里csv的路径要与训练路径对应,如何文件夹没有改动,不用修改。
五、配置训练模型
1、打开training\faster_rcnn_inception_v2_pets.config进行修改:
在第9行:num_classes: 8中的8改为1,即识别一个目标。
在106行中:
fine_tune_checkpoint: "F:/FasterRCNN/models/research/object_detection/faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt"
其中F:/FasterRCNN/models/research/object_detection/faster_rcnn_inception_v2_coco_2018_01_28为自己模型路径。
在122、136行input_path、124、138行label_map_path中对应路径修改为自己路径。
train_input_reader: {
tf_record_input_reader {
input_path: "F:/FasterRCNN/models/research/object_detection/train.record"
}
label_map_path: "F:/FasterRCNN/models/research/object_detection/training/labelmap.pbtxt"
}
eval_input_reader: {
tf_record_input_reader {
input_path: "F:/FasterRCNN/models/research/object_detection/test.record"
}
label_map_path: "F:/FasterRCNN/models/research/object_detection/training/labelmap.pbtxt"
shuffle: false
num_readers: 1
}
注:注意路径下划线。
六、开始训练
1、在object_detection\training文件下,保留faster_rcnn_inception_v2_pets.config、graph.pbtxt、labelmap.pbtxt、pipeline.config,其他文件删除。
2、…\models\research\object_detection文件下执行:
python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
开始训练模型,当终止模型,可以继续执行该指令,继续训练。
七、查看训练情况
1、打开新的Anaconda Prompt
2、执行
tensorboard --logdir=training
3、将生成的链接,在浏览器中查看训练情况。
八、创建训练结果模型
1、 首先删除object_detection\inference_graph文件下所有文件
2、 执行如下执行
python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph
注:将model.ckpt-XXXX中的XXXX改为object_detection\training文件下的模型对应编号。例如:model.ckpt-2903.meta,那么XXXX就改为2903,即model.ckpt-2903。
3、 最终生成模型在object_detection\inference_graph文件下。
九、利用自己的模型进行识别
1、 打开Object_detection_image.py
在34行进行修改
修改前:
MODEL_NAME = 'faster_rcnn_resnet101_kitti_2018_01_28'
修改后:
MODEL_NAME = ' inference_graph '
注:inference_graph即为模型路径。
在35行进行修改
修改前:
IMAGE_NAME = ' 000000.png'
修改后:
IMAGE_NAME = ' L1070.jpg'
注:这里的L1070.jpg为object_detection文件下图片。
在45行进行修改:
修改前:
PATH_TO_LABELS = os.path.join(CWD_PATH,'data','kitti_label_map.pbtxt')
修改后:
PATH_TO_LABELS = os.path.join(CWD_PATH,'training','labelmap.pbtxt')
注:training为object_detection文件下的文件夹,labelmap.pbtxt为training文件下的文件。
在51行进行修改NUM_CLASSES 为识别目标数。即NUM_CLASSES = 1。
可是根据训练情况,适当修改显示识别率:
在110中修改min_score_thresh=0.8中的0.8。
十、执行识别结果:
在object_detection文件下执行
python Object_detection_image.py
至此,便完成了训练和检测。