训练自己FasterRCNN模型

一、模型下载
下载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

至此,便完成了训练和检测。

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值