摘要:在这之前我们已经介绍了神经网络、卷积神经网络的原理、应用以及常见的分类神经网络模型。但在实际情况中,我们很难直接得到一个只包含待检测物体的图像来进行分类。本文旨在介绍常用的目标检测模型,目标检测的任务是除了给出待检测目标的类别信息外,还需要给出物体在图像中的位置,并用一个最小的矩形框将其包围起来,即分类+定位。自从卷积神经网络被提出以来,目标检测领域也得到了飞速的发展,从Faster-RCNN到YOLO再到SSD算法大大提高了目标检测的准确率,将目标检测任务推向了一个新的高度。

一、目标检测任务

在介绍目标检测网络之前,我们要了解目标检测的任务是什么,它要完成什么工作,以及评价目标检测效果的指标有哪些。

1.1 目标检测任务描述

目标检测是图像处理学科的一个重要难题,检测任务除了要实现目标分类外还要在输入图片中找出存在的物体的类别和位置(可能存在多种物体)。物体检测可能会存在多个检测目标,这不仅需要我们判别出各个物体的类别,而且还要准确定位出物体的位置,如下图所示:

1.2目标检测任务评价指标

对于目标分类,我们可以通过评测对于训练样本的输出预测标签与样本的实际标签的对比来评价算法的准确性。对于目标检测而言,为了对检测算法的效果进行评价,有一些常用的概念,包括Bounding
Box
IoU准确率Accuracy查准率Precision查全率RecallAPmAP等。下面来一一介绍这些在目标检测中常用的衡量指标。、

  • Bounding Box (bbox)

Bbox概念比较简单,它表示包含物体的最小矩形,该物体在最小矩形内部。其用一组坐标 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)来表达,其中, x , y x,y x,y表示bbox的左下角的坐标, w , h w,h w,h表示矩形的宽和高。当然不同的数据集有不同的坐标形式。

  • Intersection over Union(IoU)

IoU表示两个矩形区域的重合度,是目标检测的评价指标之一,在目标检测算法中具有指导意义。假设存在两个矩形区域 R R R和 R ′ R' R′,IoU的计算公式如下:

