深度学习入门3

目标检测任务旨在识别图像中的物体并确定其位置,涉及分类和定位。早期的两阶段检测器如R-CNN逐步演变为更快更精确的FastR-CNN和FasterR-CNN。YOLO作为一阶段检测器,通过单一网络同时完成定位和分类。评价指标包括Precision-Recall曲线和AP/mAP。此外,文章还提到了语义分割和风格迁移等其他计算机视觉任务。
摘要由CSDN通过智能技术生成

目标检测任务

目标检测(Object Detection) 的任务是找出图像中所有感兴趣的目标(物体),不同于分类和回归问题,目标检测还需要确定目标在图像中的位置 (定位),而确定识别目标的类别和位置 (分类和定位),是计算机视觉领域的核心问题之一。目标检测任务关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置)。因此检测模型的输出是一个列表,列表的每一项使用一个数据组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。

目标检测基本思想

Two-stage Object Detection

最早的two stage检测器可以追溯到R-CNN。第一步是从输入图像中抽取感兴趣区域(Region of Interest),简称RoI,RoI中可以包含我们想要检测的目标,这一步其实相当于是对目标先定位,第二步是抽取每一个RoI的特征,不少CV任务都是在high-level特征上去做的,那时候CNN技术也兴起来了,所以,第二步就正好由一个CNN网络去抽取特征,第三步就是使用一个多分类SVM来识别每个RoI的类别,其实,第二步和第三步可以统一化到一个子框架里,即“分类”。RCNN看似走了三部,实际上是先后做了两件事,先定位,后识别。

随后,在R-CNN的基础上,又诞生了Fast R-CNN和Faster R-CNN,先后优化了R-CNN的速度和精度上的一些缺陷。Faster R-CNN彻底将two stage工作的范式定了下来:

  1. 使用Region Proposal Network(RPN)处理输入图像,最终输出若干个RoI(这当中利用了anchor box,但这不是核心,即便anchor free也可以做RPN网络,如FCOS)。这一步主要是完成了定位。
  2. 使用RoI pooling和若干fully connected layers完成对每一个RoI的类别识别。这一步主要是完成了分类。

One-stage Object Detection

最早的one-stage工作大概可以追溯到YOLOv1,它最大的亮点就是它只需要一个单一的网络就能够同时完成定位和分类两件事。因此,这样的网络训练起来必然能够真正地端到端、推理的时候速度也必然会更快。
YOLO的这种做法其实就是对two stage中的RPN的合理扩展。前面已经说过,RPN网络就干一件事,处理输入图像,最后输出包含前景信息的RoI,这里,我们稍微想得细一些,RPN其实它同时完成了定位和分类两件事,定位就是输出RoI的边界框坐标,分类就是判别是前景还是背景。就结果来看,我们说RPN是得到了RoI,完成了定位,但就过程而言,它还做了分类,只不过分类的分类是前背景,而不是我们感兴趣的对象。

YOLO仅靠一个网络输出同时包含了坐标和类别置信度的tensor。它的主要学习任务一共包括三个:前景背景的分类学习(objectness)、类别的分类学习(classification)和边界框坐标的学习(regression)。其中,objectness的学习是全局的,即feature map上的所有grid cell都要去参与学习,这是理所当然的,毕竟要区分前景和背景,这理应是个全局任务;classification和regression则不然,只有包含了前景信息的grid cell会去学习,背景是不学习的,这同样也是理所当然的,背景不需要分类和定位。

YOLO算法

