前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >目标检测模型学习笔记

目标检测模型学习笔记

作者头像
嵌入式视觉
发布2022-09-05 14:12:50
6380
发布2022-09-05 14:12:50
举报
文章被收录于专栏:嵌入式视觉

Contents

目标检测的数据增强

  • 有应用在整张图片上、但不会影响边界框的那种变换,比如从图像分类里借来的颜色变换 (Color Transformations)。
  • 也有不影响整张图片、但改变边界框位置的那种变换,比如图像平移 (Translating) 或剪切 (Shearing) 。
  • 还有只针对边界框里的目标,而进行的变换

比起图像分类任务的数据扩增,目标检测的难点在于,要保持边界框和发生形变的图像之间的一致性 (Consistency) 。

目标检测基本理论

CNN中的卷积操作

  • 对于某个卷积层,无论输入图像有多少个通道,输出图像通道数总是等于卷积核数量!
  • 对于某个卷积层,无论输入图像有多少个通道,输出图像通道数总是等于卷积核数量!
  • 过滤器的深度其实就是过滤器的数量!
  • 线性回归就是给定输入的特征向量X, 学习一组参数W, 使得经过线性回归后的值跟真实值Y非常接近,即Y=WX。

卷积神经网络层数

  • VGG16是卷积层conv+全连接层FC层数是16层,ResNet50是卷积层conv+全连接层FC层数是50层,这样命名是因为池化层不产生权重参数。后面的数字代表权值层数量。
  • resnet残差网络可以找到网络训练的最佳层数 。

目标检测经典模型

目标检测经典模型分为:两阶段(2-stage)检测模型和单阶段(1-stage)检测模型。 2-stage检测模型分成两个步骤解决目标检测问题:

  • 生成可能区域(Region Proposal) & CNN提取特征
  • 分类器识别目标类别并修正检测框位置

R-CNN网络结构

R-CNN可被抽象为两个过程:一是基于图片提出若干个可能包含待检测物体的区域(Region Proposal),使用的算法是Selective Search算法;二是在提出的这些区域上运行当时表现好的分类网络(AlexNet),以得到每个区域物体的类别。

Fast RCNN结构

上图是Fast R-CNN的架构。图片经过feature extractor得到feature map, 同时在原图上运行Selective Search算法并将RoI(Region of Interset,实为坐标组,可与Region Proposal混用)映射到到feature map上,再对每个RoI进行RoI Pooling操作便得到等长的feature vector,将这些得到的feature vector进行正负样本的整理(保持一定的正负样本比例),分batch传入并行的R-CNN子网络,同时进行分类和回归,并将两者的损失统一起来。 注:说句题外话,由Selective Search算法提取的一系列可能含有object的boudning box,这些通常称为region proposals或者region of interest(ROI)。

Faster R-CNN网络结构

Faster R-CNN结构图解析

图1

图2

上图1是 Faster R-CNN的流程图,Faster R-CNN的流程图与Fast R-CNN相同,采用外部候选区域方法代替了内部深层网络。 上图2是python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构(pascal_voc/VGG16/faster_rcnn_alt_opt/faster_rcnn_test.pt)

Region Proposal Networks(RPN)理解

图3

经典的检测方法生成检测框都非常耗时,如OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;或如R-CNN使用SS(Selective Search)方法生成检测框。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。

上图3展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得foreground和background(检测目标是foreground),下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合foreground anchors和bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。 其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的foreground anchor,哪些是没目标的backgroud。所以,仅仅是个二分类而已!

Faster R-CNN总结
此图像的alt属性为空;文件名为image-15.png
此图像的alt属性为空;文件名为image-15.png

图4

Faster R-CNN是2-stage方法的奠基之作,提出RPN网络取代Selective Search算法使得检测任务可以由神经网络端到端地完成。粗略的讲,Faster R-CNN = RPN + Fast R-CNN,跟RCNN共享卷积计算的特性使得RPN引入的计算量很小,使得Faster R-CNN可以在单个GPU上以5fps的速度运行,而在精度方面达到SOTA(State of the Art,当前最佳)。  其最大贡献在于提出Regional Proposal Networks,替代之前的SS算法,使得训练变成端到端的神经网络训练。

