使用Tensorflow Object Detection的faster--rcnn模型检测自己的数据集

目前在使用最多人数,范围最广的深度学习模型中google开发的TensorFlow框架可以算上其中的姣姣者。本文章将使用TensorFlow开源框架来实现Faster Rcnn的物体检测。
源码下载地址:https://github.com/tensorflow/models/tree/master/research/object_detection

一.源码框架简介:

1.object detection

进入github中可以看到实现的功能非常多:
在这里插入图片描述

其中,official文件夹是官方例程API的集合,都已经经过了优化和稳定性测试。research文件夹是我们的重点,其中的object detection 是物体识别。object detection是基于slim模型分类后的目标识别。
research文件夹API如下:
adversarial_crypto:用对抗性神经密码术保护通信。
adversarial_text:带有对抗训练的半监督序列学习。
attention_ocr:用于实际图像文本提取的模型。
audioset:模型和与使用支持代码 AudioSet。
autoencoder:各种自动编码器。
brain_coder:强化学习的程序综合。
cognitive_mapping_and_planning:用于视觉导航的基于空间存储器的映射和规划架构的实现。
压缩:使用预先训练的残余GRU网络压缩和解压缩图像。
cvt_text:使用跨视图训练的半监督序列学习。
deep_contextual_bandits:使用深度神经网络和Thompson采样的各种上下文绑定算法的代码。
deep_speech:自动语音识别。
deeplab:语义图像分割的深度标注。
delf:用于图像匹配和检索的深层局部特征。
differential_privacy:训练数据的差异隐私。
domain_adaptation:域名分离网络。
fivo:过滤用于训练生成序列模型的变分目标。
gan:生成对抗网络。
im2txt:用于图像字幕的图像到文本神经网络。
开始:用于计算机视觉的深度卷积网络。
keypointnet:通过端到端几何eeasoning [ demo ] 发现潜在的3D关键点。
learning_to_remember_rare_events:用于深度学习的大型终身内存模块。
learning_unsupervised_learning:元学习无监督学习更新规则。
lexnet_nc:名词复合关系分类的分布式模型。
lfads:用于分析神经科学数据的顺序变分自动编码器。
lm_1b:十亿字基准的语言建模。
lm_commonsense:使用语言模型的常识推理。
maskgan:使用GAN生成文本。
namignizer:识别并生成名称。
neural_gpu:高度并行的神经计算机。
neural_programmer:用逻辑和数学运算增强的神经网络。
next_frame_prediction:通过交叉卷积网络的概率未来帧合成。
object_detection:在单个图像中本地化和识别多个对象。
pcl_rl:几种强化学习算法的代码,包括路径一致性学习。
ptn:用于3D对象重建的透视变换器网。
marco:自动化结晶实验的评估。
qa_kg:用于知识图上问答的模块网络。
real_nvp:使用实值非体积保持(真实NVP)变换的密度估计。
螺纹钢:离散潜变量模型的低方差,无偏梯度估计。
resnet:深度和广泛的剩余网络。
seq2species:读取级分类学分类的深度学习解决方案。
skip_thoughts:递归神经网络句子到矢量编码器。
slim:TF-Slim中的图像分类模型。
street:使用Deep RNN从图像中识别街道的名称(在法国)。
swivel:用于生成单词嵌入的Swivel算法。
syntaxnet:自然语言语法的神经模型。
tcn:从多视图视频学习的自我监督表示。
文本:用于文本摘要的注意模型的序列到序列。
变换器:空间变换器网络,它允许对网络内的数据进行空间操纵。
vid2depth:从单眼原始视频无监督的学习深度和自我运动。
video_prediction:用神经平流预测未来的视频帧。

我们可以删除其他API,只保留下object detection 以及slim

2.VOC2012数据集:
OC2012数据集分为20类,包括背景为21类,分别如下:

  • Person: person
  • Animal: bird, cat, cow, dog, horse, sheep
  • Vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train
  • Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor
    下载完成后,可以看到文件夹如下:
    在这里插入图片描述
    其中在图像物体识别上着重需要了解的是Annotations、ImageSets和JPEGImages。
    Annotations:所有图片的.xml文件
    ImageSets:test.txt,val.txt,val.txt.train.txt等文件
    JPEGImages:图片

