时间:2024-05-04
张涛
(四川大学计算机学院,成都610065)
目标检测是目前计算机视觉领域一个极为重要的分支,在实际的生产中应用极为广泛。目标检测的主要目的是将输入的图像中的物体检测出来,得到该物体的具体类别、位置坐标信息以及其相应的置信度。随着2012年AlexNet[1]在ImageNet图像识别比赛中的碾压式胜出,通过构建以CNN网络的形式深度学习模式开始大放异彩。随着深度学习的高速发展,目标检测也搭上了深度学习的快车。从此,目标检测进入了新的时代。
首先,RBG的Faster R-CNN[2]开启了目标检测的新时代,目标检测进入了two-stage时代。此后,各种目标检测框架如雨后春笋般出现,如YOLO[3]、SSD[4]、RetinaNet[5],等等,为目标检测领域注入了鲜活的血液。目前,目标检测框架基本上都呈现出端到端的训练方式,即只需要在神经网络的输入端喂入数据,便可以直接在输出端得到想要的结果。这使得以神经网络作为托底的目标检测变得十分的简单易用,我们只需要制作好自己的数据集,便完全可以将整个神经网络当做一个黑盒来进行处理。
在家兔解剖实验过程中,我们需要针对解剖过程的每一步,都做相应实验的正确性判断。这就需要我们首先将家兔和一些操作器具检测出来,再进行相应的逻辑判断。由于深度学习在目标检测的应用中已经十分成熟,我们将采用深度学习的方式进行检测。
与此同时,由于目标试验台的机器性能较弱,缺少GPU的支持,只能依靠CPU进行模型的推理。所以,这就要求我们找到一个模型复杂度低,但识别精确度不降的目标检测框架,正是基于以上的诸多考量,最终采取了以MobileNet[6]为骨干网络的SSD作为目标检测框架。
首先,需要对图片数据进行分析,主要是包括类别数量的分布,类别的长宽比分布,通过分析来判定是否存在较大的尺度差异性,是否存在小目标以及类别是否存在严重的不均衡性。
在我们的数据集中,需要进行识别的物体一共为5类:家兔、操作者的手、止血钳、家兔伤口以及家兔耳朵。这几类物体都属于大物体,且尺度都较为统一,属于比较规则的数据集。神经网络网络对于大目标的检测游刃有余,我们只需要更多地关注训练出来的模型的泛化能力。所以,我们需要采集不同的场景下的图像,使得模型都能正常工作。
数据集中的图像主要分为以下四场场景:①光线昏暗的环境;②光线很强,色调为白色的环境;③光线很强,色调为黄色的环境;④光线正常的环境。
图1 四种常见的数据场景
由于数据之间存在较为明显的色调差距,直接将数据进行输入训练,显然鲁棒性不足。因此,我们除了对数据进行常规的数据增强处理之外,还主要针对以上场景做了一些特别的处理,例如:随机变换图像亮度;随机变换图像的颜色通道;随机变换图像的对比度;随机变换图像的饱和度;随机变换图像的色度等等。这么做的主要目的是为了将色调和饱和度对于训练过程的干扰降到最小。
随着基础骨干网络的发展,从VGG[7]、GoogLeNet[8]、ResNet[9]……基础网络的深度变得越来越深,紧随而来的就是模型参数量的大幅上升,这就意味着模型的训练所需要的花费的时间将变得越来越久。这些庞大的模型在缺少GPU或移动或嵌入式设备上是很难被应用的。这些模型参数量过于庞大,这些设备往往面临着内存不足、处理器性能弱的问题。但这些场景又需要做到低延迟,即响应速度快。这就陷入了矛盾的境地。
我们在衡量一个模型的时,除了要考虑其精度之外,还需要考虑其复杂度。而模型的复杂度主要体现在以下两个方面:①计算量,②参数个数。
针对计算量,在深度学习中有一个概念:FLOPs,即Floating Point Operations(浮点运算数量),它主要反映的是模型所需要的算力。若不考虑激活函数的情况下,一个卷积层的运算量为:
其中,Ci:输入通道,K:卷积核大小,HW:输出的特征图大小,C0:输出通道
参数量则主要用于衡量模型所需要的内存大小,而参数量的大小输入图像大小无关,它是模型本身的属性。
表1 常见基础网络模型复杂度
为了解决以上痛点,主流的研究方法分为以下两种:①针对已经训练好的模型,可以采取量化的方式,将复杂的模型进行压缩,从而得到较小的模型;②从头设计新的基础网络进行训练,从而得到模型。这两种方式都是在保证模型精度不变的基础上,适当降低模型的参数量,从而提升模型的训练和推理能力。
Google提出的MobileNet就是基于以上的第二种思路,引入了深度可分离卷积,即可以分为Depthwise convolution和Pointwise convolution两种操作。其中,Depthwise convolution针对每个输入通道采用不同的卷积核,即一个卷积核对应一个输入通道;而Pointwise convolution则是采用1×1卷积核的普通卷积。其大致结构如图2。
采用以上结构,整个网络的参数量得到大幅降低。
SSD目标检测算法是一种one-stage算法,它的主要创新之处在于:①SSD利用基础网络,提取了不同尺度的feature map来进行检测,即在大的feature map上来检测小物体,在小的feature map上检测大物体。这是因为随着网络层数的加深,提取出来的feature map所包含的语义信息也会更加多,但位置信息也会损失较为严重。②SSD将Faster R-CNN中的anchor引入了进来,预设不同尺度和长宽比的先验框。
图2 标准卷积与Depthwise卷积的区别
图3 SSD原理
SSD利用多尺度feature map来进行检测,可以更好地利用神经网络的特性。加入预设的anchor机制,我们可以根据先验知识来预设anchor的大小,从而可以是得检测框架得到更加精确地检测结果。
采用MobileNet-SSD作为检测框架,是因为在没有GPU的情况下,只采用普通CPU作为神经网络的推理引擎,这不得不促使我们寻求一种较为简单的模型,其必须具备在不丢失精度的情况下,尽可能保证模型推理的速度。利用MobileNet作为backbone,可以大幅地降低模型的参数;利用SSD的预设先验框,可以更加精确地框选出待检测物体。
MobileNet作为骨干网络,可以大幅地降低原论文中以VGG作为骨干网络时模型的复杂度。利用MobileNet提取出图像的多层特征图,我们再在多层特征图上预设检测框,最后利用非极大值抑制的方法,得到得分最高的检测框,便是该物体的最佳检测结果。
本文使用的数据集为8100张1920×1080的图片,经过精细标注、分类后,将数据集按7:2:1的比例分为训练集、验证集和测试集。在Intel Core i7 4790 CPU,32 GB RAM,NVIDIA GTX 1080Ti显卡的实验环境下,采用学习率lr=0.001,迭代训练80000次。利用训练得到的模型,我们在没有GPU的Intel Core i5 9400f的主机上,跑出平均40fps的速度,且识别精度可以达到99%,基本上不存在漏检或者误检。
图4 MobileNet-SSD模型结构图
同时,我们也进行了对比,如果利用VGG或者ResNet作为骨干网络,则速率会大幅度降低,平均只能达到12fps,没有办法达到实时的效果。正是因为MobileNet巧妙的设计,使得整个模型的参数量大幅降低,在没有GPU并行加速的环境下,利用CPU依然可以实现模型的快速推理。
图5 实验结果图
本文主要是针对特定场景下,利用目标检测框架,在保证检测精度的情况下,引入更为轻量级的模型,使得我们可以在硬件条件受限的条件下,发挥出深度学习模型的优势。通过训练深度学习模型,我们可以将模型应用到更加广泛的、从未见过的场景下。利用MobileNet作为整个模型的backbone,可以大幅地降低模型的复杂度,为深度学习的应用带来了更大的优势。由于本身数据集并不是很复杂,不存在非常多的小目标,所以神经网络显得游刃有余。但业界目前对于像MS COCO这样的数据集,里面包含了非常多的小目标,场景也极为复杂,十分贴合日常场景,诸多目标检测方法仍很难达到十分高的精确度。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!