RPN网络将这一任务建模为二分类(是否为物体)的问题。

  • 算法第一步是在一个滑动窗口上生成不同大小和长宽比例的anchor box(如上图右边部分),取定IoU的阈值,按Ground Truth标定这些anchor box的正负。于是,传入RPN网络的样本数据被整理为anchor box(坐标)和每个anchor box是否有物体(二分类标签)。RPN网络将每个样本映射为一个概率值和四个坐标值,概率值反应这个anchor box有物体的概率,四个坐标值用于回归定义物体的位置。最后将二分类和坐标回归的损失统一起来,作为RPN网络的目标训练。 
  • 第二步由RPN得到Region Proposal在根据概率值筛选后经过类似的标记过程,被传入R-CNN子网络,进行多分类和坐标回归,同样用多任务损失将二者的损失联合。 

RPN每个滑动位置默认生成9个框的由来:By default we use 3 scales and 3 aspect ratios, yielding k=9 anchors at each sliding position.

  1. 在RPN的时候,已经对anchor做了一遍NMS,在RCNN测试的时候,还要再做一遍。
  2. 在RPN的时候,已经对anchor的位置做了回归调整,在RCNN阶段还要对RoI再做一遍。
  3. 在RPN阶段分类是二分类,而Fast RCNN阶段是21分类(论文中)。
Faster R-CNN四类损失

虽然原始论文中用的4-Step Alternating Training 即四步交替迭代训练。然而现在github上开源的实现大多是采用近似联合训练(Approximate joint training),端到端,一步到位,速度更快。  在训练Faster RCNN的时候有四个损失

  1. RPN 分类损失:anchor是否为前景(二分类)
  2. RPN位置回归损失:anchor位置微调
  3. RoI 分类损失:RoI所属类别(21分类,多了一个类作为背景)
  4. RoI位置回归损失:继续对RoI位置微调  四个损失相加作为最后的损失,反向传播,更新参数。
Faster RCNN解读参考资料

一文读懂Faster RCNN 从编程实现角度解读Faster RCNN

Mask R-CNN结构

Mask R-CNN结构解析

Mask R-CNN (regional convolutional neural network) is a two stage framework: the first stage scans the image and generates proposals(areas likely to contain an object). And the second stage classifies the proposals and generates bounding boxes and masks.

  • Mask R-CNN基本结构:与Faster RCNN采用了相同的two-state步骤:首先是找出RPN,然后对RPN找到的每个RoI进行分类、定位、并找到binary mask。这与当时其他先找到mask然后在进行分类的网络是不同的。
  • Mask R-CNN的损失函数: $$
  • Mask的表现形式(Mask Representation):因为没有采用全连接层并且使用了RoIAlign,可以实现输出与输入的像素一一对应。
  • RoIAlign:RoIPool的目的是为了从RPN网络确定的ROI中导出较小的特征图(a small feature map,eg 7×7),ROI的大小各不相同,但是RoIPool后都变成了7×7大小。RPN网络会提出若干RoI的坐标以[x,y,w,h]表示,然后输入RoI Pooling,输出7×7大小的特征图供分类和定位使用。问题就出在RoI Pooling的输出大小是7×7上,如果RON网络输出的RoI大小是8*8的,那么无法保证输入像素和输出像素是一一对应,首先他们包含的信息量不同(有的是1对1,有的是1对2),其次他们的坐标无法和输入对应起来(1对2的那个RoI输出像素该对应哪个输入像素的坐标?)。这对分类没什么影响,但是对分割却影响很大。RoIAlign的输出坐标使用插值算法得到,不再量化;每个grid中的值也不再使用max,同样使用差值算法。

