基于YOLO目标分割的船舶识别算法研究
2019-04-14徐小茹
徐小茹
(江苏财经职业技术学院 人文艺术与法律学院,江苏 淮安 223003)
我国是一个水域众多的国家,水上交通一直具有比较重要的战略意义。随着技术的发展,陆上交通在车牌识别、检测车辆方面有了很大的发展,但是由于水上环境比较复杂,水上场景的图像质量不是很好,并且没有像车牌一样的检索系统,所以水上交通的发展速度一直不是很快。本文针对水上场景的复杂性,提出了一种可以快速准确检索水上船舶的方法,利用深度学习You Only Look Once(YOLO)框架可以准确找出水面船舶,提高图像质量,同时利用提取Scale-invariant feature transform(SIFT)特征,可以使船舶特征具有稳定不变性,最后对所有图像特征进行Density-Based Spatial Clustering of Applications with Noise(DBSCAN)融合K-means聚类方法进行特征降维,消除维度灾难,达到实时准确的目标。
在传统的船舶分割过程中,通常使用阈值分割法、基于边缘检测法、基于区域的分割三种方法。虽然传统的图像分割算法已经取得了一定的成果,但是无论是在算法准确度还是在运行时间上,传统的船舶分割算法很难满足实时性和准确性的要求,所以我们这里决定采用最新的神经网络来对船舶图像进行分割。近年来卷积神经网络发展迅速,以以往的图像分类为基础,在目标检测领域进行研究,并取得了突破性进展,而Redmon提出的YOLOV2,进一步提升了MAP和检测速率。因此本文在YOLOV2的基础上,结合自身船舶数据及资料,来达到快速高效分割提取船舶的目的。
1 船舶目标分割及识别
1.1 船舶目标分割
为了更加快速准确匹配地检索到船舶目标,减少背景信息的干扰以及提升检索的速度,首先得把船舶目标从背景中分离出来,本文使用深度学习中的YOLO框架,并且重新调整训练了整个网络结构。船舶分割识别流程如下页图1所示,网络结构如下页图2所示。
图1 船舶分割识别流程 图2 YOLO网络框架结构
因为船舶图像是二维的离散信号,需要对船舶图像进行卷积操作,通过卷积核在船舶图像上滑动,把船舶图像点上的像素灰度值和卷积核上的数值相乘,之后将所有相乘后的数值相加,把相加的结果作为卷积核中间像素对应的船舶图像上像素的灰度值,最后滑动完所有船舶图像。
(1)
其中x[m,n]为输入矩阵,h[m,n]为卷积核,y[m,n]为输出矩阵。卷积获得特征之后,下一步要用这些特征进行分类,理论上可以将所有的特征做成一个分类器,但计算量会特别大,并且很容易出现过拟合。因此描述大的船舶图像的一个方法就是聚合不同位置的特征进行统计,就是池化。
在得到卷积特征后,我们要先确定池化区域的大小(假定为m*n),来对船舶图像的卷积特征进行池化。我们将得到的卷积特征划分到多个大小为m*n的不相交区域上,之后用这些区域的最大特征来获取池化之后的卷积特征。
激活函数对于网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。其主要目的是将模型中一个节点的输入信号转换成一个输出信号。该输出信号现在被用作堆叠中下一个层的输入。YOLOV2使用的是logistic激活函数。logistic函数公式形式如下:
(2)
其中x0表示函数曲线的中心,K是曲线的坡度,L是曲线的最大值。
YOLOv2首先对darknet网络进行fine tune,将图像分辨率改成448*448,并且在ImageNet数据集上进行10轮训练,然后,对检测网络部分也进行fine tune。移除全连接层使用anchor boxes取预测bounding boxes,将最后的池化层去掉,使输出的卷积特征图分辨率更高。将网络结构缩减,使输入图片的分辨率为416*416,并确保后面产生的卷积特征图宽和高都是奇数,这样就产生出一个center cell。使用卷积层降采样,使得输入卷积网络的416*416图片最终得到13*13的卷积特征图,最后由anchor box同时预测类别和坐标。
因为YOLO是由每个cell来负责预测类别,每个cell对应的2个bounding box负责预测坐标,在YOLOv2中,不再绑定类别的预测和每个cell,而将其全部都放到anchor box中。
最后根据网络检测预测的坐标将所需要的船舶图片从原图片中分割提出来,作为下一步特征匹配的数据。
1.2 SIFT特征提取
首先根据得到的船舶图像建立船舶的尺度空间[1],搜索船舶尺度的每一层空间,寻找每层的局部极值点当作候选特征点,去除边缘不稳定的候选特征点以及对比度低的局部极值,之后通过统计梯度确定候选特征点的主方向,生成关键点特征描述子。
船舶提取SIFT特征的主要步骤为:
1.2.1 尺度空间极值点检测
船舶图像的尺度空间可以定义为原图像和高斯函数的卷积结果:
L(x,y,σ)=G(x,y,σ)*I(x,y)
(3)
(4)
其中G(x,y,σ)是高斯函数,I(x,y)是船舶图像,m,n表示高斯模板的维度,σ是尺度空间因子,通过减小σ值可以使图像相应的尺度减小,可以更好展示图像细节。在DOG尺度空间下,进行极值检测,就是计算两个相邻图像尺度的差。
D(x,y,σ)=(G(x,y,kσ)-G(x,y,σ))*I(x,y)
=L(x,y,kσ)-L(x,y,σ)
(5)
式中k为阈值。高斯金字塔通过高斯平滑和降采样得到,尺度空间则由相邻尺度图像相减后形成。在尺度空间内,每一个采样点同周围8个点以及上下层的18个邻域共26个点进行比较,确保局部极值点在图像空间和所形成的尺度空间中都能被检测到。
1.2.2 关键点的精确定位
离散空间的极值点并不是真正的极值点,通过对尺度空间的DoG函数进行曲线拟合,可以提高关键点的稳定性。DoG函数在尺度空间的泰勒展开式(拟合函数)为:
(6)
通过不断插值到关键点位置收敛,最后特征点的精确位置就是之前位置加上拟合的偏移量。
因为DOG算子会造成强烈的边缘响应,这会造成匹配效果不稳定,所以必须剔除这些不稳定的边缘响应点。由于DOG函数的极值点在边缘的垂直方向有较小的主曲率,而边缘切向有较大的主曲率。所以可以使用Hessian矩阵剔除一些边缘响应点[2]。
1.2.3 确定关键点方向
为了提取的特征点在不同角度仍然具有良好的不变性,需要给每一个关键点分配方向。首先根据图像梯的度,找到在局部结构的方向,对于在尺度空间内中检测出的特征点,需要采集其所在尺度空间内3σ邻域窗口内像素的方向和梯度分布。其中梯度的模值和方向由下式可得:
(7)
θ(x,y)=tan-1((L(x,y+1)-L(x,y-1))/L(x+1,y)-L(x-1,y)))
(8)
其中L为特征点所在的尺度空间值。
当计算完关键点的梯度值后,则需要使用直方图来统计邻域内像素的方向和梯度情况。将直方图中最大值作为该关键点的主方向,而方向直方图的峰值代表了该特征点处邻域梯度的方向,所以还需要选取直方图中峰值大于主方向峰值80%的其他一些方向作为该关键点的辅方向,最后通过主方向和辅方向一起确定关键点的方向。
1.2.4 生成特征描述子
SIFT特征点是高斯图像梯度统计后得到的矢量结果。通过对关键点周围邻域像素进行分块统计,得到能够代表图像信息的向量,所以可以准确并且唯一描述船舶图像信息。
生成特征向量方法是:以之前得到的关键点为中心点提取(16*16)像素,在提取到的像素中取(4*4)像素的区域当作种子点,这样一共得到16个,并在每个种子点区域内分别计算八邻域梯度的累加值,随后直方图统计梯度方向。最后可以得到128维的向量,就是特征描述向量。
1.3 特征融合
在上一步生成的SIFT特征点之后,一般是采用特征描述符向量之间的欧式距离度量两个特征点之间的匹配程度。但由于船舶数据库较大而且特征点较多,所以产生了维度灾难,仅仅依靠距离度量不能满足实时性要求,所以这里就要进行特征降维。
因为船舶数量在不断改变,依靠人工很难确定具体的聚类数目,所以决定采用DBSCAN和K-means的方法进行聚类,首先由DBSCAN确定聚类中心的数目,之后通过K-means进行聚类,生成聚类中心。根据得到的聚类中心消除维度灾难。
DBSCAN聚类是基于密度的一种方法,参数MinPts描述了某一样本的距离为ε的邻域中样本个数的阈值。
算法具体原理为:
(1)DBSCAN对需要检查点的固定邻域进行搜索,如果发现q点邻域内点的个数大于阈值MinPts,则以q为核心对象,创建一个新的簇;
(2)之后,DBSCAN不断迭代密度可达的对象,讲起聚集到核心对象内,对于密度可达的核心对象则将其簇进行合并;
(3)当形成的簇达到稳定时,算法则结束。
聚类中心的数目通过DBSCAN确定好之后,就可以用K-means对提取的特征点进行聚类。
K-Means算法是无监督的聚类算法,对于给定的船舶特征点,按照特征向量的距离大小进行划分,将特征向量集划分为K个簇。让簇内的点尽量紧密地连在一起,而让簇间的距离尽量的大。
假设特征向量集T包含m个特征向量,将T中的特征向量分配到K个簇中,分别为C1,C2,…,Ck,使得任意两个簇之间交集为空。为了评价聚类划分的质量,所以就可以定义一个函数:
(9)
E就是数据集中所有对象的误差平方和,p为空间中的点,dist(p,Ci)为p到其划分的聚类中心之间的欧氏距离。所以通过对每个簇中的每个对象,求其对象到其簇中心距离的平方,然后求和,得出的误差平方和E反映出结果簇的紧密情况,通过约束E的大小来划分更好结果的簇。
1.4 船舶识别
得到所有船舶图片特征形成的聚类中心之后,就可以对数据库每一张图片生成BOF特征,将生成的BOF特征形成码本[3]。同时为了使生成的BOF特征更有代表性,可以明确代表船舶图片,这里使用了TF-IDF加权技术[4]。
TF-IDF是一种加权统计方法,常用在文本检索、网页排序等。应用在船舶检索中就是如果一个船舶特征在一张船舶图片中出现次数越多,同时在所有船舶图片中出现次数越少,越能够代表该船舶。
TF指的是一个船舶特征在该船舶图片中出现的次数,通常将其归一化表示。
(10)
H为一张船舶图片包含该特征次数,I为该船舶图片的总特征数
IDF的主要思想是:对于单个特征e,包含特征e的船舶越少,则船舶特征e的IDF值越大,并且说明特征e能够更好表示该船舶。所以IDF表示如下
(11)
X为数据库中所有的船舶数目,Y为包含某特征的船舶数目
最后就可以生成船舶特征的TF-IDF值
TF-IDF=TF×IDF
(12)
将之前的BOF特征与船舶特征的TF-IDF值加权就得到船舶数据库的最终码本。
所以船舶检测的步骤为:
1.生成每张船舶的BOF,具体方法为:判断船舶的每个特征点与哪个类心最近,最近则放入该类心,最后将生成一列频数表,即初步的无权BOF;
2.通过TF-IDF对频数表加上权重,生成最终的BOF;
3.将要查询的船舶图片提取SIFT特征,再通过步骤一和步骤二,生成该船舶的BOF特征值;
4.将要查询船舶的BOF向量与图像库中每幅图的BOF向量求夹角,夹角最小的即为匹配对象。
2 整体结果测评
本实验实验环境为Windows操作系统,编程语言为Python,具体实验环境如表1、表2、表3所示。
表1 实验软件环境
终端类型操作系统相关软件服务器端Windows server2012 R2Python 3.6,客户端windows 10 旗舰64位Python3.6
表2 实验硬件环境
终端类别机器名配置说明服务器端Dell R720CPU:Xeon 24 核内存:96G硬盘:500G客户端普通PCCPU:Intel(R) Core(TM),i7,3.4G内存:16G硬盘:2T
使用改进过后的YOLO网络对自身的船舶数据集进行训练,得到网络模型,具体网络训练参数如表3所示。
表3 YOLO训练参数
Input sizeChannelsDecayMomentumLearning_rateMax_batchesPolicy416×41630.0050.90.000145000steps
使用改进训练后的YOLO网络模型提取船舶图片,将图片中的船舶用线框框出,框出的区域即为所需要的船舶区域,见图3。对船舶提取SIFT特征,SIFT特征在旋转、缩放的情况下具有良好的不变性,在视角变化、具有噪声的情况下也具有一定的稳定性,具有较好的鲁棒性,是一种局部特征描述子,可以很好地描述物体,找到特征点[5],见图4。
图3 YOLO提取船舶图 图4 船舶提取特征图
将YOLO网络提取出的船舶提取SIFT特征进行匹配,可以看出对于不同尺度,不同拍摄角度的船舶图像都有较好的匹配效果。将匹配到的特征点用连线标出,具体匹配结果见图5。
图5 船舶特征匹配图
最后实现了一个船舶实时检索系统,输入新来到的船舶图片,从数据库中检索该船舶,找出数据库中和该船舶最相似的4张船舶图片,具体查询结果如图6所示[6]。同时可以看出当船舶图片结构相似时也会出现一定的误差,如第2张图片检索出的第4张图片即为错误检索结果[7]。
图6 最终船舶检索结果图
3 评价标准
本次实验数据集命名为YOLO-VOC,该数据集共包含了8000张船舶图片,图片像素为1920×1080,图片为RGB三通道图片。同时为了对该数据集进行检索结果评测,规定以下检索标准[8]:
3.1 查准率,查全率
在一次检索过程中,用N表示检索结果返回的图像总数,用Q表示检索结果中符合要求的图像总数,用M表示图像数据库中所用符合要求的图像总数。
查准率可用如下公式计算:
(13)
那么查全率可以用下面公式计算:
(14)
3.2 检索时间
检索时间的长短直观地反映出算法的效率,决定检索算法是否可以应用于实际生活的重要判断依据[9],检索时间用T表示。
在YOLO-VOC数据集下按照以上评测标准进行船舶检索匹配实验,具体实验结果如表4所示。
表4 实验结果评测
船舶总数聚类中心数目查全率查准率检索时间800050091.12%92.15%1.53s800070095.37%96.21%2.06s800090093.21%92.3%2.68s
4 总结
本文主要有三个贡献:第一,通过对YOLOV2网络进行调整,结合自己的船舶数据集,得到了一个可以准确分割提取船舶的网络模型。第二,在第一步的基础上,通过对船舶提取特征,利用DBSCAN结合K-means自动生成聚类中心,对高维的船舶特征进行降维,消除维度灾难,生成低维而准确的船舶特征。第三,最后实现了一个水上船舶快速检测系统,建立了船舶数据库,构建了船舶特征码本。通过利用自身数据集对YOLOV2网络进行设计修改,得到一个可以准确切割船舶的网络,同时对于分割后船舶提取SIFT特征,利用DNSCAN+K-meams聚类自动生成聚类中心算法,可以准确地将船舶特征简化,消除维度灾难,生成特征码本,然后将外来船舶同数据库中的船舶特征进行查询匹配,可以快速准确的找到相应船舶,实现了一个可以快速准确查询船舶的系统。最后系统查全率和查准率可以达到92%以上,查询速度也满足实时性要求。本文不足之处在于前期船舶分割聚类生成特征码本的过程较为耗时,同时对于图像YOLO分割出的船舶数据较为依赖。目前YOLOV3网络已经提出,在小目标检测上更加有优势,将其应用在船舶分割中可能会提高船舶样本分割准确度,从而提高船舶检测准确度。