在这里插入图片描述
YOLO算法图像处理的方式非常简单,首先先重设图片大小为 448 × 448 448 \times 448 448×448,再将图片送入卷积神经网络,最后依据模型对每个检测到的对象的置信度来生成最终结果。
具体实现方法是:
将一幅图像分成 S × S S \times S S×S个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。
每个网络需要预测B个BBox的位置信息和confidence(置信度)信息,一个bounding box对应着四个位置信息和一个confidence信息。confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息:
Pr(Object) × IOU pred truth \text{Pr(Object)} \times \text{IOU}^\text{{truth}}_\text{{pred}} Pr(Object)×IOUpredtruth
其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。
每个bounding box要预测 ( x , y , w , h ) (x, y, w, h) (x,y,w,h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则 S × S S \times S S×S个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是 S × S × ( 5 × B + C ) S \times S \times (5\times B+C) S×S×(5×B+C)的一个tensor。(注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。)
在这里插入图片描述
YOLO的网络结构如图所示:
在这里插入图片描述
在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
P r ( C l a s s i ∣ O b j e c t ) × P r ( O b j e c t ) × I O U p r e d t r u t h = P r ( C l a s s i ) × I O U p r e d t r u t h Pr(Class_i|Object) \times Pr(Object) \times IOU^{truth}_{pred} = Pr(Class_i) \times IOU^{truth}_{pred} Pr(ClassiObject)×Pr(Object)×IOUpredtruth=Pr(Classi)×IOUpredtruth
等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

算法评价方案

Precision-Recall

Precision表示精准率:
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP
Recall表示召回率:
R e c a l l = T P T P + F N Recall = \frac{TP}{TP + FN} Recall=TP+FNTP
在模型预测的时候,我们输出的预测结果是一堆[0,1]之间的数值,怎么把数值变成二分类?设置一个阈值,大于这个阈值的值分类为1,小于这个阈值的值分类为0。ROC曲线就是我们从[0,1]设置一堆阈值,每个阈值得到一个(Presession,Recall)对,纵轴为Presession,横轴为Recall,把所有的(Presession,Recall)对对连起来就得到了PR曲线。

AP & mAP

在PR关系中,是一个此消彼长的关系,但往往我们希望二者都是越高越好,所以PR曲线是右上凸效果越好(也有例外,有比如在风险场景当预测为1实际为0时需要赔付时,大致会要求Recall接近100%,可以损失Precision)。所以除了特殊情况,通常情况都会使用Precision-recall曲线,来寻找分类器在Precision与Recall之间的权衡。

AP就是Precision-recall 曲线下面的面积,通常来说一个越好的分类器,AP值越高。

还有一个mAP的概念,mAP是多个类别AP的平均值。这个mean的意思是对每个类的AP再求平均,得到的就是mAP的值,mAP的大小一定在[0,1]区间,越大越好。该指标是目标检测算法中最重要的一个。

其他任务

语义分割

语义分割是一种典型的计算机视觉问题,其涉及将一些原始数据(例如,平面图像)作为输入并将它们转换为具有突出显示的感兴趣区域的掩模。许多人使用术语全像素语义分割(full-pixel semantic segmentation),其中图像中的每个像素根据其所属的感兴趣对象被分配类别ID。
早期的计算机视觉问题只发现边缘(线条和曲线)或渐变等元素,但它们从未完全按照人类感知的方式提供像素级别的图像理解。语义分割将属于同一目标的图像部分聚集在一起来解决这个问题,从而扩展了其应用领域。

目前语义分割的应用领域主要有:

  1. 地理信息系统:可以通过训练神经网络让机器输入卫星遥感影像,自动识别道路,河流,庄稼,建筑物等,并且对图像中每个像素进行标注。(下图左边为卫星遥感影像,中间为真实的标签,右边为神经网络预测的标签结果,可以看到,随着训练加深,预测准确率不断提升。使用ResNet FCN网络进行训练)
  2. 无人车驾驶:语义分割也是无人车驾驶的核心算法技术,车载摄像头,或者激光雷达探查到图像后输入到神经网络中,后台计算机可以自动将图像分割归类,以避让行人和车辆等障碍。
  3. 医疗影像分析:随着人工智能的崛起,将神经网络与医疗诊断结合也成为研究热点,智能医疗研究逐渐成熟。在智能医疗领域,语义分割主要应用有肿瘤图像分割,龋齿诊断等。(下图分别是龋齿诊断,头部CT扫描紧急护理诊断辅助和肺癌诊断辅助)

风格迁移

风格迁移指的是两个不同域中图像的转换,提供一张风格图像,将任意一张图像转化为这个风格,并尽可能保留原图像的内容。简单来说便是输入一张随机噪音构成的底图,通过计算Style Loss和Content Loss,迭代update底图,使其风格纹理上与Style Image相似,内容上与原照片相似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值