FPN结构理解

  • RPN网络结构就介绍到这里,总结起来就是: 生成anchors -> softmax分类器提取fg anchors -> bbox reg回归fg anchors -> Proposal Layer生成proposals。
  • RPN网络生成的proposals的方法:对foreground anchors进行bounding box regression,这样获得的proposals也是大小形状各不相同。
  • FPN(Feature Pyramid Network)算法可以同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式不同

目标检测模型测试与训练技巧

模型选择

常用模型:Faster RCNN、Mask RCNN、Retinanet、Cascade RCNN等。  当前检测竞赛圈的通用配置还是 Cascade-R-CNN + ResNeXt/ResNet 系列 + FPN+DCN 2

数据预处理

  • 离线数据增强
  • 在线数据增强(图像亮度、光照强度调整、高斯模糊、上下左右翻转、旋转45°、仿射变换)
  • 数据过采样(对难以坚持的类别进行过采样)
  • mixup:将两张图按照一定的比例混合在一起,来源于李沐的论文。比如在在工业类缺陷检测或者违禁物品检测中,常常会给出一些不含有待检测目标的正常图像,可以将含有目标的图像和随机选取的正常图像进行 mixup(随机意味着更多的组合~),这样数据量又上来了。
  • 填鸭式数据扩增:所谓填鸭式,就是将一些目标(也可以是误捡的)扣出来,放到没有目标的图上去,增加图像的鲁棒性。比如有人在钢筋识别的时候,有一些小石子和吊机容易被误判成钢筋,索性就选了一些图,把这些伪目标填充合理的位置上,效果就是没有再误判过了。

预训练模型

  • 使用ImageNet预训练的backbone
  • 使用coco预训练的完整检测模型权重(效果更佳)

训练策略

  • 预训练模型训练1-4epoch,解冻模型、训练完整模型一定epoch
  • 每隔一定epoch,学习率衰减2/10倍

多尺度训练

每次加载图像都从图像size列表(比如514+i*32, 1024)里,随机选一个尺寸读取图像。即每隔一次iter(每次load image data),都随机选一个图像尺寸训练。

lr选择

检测任务中常用的计算方法是:lr = 0.02 / 8 x num_gpus x img_per_gpu / 2

损失函数选择

Focal Loss 这是 CV 中根据实验结果调整损失函数最先考虑的一个,论文: Focal Loss for Dense Object Detection, 主要是针对模型拟合困难的样例或者样本不均衡的样例,在图像分类中常用作最终的损失函数,直接进行优化,而在目标检测中却有两个选择,一个是在 RPN 层使用 FocalLoss,这样可以缓解由于目标占比较少导致生成的 anchor 正负样本比例失衡;另一种就是类似图像分类一样,在 bbox_head 中使用,mmdetection 中的相应配置。

TTA测试数据增强

效果有提升,但是耗时较长

Soft-NMS

Soft-NMS 改进了之前比较暴力的 NMS,当 IOU 超过某个阈值后,不再直接删除该框,而是降低它的置信度 (得分),如果得分低到一个阈值,就会被排除;但是如果降低后仍然较高,就会被保留。实现细节移步:NMS 与 soft NMS。

参考资料

Kaggle实战目标检测奇淫技巧合集

目标检测基本概念

准确率、召回率与IoU、mAP

混淆矩阵:

  • True Positive(真正例, TP):将正类预测为正类数.
  • True Negative(真负例, TN):将负类预测为负类数.
  • False Positive(假正例, FP):将负类预测为正类数 → 误报 (Type I error).
  • False Negative(假负例子, FN):将正类预测为负类数 → 漏报 (Type II error).

查准率(准确率)P = TP/(TP+FP) 查全率(召回率)R = TP/(TP+FN) 准确率描述了模型有多准,即在预测为正例的结果中,有多少是真正例;召回率则描述了模型有多全,即在为真的样本中,有多少被我们的模型预测为正例。

