课节2: 目标检测任务综述

715 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

1.2 目标检测算法基础知识

传统目标检测算法

在这里插入图片描述

  • 滑动窗口

    在这里插入图片描述

    候选区域(Proposal Region):每个AiBj所代表的矩形框,也被称为感兴趣区域(Region of Interest,RoI)

  • SIFT、HOG

    在这里插入图片描述

  • SVM、Adaboost

    在这里插入图片描述

  • NMS:过滤框

深度学习的优势

在这里插入图片描述

在这里插入图片描述

两阶段之RCNN:深度学习方法提取特征

在这里插入图片描述

两阶段之Fast/Faster-RCNN

在这里插入图片描述

  • 引入RoI Pooling操作,解决重复特征提取问题
  • 分类和回归损失统一在同一个框架中
  • 通过SS(selective search)提取候选框,速度慢,不是端到端

在这里插入图片描述

  • 通过RPN(Region proposal network)学习候选区域
  • 提高了精度,速度快

Anchor和Anchor-Based方法

  • Anchor(锚框):
    • 预先设定好比例的一组候选框集合
    • 滑动窗口提取
  • Anchor Based Methods:
    • 使用Anchor提取候选目标框
    • 在特征图上的每一个点,对Anchor进行分类和回归

在这里插入图片描述

Anchor-Based方法:两阶段

在这里插入图片描述

  • 两阶段方法:
    • 先使用anchor回归候选目标框,划分前景和背景
    • 使用候选目标框进一步进行回归和分类,输出最终目标框和对应的类别
    • R-CNN系列
      • RCNN、Fast-RCNN、FasterRCNN
      • FPN、CascadeRCNN、LibraRCNN,...

Anchor-Based方法:一阶段

在这里插入图片描述

  • 一阶段方法:
    • 直接对anchor回归和分类最终目标框和类别
    • 算法:
      • YOLOv2 YOLOv3
      • SSD、RetinaNet

Anchor缺点

在这里插入图片描述

Anchor-Free方法

在这里插入图片描述

  • 不再使用预先设定的anchor,通常通过预测目标的中心或者角点,对目标进行检测
  • 基于多关键点联合表达的方法:
    • CornerNet/CornerNet-lite
    • CornerNet:Keypoint Triplets for Object Detection
    • RepPoints
  • 基于中心区域预测的方法:
    • FCOS
    • CornerNet:Object as Points

深度学习算法小结

在这里插入图片描述

三类算法对比

Anchor-Based单阶段Anchor-Based两阶段Anchor-Free
网络结构简单复杂简单
精度更优较优
预测速度稍慢
超参数较多相对少
扩展性一般一般较好

基础概念

  • BBox:Bounding Box,边界框
    • 绿色为人工标注的groud-truth,红色为预测结果
    • xyxy:左上+右下
    • xywh:左上+宽高

在这里插入图片描述

  • Anchor:锚框
    • 人为设定不同长宽比、面积的先验框
    • 在单阶段SSD检测算法中也称Prior box

在这里插入图片描述

  • RoI:Region of Interest

    • 特定的感兴趣区域
  • Region Proposal

    • 候选区域/框
  • RPN:Region Proposal Network

    • Anchor-based的两阶段提取候选框的网络
  • IoU:Intersaction over Union

    • 评价预测框的质量,IoU越大则预测框与标注越接近

    在这里插入图片描述

  • mAP

    • TP:IoU>=阈值(如0.3)检测框数量

    • FP:IoU<阈值(如0.3)检测框数量

    • FN:没有检测到的GT数量

    • 举例:

      输入样本:某个类别10个框

      预测结果:预测到8个框,6个正确,2个错误

      Precision:6 / 8 = 0.75

      Recall:6 / 10 = 0.6

      在这里插入图片描述

    • P-R曲线:以Precision、Recall为纵、横坐标的曲线。

    • AP(Average Precision):某一类P-R曲线下的面积

    • mAP(mean Average Precision):所有类别AP平均

    在这里插入图片描述

  • NMS:非极大值抑制,Non-Maximum Suppression

    在这里插入图片描述

    def nms(dets, thresh):
        # boxes位置
        x1 = dets[:, 0]
        y1 = dets[:, 1]
        x2 = dets[:, 2]
        y2 = dets[:, 3]
        # boxes scores
        scores = dets[:, 4]
        
        areas = (x2 - x1 + 1) * (y2 - y1 + 1) # 各box的面积
        order = scores.argsort()[:: -1] # boxes按照score排序
        
        keep = [] # 记录保留下的boxes
        while order.size > 0;
        	i = order[0] # score最大的box对应的index
            keep.append(i) # 将本轮score最大的box的index保留
            
            # 计算剩余boxes与当前box的重叠程度IoU
            xx1 = np.maximum(x1[i], x1[order[1:]])
            yy1 = np.maximum(y1[i], y1[order[1:]])
            xx2 = np.maximum(x2[i], x2[order[1:]])
            yy2 = np.maximum(y2[i], y2[order[1:]])
            
            w = np.maximum(0.0, xx2 - xx1 + 1)
            h = np.maximum(0.0, yy2 - yy1 + 1)
            inter = w * h
            # IoU
            ovr = inter / (area[i] + area[order[1: ]] - inter)
            
            # 保留IoU小于设定阈值的boxes
            inds = np.where(ovr <= thresh)[0]
            order = order[inds + 1]
        return keep
    

常用开源数据集

数据集类别数train图片数,box数val图片数,box数boxes/Image
Pascal VOC-2012205717,1.3万+5823,1.3万+2.4
COCO80118287,4万+5000,3.6万+7.3
Object365365600k,9623k38k,479k16
OpenImages185001643042,86万+100000,69.6万+7.0
  • 驱动算法发展
  • 业务场景提供预训练
  • PaddleDetection提供676类预训练,包含大多数物体,直接使用 或 作为预训练提升业务精度

github.com/rafaelpadil…

1.3 PaddleDetection

PaddleDetection端到端开发套件

在这里插入图片描述

  • 自由切换骨干网络、损失函数等,来大幅提升网络性能
  • 预置有效优化策略,用户可直接快速试用

在这里插入图片描述

PaddleDetection主要特点

在这里插入图片描述

模块化设计

在这里插入图片描述

丰富模型库

在这里插入图片描述

主要模型效果一览

在这里插入图片描述

其他特色模型

在这里插入图片描述

端到端的能力

在这里插入图片描述

支持VisualDL辅助模型优化

  • 可视化训练过程中的指标,如Loss和mAP,实时监控模型训练过程。

在这里插入图片描述

支持模型压缩

github.com/PaddlePaddl…

在这里插入图片描述

支持移动端部署

在这里插入图片描述

支持服务部署

在这里插入图片描述