双尺度网络高分辨率楼面影像微小缺陷检测

2021-03-19 12:42孙光民陈佳阳李冰李煜闫冬
哈尔滨工程大学学报 2021年2期
关键词:高分辨率集上检测器

孙光民, 陈佳阳, 李冰, 李煜, 闫冬

(1.北京工业大学 信息学部,北京 100124;2.中国烟草总公司 北京市公司,北京 100020)

随着我国城市化进程的加快,高层甚至超高层楼宇的数量快速增长。这些建筑的外墙通常为砖混结构,利用水泥将紧密排列的砖块粘附于建筑表面,从而起到保温、美观、抗腐蚀的作用。然而经过长时间的风吹、暴晒和雨水侵蚀,砖块很可能出现裂缝、松动、甚至脱落等现象。若脱落的砖块从高空坠下,将会对建筑物周边的行人和车辆等造成极大的危害。因此,对楼面风险的排查越来越受到重视。目前,主要还是采用人工的方式进行建筑外墙的缺陷检测,例如地面巡查或通过蜘蛛人实地勘察。但是这些人工检测方法既耗费大量的人力和物力,又不能保证在高空作业的工人的安全。故应用计算机视觉和深度学习技术完成对楼面高清图像中微小缺陷目标的自动检测,可以有效地节省人力、提高效率。

由于楼面缺陷检测任务中待检测的缺陷面积只有不到总体图像面积的几千分之一,故楼面缺陷检测属于小目标检测,为目前计算机视觉领域的研究热点。目前应用比较广泛的基于深度学习的目标检测器主要可以分为2类:第1类是两步(two-stage)目标检测器,如Fast R-CNN[1],Faster R-CNN[2],Mask R-CNN[3]等,这些算法特点都是将目标检测分为2个阶段:首先提取候选区域,然后再将其送入检测网络完成对目标的定位与识别。第2类是单步(one-stage)目标检测算法,如单次多盒检测器(single shot detection,SSD)[4]、你只看一次(you look only once,YOLO)[5],YOLO 9000[6],YOLO V3[7]等,此类算法不需要预先提取候选框,而是直接通过网络中预设框来完成目标位置的回归和类别的判断,是一种端到端的目标检测算法。然而在小目标检测场景下,由于目标像素更少、可提取特征更不明显,传统的两步和单步检测器都难以取得较好的检测效果。

目前针对小目标检测算法的优化主要集中在模型的改进上,即在输入图像尺寸不变的前提上,通过改进模型结构提升检测器的特征提取能力以及其检测精度。目前比较有效的改进算法是特征金字塔网络[8]。该网络可嵌入到上述单步或2步检测器中,其可将主体网络生成的低层次特征图与高层次特征图以特定方式进行融合,完成对特征金字塔的重构。这样操作后低层次的特征图感受野范围提升,其语义信息得到增强,最终使得模型对小目标检测的精度有了很大提升。

虽然上述改进可以提升模型检测精度,但是这些模型处理的对象仍然是低分辨率图像。随着摄像设备硬件性能的提升,人们可以获得更高分辨率的图像。而与低分辨率图像相比,小目标在高分辨率图像中可以用更多的像素表征,即可以被更加清晰的刻画出来。虽然获得了有效的数据支撑,但目前的检测算法基本都不直接适用于分辨率高达几千万像素的图像。但如果将高分辨率图像进行下采样以适应检测模型,又将丢失信息,很难对小目标进行检测[9]。目前很多针对高分辨率图像小目标检测问题的研究和应用大多集中在遥感图像领域[10-11],其中比较具有代表性的是Adam Van Ette提出的基于窗口网络卫星影像的多尺度快速检测算法(satellite imagery multiscale rapid detection with windowed networks,SIMRDWN)[12]。该算法利用快速检测器对通过滑窗获取的候选区域进行检测,可以完成对任意尺寸高分辨率图像的快速检测任务。但是与卫星遥感图像不同的是,楼面图像中缺陷样式形态各异,难以统一描述,同时图像中也存在大量复杂纹理区域会干扰检测,容易引发虚警。为了提升高清图像中目标的检测速度和精度,本文提出了一种基于双尺度建模的检测框架,旨在基于少量训练样本完成高精度高效率的墙面缺陷自动检测。

