本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》,笔者不是自动驾驶领域的专家,只是一个在探索自动驾驶路上的小白,此系列丛书尚未阅读完,也是边阅读边总结边思考,欢迎各位小伙伴,各位大牛们在评论区给出建议,帮笔者这个小白挑出错误,谢谢!
此专栏是关于《自动驾驶汽车环境感知》书籍的笔记



1.障碍物检测

1.1 环境感知与识别概述

  1. 环境感知对象主要包括:行驶路径、周边物体、驾驶状态、驾驶环境;
  2. 行驶路径包括:结构化道路和非结构化道路;
    1. 结构化道路包括:车道线、道路边缘、道路隔离物、恶劣路况的识别;
    2. 非结构化道路包括:可行驶路径的确认和前方路面环境的识别;
  3. 周边物体包括:车辆、行人、地面上可能影响车辆通过性、安全性的其他各种移动或静止障碍物的识别及各种交通标志的识别;
  4. 环境感知与识别传感器系统通常采用摄像头、激光雷达、毫米波雷达等多种传感器来感知环境;
    1. 摄像头和激光雷达:可用于进行车道线检测;
    2. 摄像头可完成对红绿灯的识别;
    3. 摄像头可通过深度学习把障碍物进行细致分类,激光雷达能把障碍物分大类,激光雷达能完成对物体距离的准确定位;
    4. 毫米波雷达完成障碍物运动速度、方位等识别;

1.2 障碍物检测之基于图像检测

障碍物检测技术包括:

  1. 基于图像的障碍物检测;
  2. 基于激光雷达的障碍物检测;
  3. 基于视觉和激光雷达融合的障碍物检测;

基于图像的障碍物检测算法大致分为:一阶段检测算法和二阶段检测算法;
一阶段检测算法:YOLO和SSD;
二阶段检测算法:RCNN;