O ( R , R ′ ) = ∣ R ∩ R ′ ∣ ∣ R ∪ R ′ ∣ O\left( R,R^{'} \right) = \frac{\left| R \cap R^{'} \right|}{\left| R \cup R^{'} \right|} O(R,R′)=∣R∪R′∣∣∣∣​R∩R′∣∣∣​​

IoU表示候选框BBOX与标定框GT(Ground Truth)的重合程度,在实际应用时,通过对比算法给定的BBOX与标定框的IoU来确定该标定框是否被采用。

  • 精度Accuracy、查准率Precision及查全率Recall

对于分类任务而言,我们有多种评价指标,包括精度Accuracy、查准率Precision及查全率Recall等。假设有一个分类器,其分类结果有如下四种情况:

预测为1类且标签为1类(TP) 预测为1类但标签不为1类(FP)
预测不为1类但标签为1类(FN) 预测不为1类且标签不为1类(TN)

很自然地,我们会想到使用精度来评价算法性能。精度表示全局的准确程度,其用分类正确的样本除以所有的样本数来表示,即:精度=(TP+TN)/(TP+TN+FP+FN)。但是准确率有时候不能完全反映一个算法的性能,还需要其他的评价指标来补充。

查准率表示分类器分类出来的正确正样本数与分类器分类出来的所有正样本总数之比,即:准确率=TP/(TP+FP)

查全率表示分类器分类出来的正确正样本数与实际为正样本总数之比,即:召回率Recall=TP/(TP+FN)

举个例子,假如我们有1000个样本,其中只有1个肺结核病例,其余999个是正常影像图像,那么我们训练了一个分类器,它对这1000个样本的预测结果全部为肺结核,那么它的分类精度为0.01%,对肺结核的分类准确率为0.01%,对肺结核的召回率却为100%。从上例可以看出查准率与查全率通常是一对相互矛盾的指标。一般而言,当查全率比较高时,查准率通常比较低;当查准率高时,查全率通常较低。在实际的模型评估中,仅用Precision或Recall两个值是不够的,通常使用Recall-Precision曲线来表征分类器的性能。如果一个分类器的性能较好,那么它通常有如下特征:在Recall增长的同时,Precision的值保持在一个很高的水平。而性能较差的分类器则可能会损失很多的Precision才能换来Recall值的提高。Precision-Recall曲线如下图所示:

之前一直在说什么Precision什么Recall,但是这好像是针对目标分类的指标啊,和目标检测没有关系啊?我们直接通过下面这个例子来说明,假设一个数据集的某个类总共有7张图片,绿色框表示我们标定的真实标定框(GT),红色框表示我们的网络的输出预测结果,其目标检测结果如下:

对每个红色的预测框我们的网络都会给定一个置信度Confidence来表示检测结果的得分,如果检测框与目标框的IoU大于0.5,我们就将其记为TP,否则记为FP。如果有多个检测框与目标框的IoU大于0.5,则将检测框与目标框的IoU最大的那个记为TP,注意这里是IoU最大,而不是Confidence最大。如下表所示:

有了TP和FP以及检测图像中标定框的个数,我们就能计算Precision和Recall了,将计算结果按照Confidence进行排序,并分别随着Confidence的增加计算TP和FP的和,Acc TP和ACC FP,如下表所示。我们以第一个为例来计算Precision和Recall,由于7幅图中共有15个标定框,所以TP+FN=15。

P r e c i s i o n = ACC TP ACC TP + ACC FP = 1 1 = 1 Precision = \frac{\text{ACC TP}}{\text{ACC TP + ACC FP}} = \frac{1}{1} = 1 Precision=ACC TP + ACC FPACC TP​=11​=1

R e c a l l = ACC TP T P + F N = 1 15 = 0.0666 Recall = \frac{\text{ACC TP}}{TP + FN} = \frac{1}{15} = 0.0666 Recall=TP+FNACC TP​=151​=0.0666

  • AP (Average Precision) 及 mAP (mean Average Precision)

有了Precision和Recall就可以计算AP及mAP了,尽管PR曲线可以反映出检测算法的性能,但是总感觉不太直观,AP就是综合了Precision和Recall的一个目标检测算法的一个评价指标。计算AP有三种不同的方法,这里只介绍VOC2007方法,对其他方法有兴趣的同学可以阅读这里。AP的计算方式是给定一组阈值[0,0.1,0.2,…,1],对于recall大于每一个阈值我们都能得到一个对应的最大的precision。这样我们就能得到11个precision,然后计算这11个precision即为AP,这种方法也称为11点插值平均精度(11-point interpolated average precision)。上例中的AP按这种方法的结果:

AP = 1 11 ( 1 + 0.6666 + 0.4285 + 0.4285 + 0.4285 + 0 + 0 + 0 + 0 + 0 + 0 ) = 26.84 % {\text{AP} = \frac{1}{11}\left( 1 + 0.6666 + 0.4285 + 0.4285 + 0.4285 + 0 + 0 + 0 + 0 + 0 + 0 \right)}{= 26.84\%} AP=111​(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0)=26.84%

但是由于我们的数据集通常不止包含一个类别,比如VOC中有20个类,COCO数据集中有80个类别,所以我们使用mAP来衡量整个数据集的性能。mAP的计算就比较简单了,就是分别计算不同类别的AP的值,然后再对其求平均值就得到了mAP。

目标检测的基本任务及一些常用的概念这里基本就介绍完了,下面我们具体来针对一些经典的算法来全面的了解基于深度学习的目标检测是怎么实现的,其中的精彩程度可是要远超目标分类算法。

参考文献

[1] Object Detection–RCNN,SPPNet,Fast RCNN,FasterRCNN论文详解

[2] 目标检测—评价指标

[3] AP、mAP计算解析

[4] 非极大值抑制(Non-Maximum Suppression,NMS)

目标检测网络的介绍及应用(一) -- 目标检测任务相关推荐

  1. 检测网络耗时_无人机替代桥梁检测车检测桥梁的可行性分析

    在桥梁检测中,目前比较常见的是汽车式桥梁检测车,但是用汽车式桥梁检测车存在耗时.劳动密集.成本高昂等的问题.近年来,无人机开始被尝试用于桥梁检测. 操作人员正在操作无人机执行桥梁检测作业 传统汽车式桥 ...

  2. NeurIPS 2020 | 基于协同集成与分发的协同显著性目标检测网络

    论文题目:CoADNet: Collaborative Aggregation-and-Distribution Networks for Co-Salient Object Detection 论文 ...

  3. UWP 检测网络状态

    最近发现Community Toolkit有了网络辅助类,貌似很早就有了... 很不错,还是用.给大家分享一下. 1. 检测网络是否可用 2. 检测网络是否是计费模式? 3. 检测网络接入类型 4. ...

  4. 拐点检测常用算法介绍(Ruptures)

    拐点检测常用算法介绍 最近在学习拐点检测的相关问题, 发现 C.Truong 的论文 对拐点检测的整个流程和目前主流的一些算法介绍的比较清楚,所以在这里进行了一些记录以及总结,并且对 Truong 发 ...

  5. Android移动开发检测网络状态并使用BroadcastReceiver(广播接收者)进行接收网络变化的后续处理

    在Android开发中,许多功能需要网络连接,所以在开发过程中需要进行手机网络的检测.而每做一个App,就要进行检测,那么我直接将检测网络状态的功能封装成一个类. 检测网络状态所需要的Api: Con ...

  6. 【综述】MV3D-Net、AVOD-Net 用于自动驾驶的多视图3D目标检测网络

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 MV3D-Net 融合了视觉图像和激光雷达点云信息:输入数据有三种,分别是点云俯视图.点云前视图 ...

  7. 一种投影法的点云目标检测网络

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 文章导读 本文来源于早期的一篇基于投影法的三维目标检测文章<An Euler-Region-Pr ...

  8. 【论文解读】MV3D-Net、AVOD-Ne用于自动驾驶的多视图3D目标检测网络

    作者:黎国溥,3D视觉开发者社区签约作者,CSDN博客专家,华为云-云享专家. 前言 MV3D-Net 融合了视觉图像和激光雷达点云信息:输入数据有三种,分别是点云俯视图.点云前视图和RGB图像.通过 ...

  9. 丢弃Transformer!旷视和西安交大提出基于FCN的端到端目标检测网络

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文作者:王剑锋  | 编辑:Amusi https://zhuanlan.zhihu.com ...

最新文章

  1. 【Android】html转义字符
  2. python php linux-linux怎么运行python?
  3. 二进制 java Class文件解析实例
  4. 使用lvs搭建负载均衡集群
  5. 移动互联网下一步:“深度学习”配合大数据
  6. XRPC接口双向调用
  7. Linux之dd命令详解
  8. 2018秋季C语言学习总结
  9. Spring Cloud实战小贴士:Feign的继承特性(伪RPC模式)
  10. Java记录 -9- 面向对象之封装
  11. SAP License:兼顾发展与成本:解构大中型企业ERP产品需求
  12. ionic中定义路由的问题
  13. [转载] [Python图像处理] 二十二.Python图像傅里叶变换原理及实现
  14. 开课吧Java教程:如何用listFiles()方法
  15. java fx choicebox_JavaFX使用ChoiceBox、ComboBox实现下拉列表
  16. python 物理引擎_第十六章:物理引擎
  17. jsoniter与原生json对比
  18. Java集合框架--学习目标 集合概念 Collection体系集合 Collection接口
  19. 谈判技巧——准备阶段
  20. Nmap入门:隐私刺探

热门文章

  1. [转](1条消息) 前端必知:针对高分辨率屏幕的样式优化(转载请删除括号里的内容)
  2. 净利率远低同行,诺威健康如何在CRO跑道上争排位?
  3. Excel表格列多选
  4. 概率论与数理统计 | (3) 随机变量
  5. 无人驾驶汽车系统入门(二十六)——基于深度学习的实时激光雷达点云目标检测及ROS实现
  6. JVM_06 内存模型(JMM)篇
  7. 深度学习 01 探索深度学习
  8. Fastboot的使用简单教程
  9. 利用ps生成闪电特效
  10. 20. Python的字典嵌套