基于CNN模型的目标检测系统设计与实现

2020-08-31 05:42王婷婷程鸿芳
机电信息 2020年20期
关键词:目标检测

王婷婷 程鸿芳

摘要:目前主流的基于CNN的目标检测算法大致分为两大类:一类是2-stage检测算法,把检测问题分为两个阶段,首先生成候选区域,然后再对候选区域进行分类,这类算法的典型代表是基于region proposal的R-CNN系列算法,如R-CNN、Fast R-CNN、Faster R-CNN等;另一类是1-stage检测算法,对图像中的每一个部分都会进行预测,而且还可以直接生成对象的类别概率以及其位置坐标值,不需要region proposal阶段,也就是不需要生成候选区域,比较典型的算法有YOLO和SSD。在此基础上,設计并实现了一个基于CNN模型的目标检测系统,其开发环境为Windows10,使用了Tensorflow的深度学习框架,利用PyQt5作为界面的开发框架,底层使用Python语言。

关键词:目标检测;CNN模型;Tensorflow;Python

0 引言

CNN(Convolutional Neural Network)是一种前馈神经网络,其本质是一个多层感知机,它最开始并不是由计算机专业的学者提出来的,而是由一个生物学家在研究视觉皮层的时候提出。CNN人工神经元可以响应一部分覆盖范围内的周围单元,包括卷积层(convolutional layer)和池化层(pooling layer),其基本结构如图1所示。

CNN采用局部连接和权值共享的方式,减少了权值数量,使网络易于优化,降低了模型的复杂度,减小了过拟合的风险,在处理二维图像的问题上,特别是在识别位移、缩放及其他形式扭曲不变形的应用上,具有良好的鲁棒性和运算效率,在大型图像处理方面也有着出色表现,是深度学习算法应用最成功的领域之一。

1 系统环境配置

GPU版本为:

(1)系统:Linux;

(2)处理器:GPU RTX 2080Ti;

(3)已安装的内存(RAM):16 GB+16 GB;

(4)固态硬盘:1 TB;

(5)系统类型:64位操作系统,基于x64的处理器。

本目标检测系统的开发环境为Windows 10+Tensorflow 1.13.1+Python 3.5.4,利用PyQt5作为界面的开发框架,底层使用了Python语言,主要实现Faster R-CNN、YOLO和SSD 3个算法的目标检测。

2 系统设计与实现

系统大致分为3个部分:

(1)模型训练模块:该模块负责使用Faster R-CNN、YOLO和SSD 3个算法进行网络模型的训练,生成训练得到的最终模型;

(2)模型检测模块:检测模块是整个检测系统的核心模块,使用训练好的模型进行加载,验证模型的准确度,然后使用编写好的API实现前向检测;

(3)结果显示模块:该模块提供了一个交互式平台,用于输出最后检测对象的类别以及位置信息的判断结果。

2.1    模型训练模块

系统在做目标检测时,需要有训练集、验证集以及测试集。首先,使用VOC2007数据集,VOC2007数据集文件夹如图2所示。JPEGImages:所有的样本图片,图片格式必须是jpg、jpeg格式,VOC数据集格式采用6位数字编码,所以图片的标号为000001.jpg、000002.jpg等。Annotations:人工设置的图像标注,为xml格式文件。ImageSets:数据集文件夹,包含文本文件,存放训练样本和测试样本的索引信息。

然后,下载VGG16的预训练模型,放在相应的路径中,所有的文件就是Faster R-CNN程序,Faster R-CNN程序主要文件夹如图3所示。

data:存放数据图片,下载的VOC2007数据集和VGG16预训练模型都存放在这里。

default:存放自己训练好的模型。

lib:存放Python的接口文件,如数据读入等。

train.py:训练的Python文件。

demo.py:测试的Python文件。

图4是两张测试原图。

在Linux系统GPU版本的Tensorflow下运行,把最大迭代次数改为40 000,在GPU下运行7~8 h完成模型训练,最后得到的训练模型文件如图5所示。

最后得到的测试结果如图6所示。

图6(a)中得到了目标person和potted plant,图6(b)中分别检测到了car、dog、horse以及person,但是图片中被框出来的部分不在一张图片上显示,而是按照类别进行划分,即每一类一张图片,此时,需要修改plt的位置,把plt从vis_detections中放到demo中,这样所有类别都会在同一个plt中,修改后的结果如图7所示。

本目标检测系统中还有2个算法是YOLO和SSD,YOLO训练使用的是VOC2007数据集和预训练好的模型yolo-small.ckpt,其中因为yolo-small.ckpt预训练好了,可以直接拿来测试,得到的结果如图8所示。

YOLO训练的迭代次数也同样可以在config.py里面修改,在训练过程中,YOLO是对变量通过采用指数平均数EMA(exponential moving average)来提高整体训练性能,同时,为了获得较好的学习性能,对学习速率同样进行了指数衰减,使用exponential_decay函数来实现此功能。本系统所使用的YOLO算法不太精确,通过测试结果能够明显感受到YOLO的精确度不如Faster R-CNN算法,尤其是图6(a)这种复杂的图,YOLO能够检测到的目标很少。