1.2.1 基于二维图像的障碍物检测

  1. YOLO系列障碍物检测
    YOLO(You Only Look Once)是将物体检测作为回归问题求解的一种一阶段检测算法;
    YOLO基于一个单独的端到端网络,完成从原始图像的输入到物体位置和类别的输出;
    YOLO与RCNN、Fast RCNN、Faster RCNN区别:

    1. YOLO训练和检测均是在一个单独网络进行,没有显式求取区域候选框的过程;RCNN/Fast RCNN采用分离的模块(独立于网络之外的选择性搜索方法)求取候选框(可能包含物体的矩形区域),训练过程分为多个模块进行;Faster RCNN使用RPN(Region Proposal Network)卷积网络替代RCNN/Fast RCNN的选择性搜索模块,将RPN集成到Fast RCNN检测网络中,得到一个统一的检测网络;
    2. YOLO输入图像经过一个推理,得到图像中所有物体的位置和其所属类别及相应的置信概率;RCNN/Fast RCNN/Faster RCNN将检测结果分为两部分求解:物体类别(分类问题)和物体位置(标注框(bounding box));

    YOLO系列障碍物检测核心思想:

    1. 网络定义

      1. YOLO检测网络包括:24个卷积层和2个全连接层;
      2. 卷积层:用来提取图像特征;
      3. 全连接层:用来预测图像位置和类别概率;
    2. 输出表达(representation)定义

      1. YOLO将输入图像分成S×S个格子,每个格子负责检测"落入"该格子的物体;
      2. 若某个物体的中心位置的坐标落入到某个格子,那么这个格子负责检测出这个物体;
      3. 每个格子输出B个标注框信息,及C个物体属于某种类别的概率信息;
      4. 标注框信息包含5个数据值:x、y、w、h、confidencex、y、w、h、confidencex、y、w、h、confidence;
        1. x、yx、yx、y:表示当前格子预测得到的物体的标注框的中心位置的坐标;
        2. w、hw、hw、h:表示标注框的宽度和高度;实际训练过程中,w、hw、hw、h的值使用图像的宽度和高度进行归一化到[0,1][0,1][0,1]区间内;x、yx、yx、y是标注框中心位置相对于当前格子位置的偏移值,并归一化到[0,1][0,1][0,1];
        3. confidenceconfidenceconfidence:反映当前标注框是否包含物体及物体位置的准确性,计算方式:confidence=P(object)confidence=P(object)confidence=P(object)
          若标注框包含物体,则P(object)=1P(object)=1P(object)=1,否则P(object)=0P(object)=0P(object)=0;
      5. YOLO网络的全连接层输出维度S×S×(B×5+C);
      6. IOU(Intersection Over Union)为预测标注框与物体真实区域的交集面积(以像素为单位,用真实区域的像素面积归一化到[0,1]区间);
      7. 由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率;
      8. 每个格子可以预测B个标注框,但最终只选择IOU最高的标注框作为物体检测输出,即每个格子最多只预测出一个物体;当物体占画面比例较小,每个格子包含多个物体,但只能检测出其中一个;
    3. 损失(loss)函数定义
      YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的S×S×(B×5+C)维向量与真实图像的对应S×S×(B×5+C)维向量的均方和误差;
      loss=∑i=0s2coordError+iouError+classErrorloss=\sum^{s^2}_{i=0}coordError+iouError+classErrorloss=i=0∑s2​coordError+iouError+classError
      其中:
      coordErrorcoordErrorcoordError:预测数据与标定数据之间的坐标误差;
      iouErroriouErroriouError:IOU误差;
      classErrorclassErrorclassError:分类误差;

      YOLO对loss的计算进行了修正:

      1. 位置相关误差(坐标、IOU)与分类误差对网络loss的贡献值不同,YOLO在计算loss时,使用λcoord=5\lambda_{coord}=5λcoord​=5修正coordErrorcoordErrorcoordError;
      2. 计算IOU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献值不同;YOLO使用λnoobj=0.5\lambda_{noobj}=0.5λnoobj​=0.5修正iouErroriouErroriouError;
      3. 对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响;YOLO将物体大小的信息项(w和h)(w和h)(w和h)进行求平方根来改进这个问题;
  2. SSD障碍物检测
    SSD(Single Shot Multibox Detector)是一种单一阶段检测算法,只需要用到图像一次,无须先产生候选框再进行分类和回归,直接在图像中不同位置进行边界框的采样,使用卷积层进行特征提取后直接进行分类和回归;

    SSD检测的主要设计理念:

    1. 使用不同尺度下的特征图进行检测
      SSD通过提取不同尺度下的特征图来做检测,SSD使用了6种不同尺寸的特征图来进行检测;在卷积神经网络中,较低层级的特征图尺寸较大,在这种特征图上的候选框在原图上覆盖范围较小;较高层级的特征图的尺寸较小,候选框在原图上的覆盖范围大;如下图2所示。

    2. 采用卷积层做检测
      SSD直接采用卷积对不同特征图进行特征提取;如图1所示,对于尺寸为m×nm\times{n}m×n,维数为ppp的特征图,SSD使用3×3×p3×3×p3×3×p的卷积核来进行卷积;输出:一种为用于分类的置信度分数;一种是用于回归的位移量;

    3. 采用不同尺度和纵横比的候选框
      SSD在每个单元格设置不同尺度和纵横比的默认框,对于一个尺寸为m×nm\times{n}m×n的特征图,假定每个单元格有kkk个默认框,则该特征图有m×n×km\times{n}\times{k}m×n×k个默认框;如图2,每个单元格设定有4种不同尺寸的默认框,则该图网络有38×38×4+19×19×6+10×10×6+5×5×6+5×5×6+3×3×4+1×1×4=873238\times{38}\times{4}+19\times{19}\times{6}+10\times{10}\times{6}+5\times{5}\times{6}+5\times{5}\times{6}+3\times{3}\times{4}+1\times{1}\times{4}=873238×38×4+19×19×6+10×10×6+5×5×6+5×5×6+3×3×4+1×1×4=8732个默认框;

      对于每个默认框,SSD的预测值:分类的置信度和边界框的回归值。
      1. 分类:SSD把背景单独作为一类,在VOC数据集上,SSD的每个默认框会输出21类置信度,其中20类为VOC的目标种类;
      2. 边界框的回归值:预测真实边界框ggg相对于默认框ddd的中心(cx,cy)(cx,cy)(cx,cy)和宽(w)(w)(w)、高(h)(h)(h)的转换量,预测值的真实值的计算方式:g^cx=(gcx−dcx)/dw,g^cy=(gcy−dcy)/dh\hat{g}^{cx}=(g^{cx}-d^{cx})/d^w,\hat{g}^{cy}=(g^{cy}-d^{cy})/d^hg^​cx=(gcx−dcx)/dw,g^​cy=(gcy−dcy)/dh g^w=log⁡(gwdw),g^h=log⁡(ghdh)\hat{g}^w=\log(\frac{g^w}{d^w}),\hat{g}^h=\log(\frac{g^h}{d^h})g^​w=log(dwgw​),g^​h=log(dhgh​)
      假定数据集有ccc种目标,则每个默认框需要预测c+1c+1c+1个类别概率和444个坐标相关的转换量;

    4. 损失函数定义
      SSD的损失函数由位置误差(localization loss,loc)和置信度误差(confidence loss,conf)组成;令xijp={1,0}x^p_{ij}=\{1,0\}xijp​={1,0}表示第iii个默认框是否与第jjj个真实框匹配,NNN为匹配的默认框总数,ccc为类别置信度预测值,ggg为真实边界框,lll为预测框,总的损失函数为:L(x,c,l,g)=1N(Lconf(x,c)+αLloc(x,l,g))L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha{L_{loc}(x,l,g)})L(x,c,l,g)=N1​(Lconf​(x,c)+αLloc​(x,l,g))
      位置误差LlocL_{loc}Lloc​,采用Smooth L1 loss(平滑的L1损失):Lloc(x,l,g)=∑i∈PosN∑m∈(cx,cy,w,h)xijksmoothL1(lim−g^jm)L_{loc}(x,l,g)=\sum^N_{i\in{Pos} }\sum_{m\in{(cx,cy,w,h)}}x^k_{ij}smooth_{L1}(l^m_i-\hat{g}^m_j)Lloc​(x,l,g)=i∈Pos∑N​m∈(cx,cy,w,h)∑​xijk​smoothL1​(lim​−g^​jm​)
      置信度误差LconfL_{conf}Lconf​,采用softmax loss:Lconf(x,c)=−∑i∈PosNxijplog⁡(c^ip)−∑i∈Neglog⁡(c^ip)L_{conf}(x,c)=-\sum^N_{i\in{Pos}}x^p_{ij}\log(\hat{c}^p_i)-\sum_{i\in{Neg}}\log(\hat{c}^p_i)Lconf​(x,c)=−i∈Pos∑N​xijp​log(c^ip​)−i∈Neg∑​log(c^ip​) c^ip=exp⁡(cip)∑pexp⁡(cip)\hat{c}^p_i=\frac{\exp(c^p_i)}{\sum_p\exp(c^p_i)}c^ip​=∑p​exp(cip​)exp(cip​)​
      总误差函数的权重系数α\alphaα通过交叉验证设置。

  3. Faster RCNN障碍物检测
    介绍:Faster RCNN由Ross B. Girshick等人在2016年提出,是一种二阶段检测算法;Faster RCNN将体征提取模块、候选框生成模块、边框回归和目标分类模块整合到一个网络,综合性能大大提高。

    1. 特征提取模块
      Faster RCNN特征提取网络使用VGG16,是一个通过反复堆叠3×3卷积和2×2最大值池化的16层网络;输入图像大小是3×224×224,输出特征是51×39×256;
    2. 候选框生成模块(RPN)
      Faster RCNN使用Region Proposal Networks(RPN)生成检测框;
    3. 边框回归和目标分类模块
      通过RPN得到候选框后,使用ROI pooling将每个候选框对应的特征转换成7×7的大小;将每个候选框的特征输入到边框回归和目标分类模块,得到每个候选框的类别,类别数n+1n+1n+1,nnn是障碍物类别,1是背景;
      在Faster RCNN中的两个损失:分类损失和标注框回归损失;
      分类损失:简单的交叉熵;
      标注框回归损失:平滑的L1损失;
      smoothL1(x)={0.5x2×1/σ2∣x∣<(1/σ2)∣x∣−0.5其他smooth_{L1}(x)= \begin{cases} 0.5x^2\times{1/\sigma^2}&|x|<(1/\sigma^2) \\ |x|-0.5& 其他 \end{cases}smoothL1​(x)={0.5x2×1/σ2∣x∣−0.5​∣x∣<(1/σ2)其他​

学习笔记13--障碍物检测之基于图像障碍物检测相关推荐

  1. opencv学习笔记(二):基于肤色的人手检测

    opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...

  2. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  3. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  4. Linux学习笔记13

    Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...

  5. 台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning 本博客参考整理自: http://blog.csdn.net/xzy_t ...

  6. 【计算机网络学习笔记13】交换技术(下)

    [计算机网络学习笔记13]交换技术(下) 一.生成树的诞生和发展 1. 环路问题 两个网桥之间的连接网线如果只有一根,而这根网线或者接口有问题,网络就会出现单点故障.所以为了提高可靠性,网桥在互连时一 ...

  7. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  8. OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()

    OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D() 一个任意的仿射变换都能表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)的形式. ...

  9. OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()

    OpenCV学习笔记(三):多通道图像分离.混合算子:split(),merge() #include <opencv2/opencv.hpp>#define BRG_BLUE_CHANN ...

  10. QT学习笔记(十三):绘制图像

    QT学习笔记(十三):绘制图像 paintEvent() 事件源码添加: #include <QPainter> #include <QImage> #include < ...

最新文章

  1. 最优的去重处理——HashSet去重
  2. 运行iis提示服务没有及时响应启动或控制请求的解决方法
  3. Transformer的七十二变
  4. java的character用法_Java中Character类的使用方法
  5. winrar命令行的一些参数例子
  6. MySQL联合索引原理_复合索引_组合索引_多列索引
  7. CodeForces - 1200C——小模拟
  8. java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用
  9. [css] 你有使用过font-size-adjust属性吗?说说它的作用是什么?
  10. PHP服务Fcgi进程及PHP解析优化
  11. Redis主从复制配置(原理剖析)
  12. 朋友面试被问到---静态构造函数
  13. 【MySQL】MySQL 8报错 Unknown initial character set index 255 received from server. Initial client char
  14. 解决方案架构师的职责
  15. 如何成就一个小而美的存储科技公司?
  16. linux查看压缩文件的大小,Linux下不解压压缩文件如何直接查看某个文件大小
  17. 49天精通Java,第12天,Java接口的作用和意义
  18. 【基础知识】现在很火的app上的deeplink技术,到底是什么?
  19. 中国最牛逼的四大软件
  20. 为什么有些人除了上课时间以外都没有学习,成绩却还是很好?

热门文章

  1. 线性代数基础知识点回顾与总结(一):行列式与矩阵
  2. 斐波那契查找(黄金分割法查找)Java实现。
  3. Pytorch关于高维tensor的dim上操作的理解--以cosine_similarity的dim参数为例
  4. 2023年天津天狮学院专升本专业课考试延期的通知
  5. DICOM世界观·第二章:[2]像素操作
  6. linux 编译 mono,Mono和MonoDevelop源码编译安装
  7. 换成Everyone还是访问被拒绝的解决办法
  8. 滚石特写: 沉默7年后, Magic Leap用魔幻现实主义式科技重新定义了自己
  9. ModbusRTU协议数据格式
  10. ireport 循环_ireport detail循环原理