基于TensorFlow目标检测算法SSD来定位圆形指针式仪表表盘

圆形指针式仪表自动识别 —— 圆形表盘定位

目的:检测出圆形表盘边框的所在矩形区域,排除无关背景干扰,提升后续算法计算速度和识别精度。如下:
基于TensorFlow目标检测算法SSD来定位圆形指针式仪表表盘_第1张图片

SSD目标检测算法:
采用基于深度学习的目标检测算法SSD(single shot multibox detector),相比Faster RCNN 有明显的速度优势,相比YOLO又有明显的mAP优势(不过已经被CVPR 2017的YOLO9000超越)。

参考TensorFlow官方开源的目标检测代码:
https://github.com/tensorflow/models/tree/master/research/object_detection/
相关论文:
《SSD: Single Shot MultiBox Detector》

1、仪表表盘目标检测数据集准备。
(1)数据标记
目标检测标注工具LabelImg,这是一个可以直接在图片上做注释框自动生成标记信息的软件,注释信息将被保存为PASCAL VOC 格式的XML文件,安装及使用参考:
https://github.com/tzutalin/labelImg

注:用annotations文件夹存储xml文件,images文件夹存储所有的训练和测试图像数据,images图像均为RGB三通道。

(2)数据描述格式
TensorFlow 物体检测API中使用TFRecord格式对图像标记信息进行描述。
格式转换参考代码:
https://github.com/datitran/raccoon_dataset

a) 执行python3 xml_to_csv.py,该文件将在根目录的annotations的文件夹下所有的*xml文件,并生成gauge_labels.csv文件;
b) 执行 python3 split_labels.py 随机生成训练和测试数据。
train_labels.csv test_labels.csv
c) 执行脚本generate_tfrecord.py 将训练和测试数据转换为TFRecord.
train.record test.record

2、模型配置/训练/迁移学习
(1)下载预训练好的模型
选择了体积最小,速度最快的用于嵌入式设备的SSD模型: ssd_mobilenet_v1_coco_2017_11_17
下载地址:
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

解压模型压缩包,创建文件夹data,存储如下文件:
object_detection/data/
– gauge_label_map.pbtxt
– ssd_mobilenet_v1_gauge.config

(2)分类标签 Label Map
其中,gauge_label_map.pbtxt 是 模型所有分类的标签,如下所示,如果有多个分类id 从1开始递增,同时给每个标签一个唯一的名称(id 为 0 预留给背景分类)
item {
id: 1
name: ‘gauge’
}
item {
id: 2
name: ‘其他分类’
}
(3)配置物体识别训练流程文件
更多内容参考:
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/configuring_jobs.md
TensorFlow Object Detection API 使用protobuf 文件来配置训练和检测的流程,如下。
配置文件: ssd_mobilenet_v1_gauge.config
一个配置文件由5部分组成:
model {
//模型参数,如模型类型,目标检测类别数等。
}
train_config: {
// 训练模型的参数,如batch size、优化算法、学习率等
}
train_input_reader: {
// 训练record 文件, 标签映射文件
}
eval_config: {
}
eval_input_reader: {
//测试record文件, 标签映射文件
}

3、训练
1、 TensorFlow Object Detection API 安装
(1)TensorFlow Object Detection API 安装,即下载源码,终端运行:
git clone https://github.com/tensorflow/models.git
(2)配置基本环境
CPU环境,运行:
pip install tensorflow
GPU环境,运行:
pip install tensorflow-gpu
sudo apt-get install protobuf-compiler python-pil python-lxml python-tk
pip install --user Cython
pip install --user contextlib2
pip install --user jupyter
pip install --user matplotlib

注意:
TensorFlow 需1.9版本及以上,可能需要升级cuda 和cudnn ,
参考博客:
https://blog.csdn.net/wanzhen4330/article/details/81704474#1.cuda%E7%9A%84%E5%8D%87%E7%BA%A7

protobuf 用pip3安装默认2.6版本,需手动安装3.7版本。

COCO API 安装:
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
cp -r pycocotools /models/research/

COCO API 安装需要将Makefile文件中python 改为python3 。

(3)Protobuf编译
Tensorflow通过Google的Protobufs来配置和训练模型,所以在开始使用之前需要对protobuf相关库进行编译。将object_detection/protos/目录下的.proto文件编译生成.py文件。
##From tensorflow/models/research/
protoc object_detection/protos/*.proto --python_out=.

在路径models/research/ 下添加PYTHONPATH路径,实现全局引用。
##From tensorflow/models/research/
export PYTHONPATH=$PYTHONPATH:pwd:pwd/slim

也可以 gedit ~/.bashrc 文件。
(4)测试安装是否成功。
##From tensorflow/models/research/
python object_detection/builders/model_builder_test.py

2、启动训练过程
(1)将在数据准备和模型配置阶段的文件复制到models/research/object_detection 文件夹,包括data/文件夹,image/文件夹,ssd_mobilebet_v1_coco_2017_11_17原始模型文件夹。
(2)执行如下代码启动训练过程:
##From the tensorflow/models/research/ directory

PIPELINE_CONFIG_PATH=XX/data/ssd_mobilenet_v1_gauge.config
MODEL_DIR=XX/
NUM_TRAIN_STEPS=50000
SAMPLE_1_OF_N_EVAL_EXAMPLES=1

python3 object_detection/model_main.py \
    --pipeline_config_path=${PIPELINE_CONFIG_PATH} \
    --model_dir=${MODEL_DIR} \
    --num_train_steps=${NUM_TRAIN_STEPS} \
    --sample_1_of_n_eval_examples=$SAMPLE_1_OF_N_EVAL_EXAMPLES \
    --alsologtostderr

(3)使用TensorBoard 跟踪训练过程
tensorboard --logdir XX/

(4)导出模型
执行以下命令:
#从checkpoints中提取模型 # From tensorflow/models/research/

INPUT_TYPE=image_tensor
PIPELINE_CONFIG_PATH=XX/data/ssd_mobilenet_v1_gauge.config
TRAINED_CKPT_PREFIX=XX/
EXPORT_DIR=XX/
python3 object_detection/export_inference_graph.py \
    --input_type=${INPUT_TYPE} \
    --pipeline_config_path=${PIPELINE_CONFIG_PATH} \
    --trained_checkpoint_prefix=${TRAINED_CKPT_PREFIX} \
    --output_directory=${EXPORT_DIR}

(5)测试
object_detection/object_detection_tutorial.py

你可能感兴趣的:(计算机视觉,Python)