SSD的训练使用的是VOC2007数据集和预训练好的模型ssd_300_vgg.ckpt,其中,直接用ssd_300_vgg.ckpt测试,得到的结果如图9所示。

测试结果中对象的类别用数字表示,这对于使用者来说很不直观,在研究了SSD算法中可视化部分visualization.py程序后发现,原始代码检测后的图像分类是数字号,不能够直接读取,然后对代码进行了修改,主要是对list的读取,然后再按照数字查找key值并显示,修改后得到的结果如图10所示。

2.2    檢测模块

为了验证训练出的模型的准确率,使用测试数据集对其进行测试,输出测试结果的可视化部分,检测模块流程如图11所示。

在最后的结果可视化这一步操作中,3个算法主要都是利用了Matplotlib和OpenCV来实现的。Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,通过Matplotlib,开发者可以仅需要几行代码便可生成绘图,Matplotlib使用NumPy进行数组运算,并调用一系列其他的Python库来实现硬件交互。OpenCV是一个包含了2 500多个经过优化的计算机视觉和机器学习算法的开源计算机视觉库,基于C/C++语言,支持Linux/Windows/MacOS/Android/iOS,并提供了Python、Matlab和Java等语言的接口,和Python一样,当前的OpenCV也有2个大版本,即OpenCV2和OpenCV3。

2.3    系统实现

本目标检测系统的界面基于PyQt5,利用QtDesigner来进行开发,底层通过Pycharm来调用Tensorflow环境,集成了加载检测模型、目标图像读取、可视化检测结果这些模块。首先,配置pycharm来实现在pycharm里面打开QtDesigner,生成Qt文件,通过PyUIC来完成Qt界面到Python代码的转换,然后,将3种目标检测算法的文件夹导入到界面文件夹中,如图12所示。

界面的主要类别放在了main.py文件中,start.py文件用来运行界面,在3个子窗口文件中存放了目标检测算法的主要调用函数,主窗口类别为class Ui_MainWindow(object),子窗口类别为class childWindow1(QDialog)、class childWindow2(QDialog)、class childWindow3(QDialog),通过主窗口跳转到子窗口来进行测试:

3 结语

CNN凭借其强大的特征提取能力,近年来被广泛应用于计算机视觉领域,而目标检测作为计算机视觉领域中的一个重要研究方向,是完成图像语义识别、目标跟踪、图像描述等高级复杂的视觉任务的基础,通过对CNN和目标检测的研究,发现基于深度学习的目标检测算法已是主流趋势。在目标检测领域,还有很多未知知识值得我们去探索,相信随着深度学习技术的不断进步,人工智能在计算机视觉领域的应用将会获得进一步发展。

[参考文献]

[1] REN S Q,HE K M,GIRSHICK R,et al.Faster R-CNN:Towards real-time object detection with region proposal networks[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2017,39(6):1137-1149.

[2] CHENG G,HAN J,ZHOU P,et al.Learning rotation-invariant and fisher discriminative convolutional neural networks for object detection[J].IEEE Transactions on  Image Processing,2019,28(1):265-278.

[3] 沈鹏.基于图像的草地退化识别研究[D].成都:电子科技大学,2019.

[4] 包桦楠,秦建波,唐曼玲,等.基于浅层神经网络的电视台标识别算法的研究[J].智能建筑,2018(8):33-36.

[5] 邓志锋,闵卫东,邹松.一种基于CNN和人体椭圆轮廓运动特征的摔倒检测方法[J].图学学报,2018,39(6):1042-1047.

[6] 朱林.基于深度学习的苏南乡村建筑物提取及年代分类研究[D].徐州:中国矿业大学,2019.

[7] 曹湘,李誉坤,钱叶,等.基于混合神经网络的电力短文本分类方法研究[J].计算机与数字工程,2019,47(5):1145-1150.

[8] 方春,孙福振,任崇广.基于深度学习的大蒜鳞芽朝向识别研究[J].计算机应用研究,2018,36(2):598-600.

[9] 张少巍,倪绍洲.基于混合神经网络的人脸表情识别研究[J].长春大学学报,2019,29(2):37-40.

[10] 师利霞.基于python的气象统计数据的等值线应用[J].信息技术与信息化,2019(5):95-97.

收稿日期:2020-07-08

作者简介:王婷婷(1982—),女,江苏赣榆人,硕士,讲师,主要从事计算机软件、大数据方面的教学与研究工作。

猜你喜欢
目标检测
视频中目标检测算法研究
行为识别中的人体运动目标检测方法
移动机器人图像目标识别
基于背景建模法的运动目标检测
基于P3电位的目标检测研究
一种改进的峰均功率比判源方法