1 高分辨率墙面图像缺陷检测

利用高清晰度单反相机(SONY A7R2)和长焦镜头(FE 100-400 mm F4.5-5.6 GM OSS)拍摄得到的墙面高清图像的分辨率高达7952×5304像素,而待检测的墙体缺陷如缺砖、碎砖等一般大小不超过100×100像素。同时,缺、碎砖等缺陷的形状差异较大,难以对其进行统一的特征描述。而且缺陷的辨识特征主要在于其与周围背景的差异,其内部的纹理特征并不明显。此外,楼面高分辨率图像中的缺陷只占很小面积,绝大部分区域都是正常的。原始高分辨率图像如图1所示,其中图1中的左侧红框内是原始图像的2个含有缺陷的分辨率为640×640像素的子区域。

图1 包含缺陷的楼面高分辨率图像Fig.1 High resolution image with defects

针对楼面图像的上述特点,本文提出一种基于双尺度建模的高分辨率楼面图像缺陷检测算法。该方法首先将缺陷检测任务在一大一小2个尺度上进行分解,得到一个双尺度下的任务组。在大尺度下,设置窗户,空调、天空等非墙体分割任务,通过结合传统图像处理技术和实例分割模型Mask R-CNN得到非墙体分割掩模;在小尺度下,设置缺陷检测任务,通过重叠式滑窗获取候选区并送入SSD检测器获取切片缺陷检测结果。根据非墙体与缺陷目标的包含关系,将2个尺度下的分割掩模与检测框进行决策融合和后处理,最终完成对原始楼面高分辨率图像中微小缺陷的检测。本文提出的基于高分辨率楼面图像的缺陷检测算法的总体流程如图2所示。

1.1 大尺度下的非墙体分割

在大尺度下,对面积较大的非墙体目标进行分割。由于非墙体不包含缺陷,故可以依据其掩模有效缩减需要缺陷检测的区域并减少误检的发生。根据图像处理中的高斯金字塔理论[13],图像在不同尺度下的表征可以通过对原始图像重复应用高斯滤波及下采样操作得到。首先应用高斯模糊和8倍下采样,从原始7 952×5 304的楼面高分辨率图像得到994×663的低分辨率大尺度图像,并设置天空、空调、窗户作为该尺度下的分割对象。然后对不同的非墙体目标分别应用传统图像处理以及深度学习2种不同的算法进行分割,得到不同非墙体目标的掩模。最终将这些掩膜组合起来,并通过上采样得到原始尺度下的非墙体掩模。其中,应用传统图像处理进行天空的分割;应用实例分割模型Mask R-CNN[3]进行空调、窗户的分割。大尺度下楼面图像非墙体区域分割的算法流程如图3所示。

图2 楼面图像缺陷检测流程Fig.2 Pipeline of defects detection of building wall surface image

图3 大尺度下的非墙体区域分割算法Fig.3 Non-wall region segmentation at large scale

由于天空颜色会随着天气、时间,拍摄像机等因素的变化而变化,故传统颜色阈值分割方法中的阈值不易设定,算法应用的场景受限。而楼面图像中天空具有另外2个特征:1)其总体区域较为平坦;2)楼面图像中的天空基本处于图像的四周。因而针对这2个特点,本文采用8邻域区域生长算法对天空区域进行分割[14]。其中种子点选取为图像的4个角点,生长准则为灰度差值小于设定阈值。

除此,窗户和空调通常也会频繁出现于楼面图像中,它们虽不包含待测缺陷,却很容易造成检测器的误检。因此为了提升检测的效率以及精度,本文也提前对图像中窗户进行筛选。由于室外拍摄环境复杂,窗内杂物太多,拍摄角度多变等诸多因素的影响,传统图像处理很难对目标进行的统一的特征描述,故本文采用实例分割Mask R-CNN深度模型对其进行处理。

