基于深度学习的目标检测算法概述

0. 写在前面

        在开始目标检测算法学习之前,先建立基于深度学习的目标检测算法大局观,了解目标检测算法的发展史,在了解背景的前提下,能更好地提升代入感,让理论知识理解起来不会枯燥无味!废话不多说,直接上干货。

下一篇:Yolo系列算法-理论部分-YOLOv1-CSDN博客

1. What is Object-Detection?
       1.1 简介

        目标检测的目的就是找出图像中所有感兴趣的目标(物体Object)确定它们的位置和大小,是机器视觉领域的核心问题之一。

        机器视觉领域遇到的难点:各类别的物体有着不同的外观、形状、姿态,实际生活中还有不同光照和遮挡等因素的干扰,让目标的检测的难度在无形中增长。

        1.2 任务       

        计算机视觉中关于图像识别的四大类任务

  1. Classification(分类)-目标是什么?:在一张图片或者视频中判断里面包含什么类别的目标;
  2. Location(定位)-目标在哪里?:定位出目标在图像或者视频中的位置;
  3. Detection(检测)-是什么?在哪里?:定位出目标的位置,并且知道目标是什么;
  4. Segmentation(分割)-划定每个像素属于哪个目标或者场景:实例分割(Instance-level)和场景分割(Scene-level)。

        目标检测解决的核心问题

  1. 目标可能出现在图像中的任何位置;
  2. 目标有各种不同的大小;
  3. 目标可能有各种不同的形状;
  4. 不同目标的矩形框有不同的宽高比,采用经典的滑动窗口+图像缩放解决方案时间成本太高。
        1.3 应用
  1. 行人检测:在视频监控,人流量统计,自动驾驶中都有重要的地位;
  2. 车辆检测:智能交通,视频监控,自动驾驶中有着重要的地位,车流量统计,车辆违章的自动分析等,在自动驾驶中,首先得知道道路在哪,周围的车、人和障碍物,难度更大一些;
  3. 交通灯、行驶规则标志的识别,红绿灯的状态等等;
  4. 在机器视觉领域,工业中材质表面的缺陷检测,硬件电路表面的缺陷检测等等;
  5. 农作物表面的害虫识别等等;
  6. 人工智能在医疗上的医学影像病变部位的检测和自动化识别等。
2. ALG in Object-Detection
        2.1 DPM算法(Deformable Part Model)可变形的组件模型

        在深度卷积神经网络出来之前,DPM是目标检测领域最优秀的算法之一,基本思想是先提取DPM人工特征,再用LatentSVM分类;该算法的局限形在于:

  1. DPM特征计算复杂,计算速度很慢;
  2. 人工特征对旋转、拉伸、视角变化的物体检测效果差;
        2.2 基于深度神经网络DCNN的目标检测算法发展路线图 

     

        图1 基于深度学习的目标检测算法发展路线图

        2.3 Alexnet

        最早的深度神经网络结构,2006年Hinton提出,直到2012年,随着数据量的增大,深度神经网络通过丰富的训练数据和充分的训练,自主学习特征,特征的质量远超人工提取的特征。

        2.4 OverFeat

        Alexnet的改进版,提出使用同一个卷积网络完成多个任务的方法,充分利用卷积神经网络提取功能,把分类过程中提取到的特征同时用于定位检测等各种任务,只需要修改网络的最后几层,不需要从头开始训练整个网络的参数,即CNN网络结构中特征共享的优势。

优点:

  1. 共享卷积层,用于多任务学习;
  2. 全卷积网络的思想;
  3. 特征层进行滑窗设计,避免大量重复运算。

缺点:

  1. 采用多尺度贪婪的滑窗策略,导致计算量很大
  2. 没有考虑多尺度特征融合,对小目标效果差,整体的检测效果不太好。

        卷积神经网络输入端图像的大小固定,第一个全连接层和卷积层之间的权重矩阵大小都是固定的;但是卷积层、全连接层本身对输入图像的大小没有限制。在做目标检测时,卷积网络面临的输入候选区域图像大小尺寸是不固定的。

        2.5 R-CNN(13s/张-GPU || 53s/张 -CPU )

        Region CNN,目标检测的里程碑之作,指明了目标检测的大致路径,后续的深度学习领域的算法基本都是基于此算法基础上的改进。

