欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用tensorflow object_detection API完成目标检测

程序员文章站 2024-03-14 08:43:28
...

硬件环境

操作系统:ubuntu16.04LTS
显卡:GTX1080Ti 10G显存 内存32G
代码托管在码云,因为github实在是太慢了,老是timeout,*也不行,搞了半天搞不定,突然看到中国有码云这个神器,以后就用码云来放代码了。

环境配置:

基于miniconda创建的python2.7环境
自己写一些脚本是用python3.6,训练环境是用python2.7,不过统一用python3.6的问题也不大
tensorflow 中object_detection环境配置
Tip
(1)在linux下按官方要求配置行云流水,在windows下比较麻烦些,搞深度学习建议放弃windows,使用ubuntu会少走很多坑。
(2)有GPU就装GPU版本tensorflow,没有GPU装CPU,不能同时装两个版本
(3)tensorflow models需要另外下载
(4)建议将如下代码改成在系统环境变量中添加,否则每次终端运行都需要加环境变量。

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

数据准备

使用LabelImg对图片进行标注,标注的格式需要选择pascal voc
快捷键:
W:标注 A:上一张 D:下一张 软件右上方选择默认标注的标签。
生成的xml文件分成两个文件夹train_xml和test_xml,一个用来训练,一个用来验证,注意是验证不是测试!验证是拿来计算损失的

下面的所有需要更改的对着源码使用

标签
mscoco_label_map.pbtxt
该文件可以在tensorlfow models里搜索的,这个名字和路径以及序号之后会用到,我只需要检测一个目标,所以内容如下图所示,(一个item代表一个目标,使用的vscode编辑的,id必须从1开始,因为没有目标也算其中一种检测结果)

item {
  id: 1
  name: "barcode"
}

ubuntu就用vim吧,windows的不建议用记事本,之前用记事本喷到一个坑,而且很多时候使用记事本打开文件后再保存会导致该文件不可用。
生成数据
xml_to_tfrecode.py
tensorflow需要使用的是tfrecode格式数据,但是官方的函数是先转成csv,然后转成tfrecode格式,实在是太麻烦,而且最烦的就是运行python还要加这么多参数,所以改了下代码一步到位,根据自己的路径自己更改下代码直接运行。
配置位置:

train_xml_path = './trainxmls'
test_xml_path = './testxmls'
#outputPath是那个目录名
outputPath = './data'
image_path = './images'
train_csv_path=os.path.join(outputPath, 'train.csv')
test_csv_path=os.path.join(outputPath, 'test.csv')
#train_recode_path和test_recode默认为放在同一个文件目录下
train_recode_path=os.path.join(outputPath, 'train.record')
test_recode_path=os.path.join(outputPath, 'test.record')
# TO-DO replace this with label map
def class_text_to_int(row_label):
    if row_label == 'barcode':
        return 1
    else:
        None
序号按照之前标签规定的来写

配置

faster_rcnn_inception_v2_coco.config中,需要更改的地方主要有:

num_classes: 2
batch_size: 16
num_steps: 50000
fine_tune_checkpoint: "models/model.ckpt"
input_path: "data/train.record"
label_map_path: "data/mscoco_label_map.pbtxt"
下面这个是在验证集的配置中
input_path: "data/test.record"
label_map_path: "data/mscoco_label_map.pbtxt"

训练

在train.py中进行训练,详见

'''
modify these configs to run the train.py
python train.py --logtostderr
'''
FLAGS.pipeline_config_path='faster_rcnn_inception_v2_coco.config'
FLAGS.train_dir='models/train'

导出模型

使用export_inference_graph.py导出模型,需要配置的地方如下:

'''
trange the config for your project and run the script
python export_inference_graph.py --input_type image_tensor
'''
FLAGS = flags.FLAGS
FLAGS.pipeline_config_path='./faster_rcnn_inception_v2_coco.config' 
FLAGS.trained_checkpoint_prefix='./models/train/model.ckpt-30000'
FLAGS.output_directory='./fine_tuned_model' 

模型测试

运行testModel.py,需要配置的属性:

PATH_TO_CKPT = './fine_tuned_model/frozen_inference_graph.pb'
PATH_TO_LABELS='data/mscoco_label_map.pbtxt'
PATH_TO_TEST_IMAGES_DIR = 'test'
PATH_TO_SAVE_IMAGES_DIR = 'result'
NUM_CLASSES = 2

测试结果
使用tensorflow object_detection API完成目标检测
tensorlow object detection 目标检测系列一些资料
使用TensorFlow Object Detection API进行物体检测
使用tensorflow object detection api训练自己的数据
tensorflow训练模型库
国外论坛教你一步一步训练自己的模型
利用TF_Object_detection_API 训练自己的模型
目标检测笔记二:Object Detection API 小白实践指南
深度学习入门篇–手把手教你用 TensorFlow 训练模型
Tensorflow训练自己的Object Detection模型并进行目标检测
TensorFlow使用object detection训练并识别自己的模型
如何在Windows下使用Tensorflow Object Detection API
老外的教程

重量级推荐

目标检测系列大杂烩!