将通过不同方式获得的不同目标的掩模通过相与操作进行合并,最终得到非墙体的二值掩模,其中灰度值为255表示非墙体,0表示墙体。为了便于后续小尺度下的缺陷检测,需要对该低分辨率掩模进行上采样为原始分辨率。由于掩模生成本身并不精确,故本文选择最邻近插值作为掩膜上采样的方式。

1.2 小尺度下的墙面缺陷检测

在得到非墙体掩模后,在小尺度下进行缺陷检测。与大尺度图片生成方式不同,本文直接采用图像的原始尺度作为小尺度表征。由于目前的检测器输入皆为低分辨率图像,故本文采用重叠式滑窗提取候选区域并送入检测器检测的方式完成小尺度下的缺陷检测任务。其中图像候选区域是否送入检测器需要依据非墙体掩模上对应位置的窗口区域的状态进行判断。为了加快检测速度,本文选择SSD[4]模型作为缺陷检测器,并采用Resnet50[15]作为其主干网络,同时引入了FPN[8]网络架构来提升其对于小目标检测的效果[16],其输入的图像分辨率为640×640。小尺度下缺陷检测的算法流程如图4所示,SSD缺陷检测网络的结构如图5所示。

图4 小尺度下的缺陷检测算法Fig.4 Defects detection at small scale

图5 小尺度下的缺陷检测器网络架构Fig.5 The architecture of the defect detector at the small scale

1.2.1 滑窗参数选择

为了能够平衡检测的精度以及效率,采用重叠式滑窗提取待检测区域。设重叠滑动窗口宽度为W=640,与SSD模型输入尺寸相同,滑动步长S∈[1,W]。通过分析,发现窗口的滑动步长S与目标检测任务有如下几点关联:1)所有大小在(W-S)×(W-S)以下的缺陷将至少完整的出现在1个窗口内;2)所有像素在窗口中出现的平均次数为(W-S)×(W-S)次;3)当S可以整除W的时候,所有像素在窗口中出现的次数是一样的;4)当S大于W的一半时,像素出现次数不平均。由于样本中所有待检测缺陷的大小基本都小于(W/2)×(W/2),故根据上述4个特点,选取滑动步长为窗长的一半,即S=W/2,如此可以保证所有大小在320×320以下的缺陷至少出现在一块完整的切片中,且所有的像素被窗口选取的次数均为4次。

1.2.2 区域筛选算法

当滑窗在原图上获取子区域时,也可以同时获取对应的掩膜子区域,并可以依据掩模子区域的状态对原图子区域进行筛选,决定其是否送入检测器进行检测。如果掩膜子区域内绝大部分都是非墙体区域,那么就不对该子区域做后续检测,从而加快对子块集的检测速度。而由于非墙体掩膜并不精细,且为了进一步提升检测的检测效率,本文选择定点采样方式利用掩膜做近似筛选。该方法需要将窗口按照4×4分格,以网格线的交点作为取样点,则一个窗口内部一共包含9个取样点。如果9个点内存在1个点属于墙体,则对应的原图子区域送入检测;若9个点全部都是非墙体,则其不送入检测。窗口内取样点的位置如图6中的圆点所示。

图6 窗口内采样方式示意(圆点)Fig.6 Sampling mode in window (dots)

1.2.3 检测结果后处理

应用训练好的缺陷检测器对筛选后的原图子区域进行检测,即可得到每个子区域上的检测结果。然后只需要将每个窗口内的检测框坐标依据所在窗口的位置信息进行调整,即可重新映射为原始高分辨率图像上的检测框。设子块在原始图像中的左上角点的位置被记录为(X,Y),子块内的检测结果为(x,y,w,h),那么依据简单的坐标变换就可以得到目标检测框对应于原图像的4个参数为(X+x,Y+y,w,h)。然而由于窗口重叠式获取区域,所以检测器将对同一目标进行多次检测,最终导致图像中同一个目标对应出现多个检测框。为了避免太多相互覆盖的检测框的干扰,还需要对它们进行非极大值抑制处理。

1.3 多尺度分割与检测结果融合

