学习笔记13--障碍物检测之基于图像障碍物检测
本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》,笔者不是自动驾驶领域的专家,只是一个在探索自动驾驶路上的小白,此系列丛书尚未阅读完,也是边阅读边总结边思考,欢迎各位小伙伴,各位大牛们在评论区给出建议,帮笔者这个小白挑出错误,谢谢!
此专栏是关于《自动驾驶汽车环境感知》书籍的笔记
1.障碍物检测
1.1 环境感知与识别概述
- 环境感知对象主要包括:行驶路径、周边物体、驾驶状态、驾驶环境;
- 行驶路径包括:结构化道路和非结构化道路;
- 结构化道路包括:车道线、道路边缘、道路隔离物、恶劣路况的识别;
- 非结构化道路包括:可行驶路径的确认和前方路面环境的识别;
- 周边物体包括:车辆、行人、地面上可能影响车辆通过性、安全性的其他各种移动或静止障碍物的识别及各种交通标志的识别;
- 环境感知与识别传感器系统通常采用摄像头、激光雷达、毫米波雷达等多种传感器来感知环境;
- 摄像头和激光雷达:可用于进行车道线检测;
- 摄像头可完成对红绿灯的识别;
- 摄像头可通过深度学习把障碍物进行细致分类,激光雷达能把障碍物分大类,激光雷达能完成对物体距离的准确定位;
- 毫米波雷达完成障碍物运动速度、方位等识别;
1.2 障碍物检测之基于图像检测
障碍物检测技术包括:
- 基于图像的障碍物检测;
- 基于激光雷达的障碍物检测;
- 基于视觉和激光雷达融合的障碍物检测;
基于图像的障碍物检测算法大致分为:一阶段检测算法和二阶段检测算法;
一阶段检测算法:YOLO和SSD;
二阶段检测算法:RCNN;
1.2.1 基于二维图像的障碍物检测
YOLO系列障碍物检测
YOLO(You Only Look Once)是将物体检测作为回归问题求解的一种一阶段检测算法;
YOLO基于一个单独的端到端网络,完成从原始图像的输入到物体位置和类别的输出;
YOLO与RCNN、Fast RCNN、Faster RCNN区别:- YOLO训练和检测均是在一个单独网络进行,没有显式求取区域候选框的过程;RCNN/Fast RCNN采用分离的模块(独立于网络之外的选择性搜索方法)求取候选框(可能包含物体的矩形区域),训练过程分为多个模块进行;Faster RCNN使用RPN(Region Proposal Network)卷积网络替代RCNN/Fast RCNN的选择性搜索模块,将RPN集成到Fast RCNN检测网络中,得到一个统一的检测网络;
- YOLO输入图像经过一个推理,得到图像中所有物体的位置和其所属类别及相应的置信概率;RCNN/Fast RCNN/Faster RCNN将检测结果分为两部分求解:物体类别(分类问题)和物体位置(标注框(bounding box));
YOLO系列障碍物检测核心思想:
网络定义
- YOLO检测网络包括:24个卷积层和2个全连接层;
- 卷积层:用来提取图像特征;
- 全连接层:用来预测图像位置和类别概率;
输出表达(representation)定义
- YOLO将输入图像分成S×S个格子,每个格子负责检测"落入"该格子的物体;
- 若某个物体的中心位置的坐标落入到某个格子,那么这个格子负责检测出这个物体;
- 每个格子输出B个标注框信息,及C个物体属于某种类别的概率信息;
- 标注框信息包含5个数据值:x、y、w、h、confidencex、y、w、h、confidencex、y、w、h、confidence;
- x、yx、yx、y:表示当前格子预测得到的物体的标注框的中心位置的坐标;
- w、hw、hw、h:表示标注框的宽度和高度;实际训练过程中,w、hw、hw、h的值使用图像的宽度和高度进行归一化到[0,1][0,1][0,1]区间内;x、yx、yx、y是标注框中心位置相对于当前格子位置的偏移值,并归一化到[0,1][0,1][0,1];
- confidenceconfidenceconfidence:反映当前标注框是否包含物体及物体位置的准确性,计算方式:confidence=P(object)confidence=P(object)confidence=P(object)
若标注框包含物体,则P(object)=1P(object)=1P(object)=1,否则P(object)=0P(object)=0P(object)=0;
- YOLO网络的全连接层输出维度S×S×(B×5+C);
- IOU(Intersection Over Union)为预测标注框与物体真实区域的交集面积(以像素为单位,用真实区域的像素面积归一化到[0,1]区间);
- 由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率;
- 每个格子可以预测B个标注框,但最终只选择IOU最高的标注框作为物体检测输出,即每个格子最多只预测出一个物体;当物体占画面比例较小,每个格子包含多个物体,但只能检测出其中一个;
损失(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∑s2coordError+iouError+classError
其中:
coordErrorcoordErrorcoordError:预测数据与标定数据之间的坐标误差;
iouErroriouErroriouError:IOU误差;
classErrorclassErrorclassError:分类误差;YOLO对loss的计算进行了修正:
- 位置相关误差(坐标、IOU)与分类误差对网络loss的贡献值不同,YOLO在计算loss时,使用λcoord=5\lambda_{coord}=5λcoord=5修正coordErrorcoordErrorcoordError;
- 计算IOU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献值不同;YOLO使用λnoobj=0.5\lambda_{noobj}=0.5λnoobj=0.5修正iouErroriouErroriouError;
- 对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响;YOLO将物体大小的信息项(w和h)(w和h)(w和h)进行求平方根来改进这个问题;
SSD障碍物检测
SSD(Single Shot Multibox Detector)是一种单一阶段检测算法,只需要用到图像一次,无须先产生候选框再进行分类和回归,直接在图像中不同位置进行边界框的采样,使用卷积层进行特征提取后直接进行分类和回归;SSD检测的主要设计理念:
使用不同尺度下的特征图进行检测
SSD通过提取不同尺度下的特征图来做检测,SSD使用了6种不同尺寸的特征图来进行检测;在卷积神经网络中,较低层级的特征图尺寸较大,在这种特征图上的候选框在原图上覆盖范围较小;较高层级的特征图的尺寸较小,候选框在原图上的覆盖范围大;如下图2所示。采用卷积层做检测
SSD直接采用卷积对不同特征图进行特征提取;如图1所示,对于尺寸为m×nm\times{n}m×n,维数为ppp的特征图,SSD使用3×3×p3×3×p3×3×p的卷积核来进行卷积;输出:一种为用于分类的置信度分数;一种是用于回归的位移量;采用不同尺度和纵横比的候选框
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个坐标相关的转换量;损失函数定义
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∑Nm∈(cx,cy,w,h)∑xijksmoothL1(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∑Nxijplog(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=∑pexp(cip)exp(cip)
总误差函数的权重系数α\alphaα通过交叉验证设置。
Faster RCNN障碍物检测
介绍:Faster RCNN由Ross B. Girshick等人在2016年提出,是一种二阶段检测算法;Faster RCNN将体征提取模块、候选框生成模块、边框回归和目标分类模块整合到一个网络,综合性能大大提高。
- 特征提取模块
Faster RCNN特征提取网络使用VGG16,是一个通过反复堆叠3×3卷积和2×2最大值池化的16层网络;输入图像大小是3×224×224,输出特征是51×39×256; - 候选框生成模块(RPN)
Faster RCNN使用Region Proposal Networks(RPN)生成检测框; - 边框回归和目标分类模块
通过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--障碍物检测之基于图像障碍物检测相关推荐
- opencv学习笔记(二):基于肤色的人手检测
opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...
- OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope
OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...
- opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版
基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...
- Linux学习笔记13
Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...
- 台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning
台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning 本博客参考整理自: http://blog.csdn.net/xzy_t ...
- 【计算机网络学习笔记13】交换技术(下)
[计算机网络学习笔记13]交换技术(下) 一.生成树的诞生和发展 1. 环路问题 两个网桥之间的连接网线如果只有一根,而这根网线或者接口有问题,网络就会出现单点故障.所以为了提高可靠性,网桥在互连时一 ...
- mybatis学习笔记(13)-延迟加载
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...
- OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()
OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D() 一个任意的仿射变换都能表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)的形式. ...
- OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()
OpenCV学习笔记(三):多通道图像分离.混合算子:split(),merge() #include <opencv2/opencv.hpp>#define BRG_BLUE_CHANN ...
- QT学习笔记(十三):绘制图像
QT学习笔记(十三):绘制图像 paintEvent() 事件源码添加: #include <QPainter> #include <QImage> #include < ...
最新文章
- 最优的去重处理——HashSet去重
- 运行iis提示服务没有及时响应启动或控制请求的解决方法
- Transformer的七十二变
- java的character用法_Java中Character类的使用方法
- winrar命令行的一些参数例子
- MySQL联合索引原理_复合索引_组合索引_多列索引
- CodeForces - 1200C——小模拟
- java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用
- [css] 你有使用过font-size-adjust属性吗?说说它的作用是什么?
- PHP服务Fcgi进程及PHP解析优化
- Redis主从复制配置(原理剖析)
- 朋友面试被问到---静态构造函数
- 【MySQL】MySQL 8报错 Unknown initial character set index 255 received from server. Initial client char
- 解决方案架构师的职责
- 如何成就一个小而美的存储科技公司?
- linux查看压缩文件的大小,Linux下不解压压缩文件如何直接查看某个文件大小
- 49天精通Java,第12天,Java接口的作用和意义
- 【基础知识】现在很火的app上的deeplink技术,到底是什么?
- 中国最牛逼的四大软件
- 为什么有些人除了上课时间以外都没有学习,成绩却还是很好?
热门文章
- 线性代数基础知识点回顾与总结(一):行列式与矩阵
- 斐波那契查找(黄金分割法查找)Java实现。
- Pytorch关于高维tensor的dim上操作的理解--以cosine_similarity的dim参数为例
- 2023年天津天狮学院专升本专业课考试延期的通知
- DICOM世界观·第二章:[2]像素操作
- linux 编译 mono,Mono和MonoDevelop源码编译安装
- 换成Everyone还是访问被拒绝的解决办法
- 滚石特写: 沉默7年后, Magic Leap用魔幻现实主义式科技重新定义了自己
- ModbusRTU协议数据格式
- ireport 循环_ireport detail循环原理