图2 R-CNN算法流程

        R-CNN检测算法流程

  1. 使用Selective Search算法从待检测图像中提取2000个左右的区域候选框,这些候选框中可能包含目标;
  2. 把所有候选框缩放成固定大小(227×227);
  3. 使用DCNN提取每一个候选框的特征,得到固定长度的特征向量
  4. 把特征向量送入SVM进行分类得到类别信息,送入全连接网络进行回归,得到目标对应位置坐标信息。

        取消了滑动窗口方案,降低了计算成本,同时没有产生大量待分类的窗口,目标不同宽高比的矩形框问题也得到了解决;

        提取特征的卷积网络有5个卷积层和2个全连接层,输入固定大小的RGB图像,输出4096维特征向量;对候选区域的分类采用线性的支持向量机,对每一张待检测图像计算所有候选区域的特征向量,送入支持向量机中进行分类,同时送入全连接网络进行坐标位置回归

        设计巧妙,但也有缺点

  1. 重复计算,2000个左右的候选框,都需要单独经过backbone网络提取特征,计算量依然很大,候选框之间会存在重叠,因此有不少重复计算;
  2. 训练和测试比较复杂,候选区域提取、特征提取、分类、回归都是分开操作,中间数据也需要单独保存;
  3.   推理的过程慢,各个环节都需要计算,导致出结果的推理过程也很漫长;
  4. 输入的图片Patch必须强制缩放成固定大小(227×227),造成物体的形变,最终导致检测性能下降。
        2.6 SPP-Net(速度比R-CNN快了30倍)

        在R-CNN基础上提出了SPPNet,该方法虽然还是依赖候选框的生成,但将提取候选框特征向量的操作转移到卷积后的特征图上进行,将R-CNN中多次卷积变为一次卷积,大大降低了计算量。

        R-CNN卷积网络只能接受固定大小的输入图像,那么为了适应图像的尺寸,截取的图像区域就会进行缩放,产生扭曲,目标检测精度就会下降;因为第一个全连接层必须要固定尺寸的输入,其他层都不需要固定尺寸,所以如果在最后一个卷积层与第一个全连接层之间做处理就可以解决问题。

        故解决这个问题的SPP-Net引入了Spatial Pyramid Pooling层,对卷积特征图像进行空间金字塔采样,获取固定长度的输出,对特征层任意长宽比和尺度区域进行特征提取。

        2.7 Fast R-CNN

        针对SPP-Net进一步改进,主要创新点:

  1. ROI Pooling层,将不同大小候选框的卷积特征图统一采样成固定大小的特征;
  2. backbone网络层参与训练,只使用一个尺度进行网格划分和池化,该层可以直接求导,训练时直接将梯度传导到backbone网络中进行优化
  3. 在训练时,将深度网络和后面svm分类两个阶段整合在了一起,使用新的网络直接分类和回归,训练速度和检测推理速度都大大提升,0.32秒一张图。

图3 Fast R-CNN网络流程图

        2.8 Faster R-CNN(端到端,第一个全流程算法)

        SPP-Net和Fast R-CNN都需要独立生成候选区域,不易用GPU进行加速。针对这个问题,Shaoqin Ren在Fast R-CNN基础上提出了Faster R-CNN。

图4 Faster R-CNN流程图

  1. 在主干网络中增加了RPN(Region Proposal Network)网络,通过一定规则设置不同尺度的锚点(Anchor),使用RPN提取候选框代替Selective Search传统候选框生成方法;
  2. 实现了网络端对端的训练,候选区域的生成、候选区域特征的提取、框回归和分类全流程打通,在训练过程中模型各个部分不仅学习如何完成自己的任务,也会自主学习各个层的权重,真正意义上的深度学习目标检测算法
        2.9 R-FCN(Two stage)

        Faster R-CNN检测网络框架的计算量受3个因素的影响:

  1. 基础网络复杂度;
  2. 候选框数量的多少;
  3. 分类和位置回归子网络的复杂度(每个候选框的box都会独立进行前向计算)。

        直接优化前两点的性价比不高,回到分类问题的本质上,分类是要增加物体的平移不变性,即不同位置都是用一个物体;目标检测的本质是减少物体的平移变化,目标检测需要得到物体所在的位置,通常训练都是使用backbone主干网络进行训练,再做finetuning,这就和分类任务出现了矛盾。

        故Jifeng Dai团队提出了R-FCN网络,通过position-positive score maps(位置敏感度得分图)解决了这个矛盾。通过预测ROI中不同部位的类别投票表决产生该ROI的类别预测。在Faster R-CNN基础上取消了ROI-wise subnetwork,直接在ppsm上利用ROI Pooling进行信息采样融合分类和位置信息。

        2.10 Mask R-CNN(Two stage)

        因为Faster R-CNN在做下采样和Roi Pooling时都对特征图大小做了取整的操作,对分类问题基本没有影响,但对检测任务有一定的影响,对语义分割这种像素级任务精度影响更为严重。

        故Mask R-CNN团队对网络中涉及到特征图尺寸变化的环节都不使用取整操作,通过双线性插值填补非整数位置的像素,使下游特征图向上游映射时没有位置误差,不仅提升了目标检测效果,还满足语义分割任务的精度要求。

        2.11 Yolo系列
        2015年,随着YOLO系列算法的出现,深度学习目标检测有了two-stage和one-stage之分。

        详细的介绍见我的下一篇博客。

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 12:32:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 12:32:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 12:32:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 12:32:02       18 阅读

热门阅读

  1. 数据库DBMS,DBS,DBA

    2024-03-15 12:32:02       19 阅读
  2. 2023 年 9 月青少年软编等考 C 语言一级真题解析

    2024-03-15 12:32:02       18 阅读
  3. 简易线程池的实现

    2024-03-15 12:32:02       20 阅读
  4. mac springboot com.spotify Docker 容器化部署

    2024-03-15 12:32:02       19 阅读
  5. 字符串基础

    2024-03-15 12:32:02       16 阅读
  6. Spring MVC相关

    2024-03-15 12:32:02       15 阅读