完成不同尺度上的检测任务后,需要对多尺度检测结果进行融合。尽管已经借助过大尺度分割结果对小目标检测区域进行了筛选,但是实际上由于滑动窗口为矩形、掩模生成不精确、区域筛选算法设置宽松等因素的影响,筛选后的窗口内不可避免地仍有部分非墙体区域存在。在这些缺陷目标本不该出现的区域内可能会出现虚警。为了提升检测精度,将大尺度分割掩膜和小目标检测结果再次进行融合,依据掩膜将非墙体区域包含的检测框舍去。然而为了避免非墙体与墙体区域分界处的真实目标不被舍弃,在融合前需要先对非墙体掩模进行简单的形态学腐蚀处理。从而使其掩膜边界处的目标缺陷得以保留。

2 算法模型的训练

检测算法中涉及的实例分割网络及缺陷检测网络都需要在COCO[20]数据集上进行预训练。对于实例分割模型,利用预训练的Mask R-CNN在标注好窗户和空调的大尺度低分辨率数据集上进行迁移学习[18-19]。对于小尺度下的缺陷检测模型,利用预训练的SSD模型做迁移学习。但是与前者的标准训练方式不同,为了提升对微小缺陷的检测精度,本文在数据集制作以及模型训练方式上都做了改进,下面将对其流程进行介绍。其中所有实验均基于Tensorflow平台的Google Object Detection API[17]完成。

2.1 数据集预处理及检测器初次训练

初始样本集的制作需要标注楼面图像中的缺陷的位置及种类,要求标注矩形框紧贴检测目标的边缘,得到初始标注框(xi,yi,wi,hi),其中xi和yi分别为初始标注框的左上角点的横纵坐标,wi和hi分别为初始标注框的宽度和高度。然而由于缺陷的特征主要表现在其与周边环境的差异性,故对初始标注框进行修正,为缺陷主动保留背景。设修正后的标注框为(xc,yc,wc,hc):

wc=wi×(1+α)

(1)

hc=hi×(1+α)

(2)

xc=xi-0.5×wc×α

(3)

yc=yi-0.5×hc×α

(4)

式中α∈(0.2,0.8)为扩展参数。通过实验分析,当α取0.6时,训练出来的模型检测精度最高。

由于小尺度高分辨率图像与检测器输入不匹配,故需要依据初始高分辨率数据集制作出合适的数据集,才能进行检测器的训练。首先将高分辨率图像分为训练集、验证集和测试集;然后从各集合中的高分辨率图像上裁剪包含缺陷的切片,得到对应的3个切片集。这些切片要符合检测器的输入尺寸,且每一块至少包含一个目标;最后利用训练切片集对模型进行训练并保存在验证切片集上表现最优的节点作为初次训练完成后的模型参数。

如果检测器的输入样本较少,那么深度网络一般难以通过直接训练得到很好的模型参数。通常可以采用迁移学习的方式解决小样本问题。迁移学习是指先在开源的大数据集上对模型进行预训练,然后再在自己的小样本集上对模型进行微调。除此还可以应用数据扩增技术,例如对高分辨率图像上的每一个目标进行多次随机裁剪。由于楼面缺陷样本较少,故采用迁移学习[18-19]的方式进行模型的训练。首先让模型在COCO[20]大数据集上进行预训练,然后再在楼面缺陷小样本集上进行微调,最后保存出验证集上最佳节点作为初次训练完成的模型参数。

2.2 引入负样本的检测器2次训练

然而由于算法最终处理对象是原始高分辨率图像,故检测算法效果的最终评价应该在高分辨率图像集上获得。在高分辨率图像中,除了待检测缺陷之外,还有大量的会干扰检测的物体。而由于初次训练使用的切片集只包含了小目标附近的区域,而不包含干扰项,导致训练好的模型无法对他们进行区分,进而产生大量虚警。

为了构建更加全面的数据集,应用初次训练模型对训练和验证的原始高分辨率图集分别进行检测,并将包含误检框的切片作为负样本引入,生成新的训练和验证切片样本集。这些负样本切片的类别标签设定为“正常”,其检测框标签则设定为整个切片区域,其数量与正样本集数量的比例设定为1∶6。然后就可以利用新生成的数据集对初次训练模型进行二次微调。由于引入了检测器易于误检的样本,检测器将能更加关注这些样本,并能更好地学习到区分正负样本的特征。这种负反馈机制能够对模型训练起到矫正的作用,可以大大降低虚警的发生。需要注意的是,模型训练完成后并不需要输出负样本类别(正常),即负样本类别只在训练时发挥作用。