二.将自己的数据集改为VOC2012形式

将经过翻转、变形、高斯噪声强化后的数据集改为VOC2012的形式:

1.首先编写产生pascal_label_map.pbtxt文件的python代码:

在这里插入图片描述
其中可以改变种类数目。最后文件生成如下:

2.改写create_pascal_tf_record.py函数

如果自己的.xml文件和VOC2012y一模一样可以不用改写,特别注意的是.xml文件的坐标:
以VOC2012的官方数据集为例子:
在这里插入图片描述
其中注意的是边界框起名为 ,坐标是左上角以及右下角。对于国内的某些不规整的数据集,可能命名为,等,而在坐标的命名上,可能是用的左上角以及长和宽。都需要对create_pascal_tf_record.py函数进行修改。

3.产生tf_record文件:

在这之前,我们如果建立的文夹都在object_detection下面,需要输出环境变量:
比如我的输出环境格式为:

export PYTHONPATH=$PYTHONPATH:home/admin/research/:home/admin/research/slim

生成record文件:

thon create_pascal_tf_record.py --data_dir voc/VOCdevkit --year=VOC2012 --set=train --output_path=voc/pascal_train.record

python create_pascal_tf_record.py --data_dir voc/VOCdevkit --year=VOC2012 --set=val --output_path=voc/pascal_val.record

4.训练模型

Object Detection API是依赖一种特殊的设置文件进行训练的。在object_detection/samples/configs文件夹下,有一些设置文件的示例。可以参考faster_rcnn_inception_resnet_v2_atrous_coco.config文件创建的设置文件。先将faster_rcnn_inception_resnet_v2_atrous_coco.config复制一份到voc文件夹下,命名为faster_rcnn_inception_resnet_v2_atrous_voc.config。
faster_rcnn_inception_resnet_v2_atrous_voc.config文件有7处需要修改:

第一处为num_classes,需要将它修改为VOC2012 中物体类别数,即你的物体类别数目
第二处为eval_config中的num_examples,它表示在验证阶段需要执行的图片数量,修改为你的验证集的图片数
还有5处为所有含PATH_TO_BE_CONFIGURED的地方。这些地方需要修改为自己的目录,他们应该分别被修改为:

gradient_clipping_by_norm: 10.0
  fine_tune_checkpoint: "./faster_rcnn_inception_resnet_v2_atrous_coco_2018_01_28/model.ckpt"
  from_detection_checkpoint: true
  # Note: The below line limits the training process to 200K steps, which we
  # empirically found to be sufficient enough to train the pets dataset. This
  # effectively bypasses the learning rate schedule (the learning rate will
  # never decay). Remove the below line to train indefinitely.
  num_steps: 200000
  data_augmentation_options {
    random_horizontal_flip {
    }
  }
}


train_input_reader: {
  tf_record_input_reader {
    input_path: "./pascal_train.record"
  }
  label_map_path: "./pascal_label_map.pbtxt"
}

eval_config: {
  num_examples: 8000
  # Note: The below line limits the evaluation process to 10 evaluations.
  # Remove the below line to evaluate indefinitely.
  max_evals: 10
}

eval_input_reader: {
  tf_record_input_reader {
    input_path: "./pascal_val.record"
  }
  label_map_path: "./pascal_label_map.pbtxt"
  shuffle: false
  num_readers: 1
}

然后新建一个文件夹train_dir作为保存模型和日志的目录。
在你的文件目录下就可以开始训练了:

python train.py --train_dir ./ --pipeline_config_path ./faster_rcnn_inception_resnet_v2_atrous_voc.config

后续将对这个文章进行优化修改,还会贴出自己写的create_pascal_tf_record.py

猜你喜欢

转载自blog.csdn.net/weixin_42749767/article/details/82986650