了解cv和robomaster视觉组比赛中的cv算法(中)目标检测的常见概念和术语

NeoZng NeoZng     2023-01-17     764

关键词:

--NeoZng[neozng1@hnu.edu.cn]

5.2.3.目标检测

利用CNN我们已经可以完成对图像的识别和分类。但是这样是远远不够的,为了能准确定位图像中的物体,我们需要对图像中所有目标进行定位(找出框住目标的bounding box外接矩形框,即[cx,cy,w,h]四个参数,分别表示目标中心在图像中的坐标和bbox的长宽)。此部分会介绍几个经典的目标检测网络实现的原理和方法。

有同学可能会想,那我直接让网络在全连接层后输出一个向量而不是标量(分类),即多输出四个坐标也就是8个值,分别代表图像中目标的四个角点不就行了吗?确实,对于只有一个目标的图像我们可以这么做,可惜倘若图像中有多个目标的话,网络的输出就变成不确定的了(需要一次性输出不确定长度,分别表示每个目标框中心、长宽和其对应的分类),我们是无法训练一个没有确定输出的网络的。

 目标定位方法,得到一个WxH到1x9向量的映射

​​1代表有目标在图像中,随后四个数代表中心坐标和目标框的长宽,最后四个数表示目标分类

因为图像分类是对整张图像进行的,是一个WxH维到一个确定的标量或向量(如上面说的同时进行分类和回归)的映射,标准的CNN方法显然无法完成一张图片中多个对象的分类和定位操作。不过机智的你应该已经想到,我们可以把图片拆成很多的部分,然后将这些子图分别投入CNN从而得到它们对应的分类,不就把里面的对象定位出来了么。

没错,这就是密集采样的定位思想,也是最早的目标检测方法。使用滑动窗口来检测目标位置的方法和模板匹配有些类似。还有一种方法是将图像用不同的长度划分格点,在每个格点中进行图像分类(这其实是一种特殊的滑动窗口方法,即设定滑动步长大小使其与窗口的大小相同)。

 采用不同大小的滑动窗口,裁取图像的一部分投入CNN得到分类(图中只使用了一种大小)

显然,这种方法的缺点也非常明显:超高的计算开销。步长设置的过大可能会发生漏检,而为了检测大小不同的目标,我们又需要采用各种大小的窗口来运行CNN,同时还可能需要使用不同长宽比的窗口来应对物体长宽比不同的情况(例如汽车在侧面看是细长的矩形,正面又比较接近正方形,如果仅使用一种类型的窗口,则可能会出现定位不精确的问题,得到的定位框包含了大量的背景)。

 使用滑动窗口方法可能出现的问题,没有一个滑窗能够和汽车整体匹配