不同的计算机视觉问题,对两类错误有不同的偏好,常常在某一类错误不多于一定阈值的情况下,努力减少另一类错误。在目标检测中,mAP(mean Average Precision)作为一个统一的指标将这两种错误兼顾考虑。 具体来说就是,在目标检测中,对于每张图片检测模型会输出多个预测框(远超真实框的个数),我们使用IoU(Intersection Over Union,交并比)来标记预测框是否预测准确。标记完成后,随着预测框的增多,查全率R总会上升,在不同查全率R水平下对准确率P做平均,即得到AP,最后再对所有类别按其所占比例做平均,即得到mAP指标。

交并比IOU

交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。最理想情况是完全重叠,即比值为1。 计算公式如下:

代码实现如下:

代码语言:javascript
复制
def calculateIoU(candidateBound, groundTruthBound):
    cx1 = candidateBound[0]
    cy1 = candidateBound[1]
    cx2 = candidateBound[2]
    cy2 = candidateBound[3]
    gx1 = groundTruthBound[0]
    gy1 = groundTruthBound[1]
    gx2 = groundTruthBound[2]
    gy2 = groundTruthBound[3]
    carea = (cx2 - cx1) * (cy2 - cy1) #C的面积
    garea = (gx2 - gx1) * (gy2 - gy1) #G的面积
    x1 = max(cx1, gx1)
    y1 = max(cy1, gy1)
    x2 = min(cx2, gx2)
    y2 = min(cy2, gy2)
    w = max(0, (x2 - x1))
    h = max(0, (y2 - y1))
    area = w * h #C∩G的面积
    iou = area / (carea + garea - area)
    return iou

NMS介绍

在目标检测中,常会利用非极大值抑制算法(NMS,non maximum suppression)对生成的大量候选框进行后处理,去除冗余的候选框,得到最佳检测框,以加快目标检测的效率。其本质思想是其思想是搜素局部最大值,抑制非极大值。非极大值抑制,在计算机视觉任务中得到了广泛的应用,例如边缘检测、人脸检测、目标检测(DPM,YOLO,SSD,Faster R-CNN)等。即如图 2所示实现效果,消除多余的候选框,找到最佳的bbox。

NMS过程

以上图为例,每个选出来的Bounding Box检测框(既BBox)用(x,y,h,w, confidence score,Pdog,Pcat)表示,confidence score表示background和foreground的置信度得分,取值范围[0,1]。Pdog,Pcat分布代表类别是狗和猫的概率。如果是100类的目标检测模型,BBox输出向量为5+100=105。

NMS算法

NMS主要就是通过迭代的形式,不断地以最大得分的框去与其他框做IoU操作,并过滤那些IoU较大的框。

目标检测算法基本操作

ROI Pooling与ROI Align

总结:知道了RoiPooling和RoiAlign实现原理,在以后的项目中可以根据实际情况进行方案的选择;对于检测图片中大目标物体时,两种方案的差别不大,而如果是图片中有较多小目标物体需要检测,则优先选择RoiAlign,更精准些….

参考资料

ROI Pooling与ROI Align笔记

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目标检测的数据增强
  • 目标检测基本理论
    • CNN中的卷积操作
      • 卷积神经网络层数
      • 目标检测经典模型
        • R-CNN网络结构
          • Fast RCNN结构
            • Faster R-CNN网络结构
              • Faster R-CNN结构图解析
              • Region Proposal Networks(RPN)理解
              • Faster R-CNN总结
              • Faster R-CNN四类损失
              • Faster RCNN解读参考资料
            • Mask R-CNN结构
              • Mask R-CNN结构解析
            • FPN结构理解
            • 目标检测模型测试与训练技巧
              • 模型选择
                • 数据预处理
                  • 预训练模型
                    • 训练策略
                      • 多尺度训练
                        • lr选择
                          • 损失函数选择
                            • TTA测试数据增强
                              • Soft-NMS
                                • 参考资料
                                • 目标检测基本概念
                                  • 准确率、召回率与IoU、mAP
                                    • 交并比IOU
                                      • NMS介绍
                                        • NMS算法
                                        • 目标检测算法基本操作
                                          • ROI Pooling与ROI Align
                                            • 参考资料
                                        相关产品与服务
                                        图像识别
                                        腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档