ssd实现目标检测,ssd目标检测方法

  ssd实现目标检测,ssd目标检测方法

  目标检测是人工智能的一个重要应用。通过目标检测模型,可以检测到图像中的人、动物、汽车、飞机等目标物体,甚至可以画出物体的轮廓,如下图。是不是很酷,呵呵?

  在训练自己的目标检测模型之前,建议先了解一下目标检测模型的原理(见文章:大话目标检测的经典模型RCNN、Fast RCNN、Faster RCNN、Mark R-CNN),以便更清楚地了解模型的训练过程。

  基于SSD算法,本文将介绍如何在AI实战基础环境的基础上,利用我们自己的数据训练目标检测模型(见文章:构建AI基础环境)。SSD,全称单次多盒检测器(Single Shot MultiBox Detector),是刘威在ECCV 2016年提出的一种目标检测算法,是目前主要流行的检测框架之一。

  这种情况下的识别就是识别图像中的熊猫。可爱,呵呵。

  以下过程描述了如何使用您自己的数据来训练目标检测模型:

  

1、安装标注工具

  要用自己的数据来训练模型,首先要对数据进行标记,也就是你要先告诉机器图像中有什么物体,在什么位置,然后你就可以用这些信息来训练模型。

(1)标注数据文件

  目前流行的数据标注文件格式主要有VOC_2007和VOC_2012。这种文本格式来自Pascal VOC标准数据集,是衡量图像分类识别能力的重要基准之一。本文采用VOC_2007数据格式文件,以xml格式存储,如下所示:

  其中重要的信息有:

  Filename:图片的文件名。

  名称:标记对象的名称。

  Xmin,ymin,xmax,ymax:对象位置的左上角和右下角的坐标。

  

(2)安装标注工具

  如果要标注的图片很多,就需要一个帅哥手动计算位置信息,做xml文件,效率太低。

  好在有大神开放了一个数据标注工具labelImg,可以通过可视化界面标注图片框架,自动生成VOC格式的xml文件。这个工具是基于Python语言编写的,所以支持跨平台运行在Windows和Linux上。真的是良心之作。安装方法如下:

a. 下载源代码

  通过访问labelImg的github页面(https://github . com/Tzu talin/labelImg)下载源代码。它可以被git克隆,或者作为zip文件直接下载。

  在这种情况下,直接以zip文件的形式下载。

b.安装编译

  解压labelImg的zip文件,得到LabelImg-master文件夹。

  标签的接口是用PyQt写的。因为我们构建的基本环境使用了最新版本的anaconda,所以它已经附带了PyQt5。在python3的环境下,只需要重新安装lxml,进入labelImg-master目录进行编译即可。代码如下:

  #激活虚拟环境源激活tensorflow#在python3环境下安装pyqt 5(anaconda自带),如果在python2环境下,安装PyQt4。PyQt4的安装方法如下# conda install-c anaconda pyqt=4 . 11 . 4 # install XML conda install XML # compile make qt5py 3 #打开标注工具python3 labelImg.py成功打开标注工具的界面如下:

  

2、标注数据

  成功安装标注工具后,就该标注数据了。

(1)创建文件夹

  根据VOC数据集的要求,创建以下文件夹

  注释:用于存储带注释的xml文件。

  ImageSets/Main:用于存储训练集、测试集和验收集的文件列表。

  JPEG:用于存储原始JPEG图像

  

(2)标注数据

  将熊猫图片放入JPEGImages文件夹中(熊猫的美照请向度娘索取~),注意图片的格式必须是jpg格式。

  打开labelImg标注工具,然后点击左侧工具栏中的“打开目录”按钮,选择刚才放熊猫的JPEGImages文件夹。这时主界面会自动加载第一张熊猫照片。

  单击左侧工具栏中的“创建矩形框”按钮,然后在主界面上单击并拖动一个矩形框来圈出熊猫。被圈出后会弹出一个对话框,用来输入被标记物体的名称,熊猫作为熊猫的名字。

  然后点击左侧工具栏中的“保存”按钮,选择刚刚创建的标注作为保存目录,系统会将自动生成的xml文件保存为voc_2007格式。这就完成了一张熊猫照片的物体标注。

  接下来,点击左侧工具栏中的“下一张图片”进入下一张图片。按照上面的步骤,装帧,输入名字,保存,以此类推,直到所有的照片都被标记并保存。

  

(3)划分训练集、测试集、验证集

  对所有熊猫照片进行标注后,数据集要分为训练集、测试集和验证集。

  在github上下载一个自动分区脚本(https://github.com/eddygao/make _ VOC 2007/blob/master/make _ main _ txt . py)

  然后执行下面的代码

  Python make_main_txt.py会根据脚本中设置的比例自动拆分训练集、测试集和验证集,并将对应的文件名列表保存为快乐小馒头。

  

3、配置SSD

(1)下载SSD代码

  由于这个案例是基于tensorflow,所以在github上下载一个基于tensorflow的SSD,地址是https://github.com/balancap/SSD-Tensorflow.

  下载成zip文件,然后解压得到SSD-Tensorflow-master文件夹

(2)转换文件格式

  voc_2007格式的文件被转换为tfrecord格式。tfrecord数据文件tensorflow是一个统一存储影像数据和标签的二进制文件,在tensorflow中可以更快速的复制、移动、读取和存储。

  SSD-Tensorflow-master提供了格式转换的脚本。转换代码如下:

  DATASET_DIR=。/panda_voc2007/OUTPUT_DIR=。/panda _ TF record/python SSD-tensor flow-master/TF _ convert _ data . py-DATASET _ name=pascalvoc-DATASET _ DIR=$ { DATASET _ DIR }-OUTPUT _ name=VOC _ 2007 _ train-OUTPUT _ DIR=$ { OUTPUT _ DIR }

(3)修改物体类别

  由于是我们自定义的对象,要修改SSD-Tensorflow-master中对象类别的定义,打开文件SSD-tensor flow-Master/Datasets/Pascal VOC _ common . py,进行修改。删除VOC_LABELS中所有其他不相关的类别,添加熊猫的名称、ID和类别,如下:

  VOC_LABELS={ none: (0,背景),熊猫:(1,动物),}

4、下载预训练模型

  SSD-Tensorflow提供了一个预先训练好的模型,该模型基于VGG模型(VGG模型详情请阅读文章:大话经典CNN经典模型VGG),如下表所示:

  但是,这些预训练模型文件都存储在drive.google.com上,所以不能直接下载。只能用“你懂的”方式下载。在这里下载SSD-300 VGG基础预训练模型,获取文件:VGG _ VOC 0712 _ SSD _ 300 x300 _ FT _ ITER _ 120000 . ckpt . zip,然后解压。

  

5、训练模型

  最后准备好了标注文件和SSD模型,现在准备开始训练。

  在训练模型之前,有一个参数需要修改。打开SSD-tensor flow-master/train _ SSD _ network . py,在里面找到DATA_FORMAT参数项。对于cpu训练,该值为NHWC,对于gpu训练,该值为NCHW,如下所示:

  data _ format= nchw # GPU # data _ format= nhwc # CPU现在终于可以开始训练了。打开终端,切换康达虚拟环境。

  激活tensorflow然后执行以下命令开始训练。

  #使用预先训练好的vgg_ssd_300模型dataset _ dir=。/panda _ tfrecordtrain _ dir=。/panda _ model检查点_路径=。/model _ pre _ TRAIN/VGG _ VOC 0712 _ SSD _ 300 x300 _ ft _ ITER _ 120000 . ckpt/VGG _ VOC 0712 _ SSD _ 300 x300 _ ft _ ITER _ 120000 . ckpt python 3 SSD-tensor flow-master/TRAIN _ SSD _ network . py -TRAIN _ DIR=$ { TRAIN _ DIR } -DATASET _ DIR=$ { DATASET _ DIR } -DATASET _ name=pascalvoc _ 2007数值越大,批量加工量越大,对机器性能的要求越高。如果电脑性能一般,可以设置为8甚至4。请忽略害羞的康乃馨。

  学习率learning_rate也可以根据实际情况进行调整。学习率越低越准确,训练时间越长。学习率越高,训练时间越短,但准确率越低。

  在这里,使用预先训练好的模型,SSD会锁定VGG模型的一些参数进行训练,这样就可以在短时间内完成训练。

  

6、使用模型

  SSD模型已经训练好了,现在要用了。使用方式也很简单。

  SSD-Tensorflow-master自带笔记本脚本,可以通过jupyter直接使用模型。

  先安装jupyter,安装方法如下:

  然后,一个condinstall jupyter用以下代码启动jupyter-notebook:

  juter-notebook SSD-tensor flow-master/notebooks/SSD _ notebook . ipynb启动后,在SSD 300模型的代码块中设置模型的路径和名称。

  然后,在最后一个代码块中,设置要测试的图像路径。

  然后点击菜单“单元格”和子菜单“全部运行”,依次执行所有代码并显示结果。

  行刑后,可爱的熊猫被圈了起来。

  经过以上步骤,我们利用自己的数据完成了目标检测模型的训练。只要以后还有物体检测的需求,然后找到相关的图片集进行标注,标注后再进行模型训练,就可以完成一个定制的目标检测模型,非常方便。希望这个案例能对大家有所帮助。

ssd实现目标检测,ssd目标检测方法