仔细观察,我们就会发现,在目标检测问题中,我们面临的最大困难就是候选区域太多且目标大小的尺度不一,问题的搜索空间过于庞大,我们难以用暴力搜索穷举全部解。于是two-stage方法的代表作R-CNN(region proposal-CNN)横空出世。不过,再介绍R-CNN之前,先让我们看看目标检测中常用的术语和概念吧。

  • 常用术语和概念

    1. GT(ground truth)

      GT可以理解为真实值、有效值、正确的答案、正确的标注信息。对于目标检测来说,标记的坐标点和标记分类就被称作ground truth。

      训练标记的bbox区域(蓝色区域)就是ground truth

      在目标检测网络的推理过程中,如何为预测框分配标签(训练的label即GT的属于的分类)会极大地影响训练的效率和推理的准确度,这也是当前目标检测研究的热点和难点。

    2. IOU(intersection of Union)

      字面意思。两个bbox的交集和并集的比例,详见上方GT的插图,灰色区域为交集面积,除以两个bbox的并集就得到交并比。交并比是衡量检测生成bbox的准确性的一个指标。现在也出现了一些其他用于衡量预测框质量的指标。

    3. 正/负样本(positive/negative sample)

      在目标检测中,包含了目标的bbox就是正样本,而没有包含目标即bbox内是背景的将被作为负样本。当然一些网络会对正负样本进行特殊定义。特别注意,我们是根据训练标注来生成正负样本的,并不是说训练标注中地GT就是正样本,其他区域都是负样本。我们会依据某种准则如与GT的IOU或置信度进而由得到正负样本。

       我们的检测目标是杯子,假设网络生成了4个检测框,认为这里面有杯子,那么根据特定的IOU阈值如0.5,我们将生成的4个检测框分别作为正负样本对待;在这里红色框是GT,紫色和蓝色框因为和GT的IOU超过50%被记为正样本,绿色框则被判定为负样本(背景)

      在阅读了下一篇文章的几个经典网络后再回来看看,你应该会对正负样本有新的理解。并且目标检测中有一个很大的、亟待解决的问题就是正负样本难易样本失衡。(在一张图片中,没有目标存在的区域占了全图的绝大部分,负样本即背景类占了所有样本的大多数,大量负样本在训练时会淹没正样本,导致神经网络失去鉴别能力对负样本产生过拟合)

      正负样本的划分策略和不平衡问题同样是目标检测的难点。

    4. ConvNet和特征图

      ConvNet一般值的是神经网络的backbone(骨干网络),也就是负责提取图像特征的部分,即我们在上面讲解CNN的时候由卷积层和池化层堆叠起来的block。特征图就是经过n个block之后产生的“图片”,因为原图的特征被提取到这些小”图片“上所以我们称之为特征图。简言之经过卷积或池化处理的图片或特征都可以被称作特征图,上面记录着原图的某些特征。

    5. 感受野(receptive field)

      从这个术语的名字应该可以略知一二。receptive field是高层feature map上的一个点的信息是由原图或之前的feature map中多大的范围/面积的像素所贡献的度量。换个简单句:原图上的某个像素或低层次的feature map是否和高层中的feature map上的某个点有关联/间接连接?再或者直接看图:

      绿色区域是l2中左上角像素的感受野,而黄色区域是l3中间像素的感受野

      有许多扩大感受野的方法如变步长卷积、空洞卷积、膨胀卷积、focus层等我们稍后介绍。其实这个概念应该在CNN部分就进行介绍,但是由于图像分类对此并不敏感所以将介绍移到了此处。

    6. NMS(非极大值抑制)

      在生成检测框的时候,可能会出现下图这种情况,这时候我们要根据框的置信度或定位精度等信息筛去一些重叠区域很大的目标框,防止出现重复检测的情况。这里给出了NMS的大致介绍和实现源码:NMS 在目标检测中的应用

    7. 性能指标与mAP(mean average precision)

      mAP是目标检测中最常见的测试检测器性能的指标。在次之前先让我们看看混淆矩阵,这是机器学习中所有分类器都要确定的一个参数:

      混淆矩阵和对应的概念含义

      由混淆矩阵中的数据,我们可以通过各种运算来得到千奇百怪的指标,常见的如正确率、真阳性率、特异度、假阴性率(漏诊率)、Youden指数等。我们则选择mAP来指示一个目标检测算法的性能,mAP的计算需要查准率(true positive rate,precision: TP/(TP+FP) )和查全率(又叫召回率recall,计算通过TPR:true positive rate,TP/(TP+FN) )两个信息。这两个指标是一对矛盾指标,当查准率高的时候,说明分类器很少把负类分为正类,只遴选那些最优把握、正类置信度高的样本,显然分类为正类的样本TP+FP将会下降(置信度上升,分类器把更少的样本分为正类),同时查全率必然跟着下降,很多正样本将会成为漏网之鱼而被分类为负样本。当降低阈值希望尽可能多地把所有的正类的查出来,那么很多置信度较高的负类同样容易被分为正类,导致查准度下降。

      找到曲线上的平衡点,即边际效用最大的点,当继续往曲线的右侧移动,查全率上升的速度将会低于查准率下降的速度

      目标检测任务中判断预测框的正负样本一般以IOU是否>0.5为准则(这里的分类是说预测框里有没有物体的置信度,而对预测框中物体的分类准确度测试则是直接通过分类置信度进行)。那么如何绘制处pr曲线?一般的测试方法是设定一个IOU阈值(如0.5则预测框和GT的IOU大于0.5会被判别为正例),在此阈值下根据不同的查全率水平计算查准率(当然如MSCOCO等更全面的数据集采用的方法是将IOU阈值设定为[0.5,0.95]步长为0.05,对这些阈值水平分别进行测试再求平均。AP就是PR曲线下方的面积(为什么用曲线下的面积,而不用平衡点处的分类器性能作为指标?),称作average precision即平均精度。而mAP是把每个类的AP曲线下的面积进行加权平均,即可算出多分类的平均精确度。

      但是mAP也有一个问题,就是正负样本的数量不同的时候会导致PR曲线严重失衡(从precision和recall计算方法想想为什么),而ROC和AUC就不会出现这个问题,因此这两个指标在分类器性能测试中也很常用。

      得到ROC曲线需要查全率和误诊率两个指标。查全率TPR在上面已经介绍过,这里再介绍false positive rate:它被称做假阳性率、误诊率和伪正类率,表示所有被分类器判别为正类的样本有多少实际上是负类(假正类在所有判别为负类的样本中的占比,FPR=FP/(TN+FP) ),同样会反映分类的精确程度(同样你可以思考一下为什么在正负样本比例失衡的时候ROC曲线不会变形?)。

      和PR曲线的绘制相同,我们设置不同的分类置信度阈值进而在不同的查全率水平下测试得到准确率,即可获得ROC曲线。ROC曲线下方的面积AUC即area under curve同样也有一些含义。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好(阈值不同且指标不同),而作为一个数值,对应AUC更大的分类器效果更好,其具体含义为:当随机挑选一个正样本和一个负样本,根据当前的分类器计算得到的score(置信度)将这个正样本排在负样本前面的概率。下图中的(b)可以帮助你更好、更直观地理解ROC曲线的含义,竖线处theta即设置的分类置信度。

      看此图理解起来没问题/有新的启发就说明你大概掌握了这些概念

      如果还是没懂也没关系,就把它们当作衡量训练得到的预测器的好坏的指标即可,这个指标越大越好!

    8. 公开数据集

      列出几个最常用的目标检测公开/比赛数据集:

      • VOC(isual object classes chanllenges)2005-2012

        经典的计算机视觉竞赛,任务包括图像分类、目标检测、语义分割和动作检测。20个种类。 VOC07和VOC12最为常用。近年来被更大的数据集像ILSVRC和MS-COCO逐渐取代。

      • ImageNet 2010-2017

        训练数据集包含500,000张图片,属于200类物体。由于数据集太大,训练所需计算量很大,因而很少使用。同时,由于类别数也比较多,目标检测的难度也相当大。一般不会用作检测网络的性能,二是作为训练使用。

      • MSCOCO(microsoft common objects in context)2015-now

        看名字就知道是巨硬家的。最大的特点是除了bounding box 注释,还给了segmentation标注。MS-COCO也包含更多的小目标(面积小于图像大小的百分之一)和稠密的目标。这些特征使得MS-COCO更接近于现实生活。MS-COCO已经成了目标检测家族中的实际标准。


  • 如果觉得笔者总结得还可以,请点一个赞,关注一下笔者吧!还可以把文章转发给对cv感兴趣的同学和其他RMer。

  • 下次更新重磅内容,R-CNN! 

     

了解robomaster视觉组视觉在各兵种中的作用

--NeoZng【neozng1@hnu.edu.cn】2.视觉在各兵种中的作用2.1.装甲板识别(步兵、英雄、无人机)由于机器人上安装的图传模块到操作手看到的第一视角的延迟加上操作手反应速度的延迟,操作手几乎很难手动瞄准高速运动... 查看详情

了解robomaster视觉组视觉组使用的软件

--NeoZng【neozng1@hnu.edu.cn】3.视觉组接触的软件进行视觉开发会用到各种各样的软件、开发环境、辅助工具等,所以很有必要了解一些相关的快捷键、命令、使用技巧。选择一款适合自己的IDE能够提高开发效率,方便版本... 查看详情

2021-09-18

视觉学习链接Robomaster——关于视觉组,你想要了解的都在这里Robomaster算法组(视觉组)学习路线RM视觉算法官方资料库——提取码:mtfz北理工机器人队RM视觉组学习参考汇总(持续更新中)2020年1月14-日Rob... 查看详情

机器视觉——图像投影(代码片段)

...来说,投影是将图像二值化后的像素点按某一方向堆叠,了解了这个原理后,就可以写出图片投影的代码:水平投影:importcv2importnumpyasnpimg=cv2.imread(‘123.jpg‘)cv2.imshow(‘origin‘,img)cv2.waitKey(0)grayimg=cv.cvtColor(img,cv.COLOR_BGR2GRAY)img1,th... 查看详情

2021计算机视觉cv算法岗面试问题及其答案总结

【2021计算机视觉】CV算法岗面试问题及其答案总结(二)AnchorFree对比Anchor-Based的算法的主要优点?RoiAlign具体实现及其解决的问题?讲一下Yolo、SSD和Faster-RCNN三种检测算法?如何解决目标检测里类别不均衡的问题?讲一下实例分... 查看详情

深度学习和计算机视觉(cv)介绍(代码片段)

目录1深度学习概述1.1什么是深度学习1.2发展历史2计算机视觉(CV)2.1计算机视觉定义2.2常见任务2.3应用场景2.3.1人脸识别2.3.2视频监控2.3.3图片识别分析2.3.4辅助驾驶2.4发展历史1深度学习概述1.1什么是深度学习在介绍深度... 查看详情

Open CV 计算机视觉中的 haar 级联分类器里面有啥?

】OpenCV计算机视觉中的haar级联分类器里面有啥?【英文标题】:What\'sinsideahaarcascadeclassifierinOpenCVcomputervision?OpenCV计算机视觉中的haar级联分类器里面有什么?【发布时间】:2011-05-2719:07:15【问题描述】:我需要将.xmlOpenCVhaar级联... 查看详情

Open CV 计算机视觉中的 haar 级联分类器里面有啥?

】OpenCV计算机视觉中的haar级联分类器里面有啥?【英文标题】:What\'sinsideahaarcascadeclassifierinOpenCVcomputervision?OpenCV计算机视觉中的haar级联分类器里面有什么?【发布时间】:2011-05-2719:07:15【问题描述】:我需要将.xmlOpenCVhaar级联... 查看详情

人工智能cv是啥

参考技术ACV是计算机视觉ComputerVision的简称,是人工智能领域的一个重要研究子领域。扩展资料CV是计算机视觉ComputerVision的简称,是人工智能领域的一个重要研究子领域。它是用各种成像系统去代替视觉器官作为输入的敏感手段... 查看详情

计算机视觉(cv)基于高层api实现宝石分类

【计算机视觉(CV)】基于高层API实现宝石分类作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志... 查看详情

来自 cv::solvePnP 的世界坐标中的相机位置

...我知道cv::solvePnP可以帮助我,在阅读了this和this之后,我了解到solvePnPrvec和t 查看详情

计算机视觉(computervision,cv)相关领域的站点链接

关于计算机视觉(ComputerVision,CV)相关领域的站点链接,当中有CV牛人的主页。CV研究小组的主页,CV领域的paper,代码。CV领域的最新动态。国内的应用情况等等。(1)googleResearch;http://research.google.com/index.html(2)MIT博士,汤晓欧... 查看详情

计算机视觉(cv)基于高层api实现宝石分类(代码片段)

【计算机视觉(CV)】基于高层API实现宝石分类(文章目录)前言(一)、任务描述图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题宝石识别属于图像分类中的一个细分类问题实践平台:百度... 查看详情

计算机视觉方向cv,计算机视觉顶级会议

目录计算机视觉方向图像配准图像分割图像去噪图像放大 查看详情

计算机视觉(cv)基于卷积神经网络实现美食分类(代码片段)

【计算机视觉(CV)】基于卷积神经网络实现美食分类(文章目录)前言任务描述如何根据据图像的视觉内容为图像赋予一个语义类别是图像分类的目标,也是图像检索、图像内容分析和目标识别等问题的基础。本实践旨在通过一... 查看详情

微软亚研cv大牛王井东离职,或将加入百度

...多位知情人士向雷锋网爆料,微软亚洲研究院计算机视觉大牛王井东已离职,或将加入百度。视觉计算组作为微软亚研的灵魂团队,陆续培养出了沈向洋、汤晓鸥、马毅、孙剑、何恺明等老中青三代计算机视觉引领者... 查看详情

计算机视觉(cv)基于全连接网络实现宝石分类(代码片段)

【计算机视觉(CV)】基于全连接网络实现宝石分类(文章目录)前言(一)、任务描述本次实践是一个多分类任务,需要将照片中的宝石分别进行识别,完成宝石的识别实践平台:百度AI实训平台-AIStudio、PaddlePaddle2.0.0动态图(二)、环... 查看详情

计算机视觉:图片的灰度处理和颜色反转(代码片段)

1.灰度处理1.1方法1还记得我的这篇博客的这个注释吗?也就是方法cv2.imread(),里面有两个参数,第一个参数为图片的路径,第二个参数为是否为彩色图片,如果把第二个参数改为0,会怎么样呢?importcv2... 查看详情