3 实验结果及分析

3.1 分割模型与检测模型的初次训练结果

实验所用楼面图像采用电动云台对楼面进行网格式拍摄,图像分辨率为7 952×5 304。评价指标采用COCO标准的平均精度均值(mean Average Precision,mAP)[20]。mAP理论上为各类别的PR曲线下面积的均值,COCO提供了一种近似计算方法,常用于评估目标检测模型的效果。

3.1.1 分割模型的训练及测试效果

用于训练实例分割模型Mask R-CNN的样本共31张,图像分辨率下采样为994×663,分为训练集(25张)和验证集(6张),每张图片中的窗户和空调个数不等。保存出验证切片集上最高mAP节点处的模型作为最终分割模型,将其置信度阈值设定为0.5,得到的检测效果示意如图7所示,其中的空调和窗户2种非墙体都被很好地分割了出来。

图7 Mask-RCNN的检测效果示意Fig.7 The training results of Mask RCNN

3.1.2 检测模型的初次训练及测试效果

用于训练SSD模型的样本共107张,图像分辨率一般为7 952×5 304,分为训练集(88张)、验证集(9张)和测试集(10张),每张图片中的缺陷个数不等。根据2.1节的样本制作方法,得到分辨率为640×640切片图集,其中训练集、验证集和测试集对应的切片样本数量分别为3 180、220和130张(10倍扩增后)。然后利用在COCO数据集上预训练好的SSD模型在楼面缺陷切片样本集上进行迁移学习,batch size设为4,学习率设为0.000 05,迭代30 000次。模型在验证切片集上的mAP随迭代次数变化的曲线如图所示,其中IOU阈值设定为0.5。在100 000步迭代后,模型在验证切片集上的mAP可达到0.7左右,之后趋于稳定。保存出验证切片集上最高mAP节点处的模型作为初次训练模型,该模型在测试切片集上的mAP为0.714。将初次训练模型的置信度阈值设定为0.5,其部分检测结果如图8所示,其中模型成功定位出了切片上的缺陷位置,并给出了相应的置信度。

图8 SSD的模型检测效果示意Fig.8 The training results of SSD

3.2 引入二次训练的算法检测效果与分析

将初次训练模型置于检测算法框架中,应用所提检测算法对训练和验证原始高分辨率图集进行检测并计算出模型在高分辨率图集上的mAP值。从表1和表2的第1行可以发现,相较于初次训练模型在训练、验证和测试的切片集上的mAP,算法在对应高分辨率图集上的mAP都发生了严重的下降。通过观察与分析检测结果,认为这一现象主要是由于过多的虚警造成的。为了抑制虚警,将得到检测结果中未与真实框相交的检测框作为误检,并以其为中心剪切图片。接着将得到的切片中的检测框设为整张图像,类别设为normal(无缺陷),并将其与原始切片样本混合,得到扩增的训练和验证切片集分别为3 721和252张。最后在新数据集上对初次训练模型进行再次微调,得到2次训练模型作为最终检测模型。通过对比表2中初次训练模型和2次训练模型在原始高分辨率图像训练、验证和测试集上的mAP数值可以发现,该方法可以有效地提升算法的检测精度。经过2次训练后的最终检测模型在测试集上的mAP为0.480。

表1 不同小尺度检测器在切片集上的mAP

表2 采用不同小尺度检测器的所提整体算法在高分辨率图集上的mAP

分别将初次训练模型和二次训练模型置于总体检测框架中,并应用检测算法对测试集进行检测,其部分检测结果如图9所示,其中只有周围标有“缺陷”字样的检测框才是预测正确的结果。由图可知,所提检测算法在采用初次训练模型作为小尺度缺陷检测器时,其检测结果中产生了很多误检,大部分集中在窗户中疑似物的干扰。而当用二次训练模型替换初次训练模型后,所提算法的检测结果中的误检数量明显变少,证明负样本的引入的确抑制了虚警的发生。但是同时由于负样本中有一些与真正缺陷很相近的正常物体,故这些难样本的引入反而会对待检测缺陷的特征的学习产生抑制作用,使得模型性能提升有所限制。

图9 二次训练模型在某张验证集图像上的检测结果Fig.9 The comparison of detections before re-train and after re-train

3.3 单尺度框架与多尺度框架检测效果对比

SIMRDWN[10]算法仅在单一的尺度下进行缺陷检测,该算法直接将原始高分辨率大图进行切分送入小目标检测框架,不生成掩膜,不对窗户和空调这些非墙体区域进行切片过滤和检测框2次筛选。

本次测试结果对比如图10所示,其中图10(a)展示的是SIMRDWN算法结果,图10(b)为相应的多尺度检测结果对照。可以明显看出单尺度测试结果中出现了将窗户内部误认为是墙体破损区域的检测框,出现误检现象。非墙体区域为本检测流程带来了不必要的麻烦,所以针对缺陷目标的特殊性,采用多尺度融合检测的方法是十分必要且有效的。

图10 单尺度(SIMRDWN)与双尺度(所提算法)检测效果对比Fig.10 The comparison of detections of single-scale(SIMRDWN) and multi-scale

本次实验中模型在高分辨率楼面图像上的mAP值如表3所示,与多尺度融合算法(所提算法)框架相比,单尺度算法(SIMRDWN)的精度有明显下降。同时由于在多尺度中待检测切片经过了筛选,检测次数少,算法的时间花费也较少,如表3所示。而由于硬件和模型的差别,并未计算掩膜生成时间,随着硬件性能的提升,这部分时间也将大大缩短。

表3 不同算法在高分辨率图集上的mAP和检测时间对比

3.4 滑窗步长的选择实验

为了分析在获取640×640大小的高分辨率图像切片时采取不同滑动窗口步长对实验结果的影响,分别设置滑动窗口步长为窗长的0.25、0.5和0.75进行实验,3种步长的检测算法在高分辨率图集上的检测时间和mAP如表4所示。

表4 采用不同滑动步长时所提算法的性能比较Table 4 Comparison of the methods of different strides

由表4可知,随着滑动窗口步长的增大,检测所需要的时间越来越少。其原因是步长设置越小,一张高分辨率大图所剪裁出的小图片数量越多,调用缺陷检测器的次数越多,耗时越长。在检测精度方面,训练集、验证集上的mAP都随着滑动步长的增大而减小,其主要原因是候选框的稠密程度下降导致待检测缺陷不易被检测到。而与之相反,模型在测试集上的mAP却呈上升趋势。通过分析发现,其主要原因是图片中干扰项太多,减小候选框的稠密程度可以减少误检的发生。因此图像集上的mAP变化是误检与漏检的相互作用以及博弈的结果,为了兼顾检测精度和效率,滑动步长推荐设置为0.5。

4 结论

1)在小尺度的缺陷检测中,以负反馈的形式利用初次检测的负样本对模型进行2次训练可以有效降低检测器的虚警率。

2)在使用滑窗进行检测时,步长的选择是对检测精度和检测速度的平衡。其取决于小尺度检测器的精度,也取决于操作人员对系统效率的要求。后续可以探究自适应步长变化的研究,进一步加快检测速度。

3)提出的小目标多尺度检测框架能够在复杂背景的高分辨率图像中实现微小目标的精确检测,且在精度和效率上都要优于传统单一尺度检测框架。本文提出方法也适用于遥感图像或医学图像中的目标或病灶检测。

猜你喜欢
高分辨率集上检测器
GCD封闭集上的幂矩阵行列式间的整除性
探讨高分辨率CT在肺部小结节诊断中的应用价值
基于互信息的多级特征选择算法
基于交通诱导的高速公路交通检测器布设方案研究
高分辨率合成孔径雷达图像解译系统
基于二次否定剪切选择的入侵检测方法*
一种柱状金属物质量检测器的研究
关于为“一带一路”提供高分辨率遥感星座的设想
师如明灯,清凉温润
高分辨率对地观测系统