资讯专栏INFORMATION COLUMN

从零开始的无人驾驶 1

marek / 484人阅读

摘要:霍夫变化是图像变化中的经典算法,主要用来寻找图像中符合某种特征的集合,说白了就是检测直线圆椭圆。定向梯度直方图相比于之前的特征,特征更加健壮,并且无视颜色的影响。行为克隆算是的一种。

Lanes Finding with Computer Vision

利用计算机视觉进行道路检测,一般包括6部分:摄像头校正(camera calibration)、图像失真校正(distortion correction)、色彩/梯度二值化(color/gradient threshold)、视角转换 Perspective transform 、行道线检测(Detect lane lines)、 道路弯度测量(Determine the lane curvature)

Calibration 校正

首先要对失真的程度进行测量,然后根据measurement的结果进行undistort


这个东西叫做chessboard pattern, 用的时候从不同的角度拍这个chessboard,利用的是每个方块的corner去校正 (图像要记得转成灰度图)

得到的结果其实只跟拍照的相机有关。对于每个的镜头,要多带带做一遍这种校正。

Distorition 图像失真

理论上,只要不是针孔摄像机,基本都会存在图像失真的问题(透镜成像更快点,针孔相机这点上比不了)

图像失真会影响到道路检测(将直线判断成曲线),车辆检测(用CNN检测的时候,识别出来的车比实际更大或者更小)

由透镜引起的失真主要是两个:

径向畸变(Radial Distortion)
原因是光线穿过透镜的边缘时发生的偏转大于穿过中心发生的偏转

切线畸变(Tangential Distortion)

原因是光线穿过透镜之后并没有垂直打在成像平面上

ROI (Region of Interest)

道路检测要先从摄像头视角获取道路信息,然后选取ROI(目标区域), 包括选颜色和选区域。

选颜色比较接近直觉, 路上的线也就两种颜色,要么白线,要么黄线。
白线其实比较好找

但是黄线的话就不能直接用原图了。要先把原图分成RGB三层

而黄色的线在蓝色那层是看不到的

(因为是互补色)

选区域是可以直接利用CV解决的问题。

从车头视角向前看,大部分像素都是没有用的。尤其是天空的部分。对于自动驾驶来说差不多等价于干扰信号,基本上可以直接过滤掉

Color Space 色彩空间

在RGB色彩空间(以RGB建立三维空间)中,白色是由红绿蓝三种颜色的最大值组成的。

因此想获得白线,可以通过设置RGB值的阈值

但是这种情况下,会丢失黄线的信息。一般的处理方式是使用别的色彩空间,比如HSV, HLS, LUV...

其中HSV(色相、饱和度、明度)和HLS(色相、亮度、饱和度)使用最多

HLS (hue, saturation, lightness)

也叫HSL,甚至叫HSL的还更多点。

其实图像本身在光亮条件下变化最大,HS信道一般倒是不怎么变。所以我们把图像按照HSL拆分,在S信道下黄线非常明显

Canny Edge Detection

下一步是使用边缘检测算法寻找边线。如果我们把视图当成一张灰度图来看待,那么每一条边其实都在明暗块交替的位置

通过计算亮度的变化,可以把原图转化成一张梯度图

然后再将结果锐化,得到亮度数值变化最大的像素点

实际上,在做Canny算法之前,要对图像做高斯平滑(Gaussian smoothing / Gaussian Blur) ,消除噪声和伪梯度点

(题外话) Sobel Operator 索伯算子

首先,为什么卷积神经网络会有卷积(convolution)这种操作…

看完Sobel算子总算懂了,卷积这种运算讲究的是一个信号叠加。相比于Canny边缘检测,Sobel边缘检测其实更容易理解(然而还是Canny效果好)。

Hough Transform 霍夫变化

Hough Transform是图像变化中的经典算法,主要用来寻找图像中符合某种特征的集合,说白了就是检测直线、圆、椭圆。


Hough变化要将笛卡尔坐标下的点变化到霍夫极坐标系,原来的点共线问题会由此转化计算成曲面在极坐标下的共点,效果上就是该算法对边缘间断不敏感。大致上是这个意思,实际操作的时候是统计累加空间里的局部最大值(峰值),以该峰值作为结果(所以说抗噪能力还是很强的)。

总结一下就是:

原图 -> 灰度图 -> 边缘检测 -> 直线检测 -> 过滤掉斜率过低的直线 -> 将最后结果叠加回原图

Perspective Transform

由于Perspective的存在,2D图像存在近大远小的现象

这样会导致原本平行的行道线,出现汇聚的趋势

因此需要把视角转换成俯视

将行道线还原到平行

Lane Curvature

解决道路弯曲(Lane Curvature)问题,实际上比较复杂。先要依次校正原图

选取ROI

然后要进行视角转换(Perspective Transform)

最后根据俯视图(Top-down view) 用二次函数拟合行道线

Sliding windows 滑动窗口

在检测弧线的过程中,首先在图像底部选取一小段,在垂直方向做直方图

将顶点连接,变成峰值图

出现峰值的地方是行道线的位置

以此为起点,使用逐步向上移动,每次处理一小段图像

这种检测模式叫做滑动窗口

一旦拥有了第一帧的行道线位置,在随后的检测中可以利用边缘检测 + ROI 的方式获得之后的行道线

得到道路的二次函数并没有用,从驾驶的角度来看,真正需要的是当前的转弯弧度。所以需要求出图片组的曲率半径(radius of curvature),在对应计算出现实中的曲率半径

最后

还有一些小的细节,包括Offset, Sanity Check, Look-Ahead Filter, etc. 懒得讲


Vehicle Detection 车辆检测

CNN (Convolutional Neural Networks 卷积神经网络) 普遍运用之前,车辆检测是通过使用条件随机场或者SVM(支持向量机)来实现的。操作上分为两步,先是从图像上提取特征,然后基于特征建立模型,判断车辆位置。

template matching 模板匹配

对于图像上的每一块颜色,计算与背景图的distance

甚至更硬核一点,直接把各种可能的车辆图片存起来,然后跟相机视角的图片进行比较

这类解决方案统称 template matching

Color Histogram

template matching的缺陷也很明显,对于没有预存过的模板,自然无从识别。因此出现了 Color Histogram方案

将车辆的模板转换成颜色直方图,运算时比较目标物体与预存直方图的相似度。优点是同一个物体在不同角度仍可识别。比如对于一辆红色的车,从不同方向看过去,模板匹配无法很好地识别,而利用Color Histogram则不受影响。

HOG

Histogram of Oriented Gradients (定向梯度直方图), 相比于之前的特征,HOG特征更加健壮,并且无视颜色的影响。

操作的时候,首先捕捉图像的轮廓与纹理信息

然后将图像划分为多个cell。对每个cell计算梯度方向

统计每个cell的局部直方图

将结果归一化,得到的主方向将成为局部特征梯度方向

汇总每个cell得到的局部信息,就可以得到HOG特征

Features Combination

首先是数据预处理,这里主要是进行特征组合。

比如HOG特征是针对梯度信息的特征,HSV特征则是针对颜色信息的特征

可以直接将二者拼接,得到颜色+梯度的组合信息

这里面有一些要注意的地方,一般多个特征拥有不同的模量,所以数字上相差很大

那么就需要进行正则化,将数据对齐

还可以利用决策树等方法,舍弃影响不大的变量

Sliding Windows

使用滑动窗口进行车辆检测,在这种场景下有一些机巧

首先还是ROI, 车辆其实只会出现在图片的下半块区域

其次可以预先设定好车辆可能的最大宽度和最小宽度

这样在检测时进行有限的multi-scale window

减小搜索空间

Multiple Detection

最后对于同一车辆的Multiple Detection

建立heat-map,计算中心位置

Build Model & Tracking


模型的选取倒是比较简单,SVM, Decision Tree, Nerual Network, etc. 这些都是常见的选择

针对每一帧图像,检测车辆位置,形成连续追踪


Behavior Cloning 行为克隆

使用神经网络进行无人驾驶的理论基础来源于Imitation Learning (模仿学习)。行为克隆算是Imitation Learning的一种。思路倒是很简单,将人类驾驶作为基础数据全部收集下来,然后让神经网络去拟合数据。目前Tesla主要采用的就是Behavior Cloning.

这类端到端的解决方案基本上是一个路子,优点:简单且有效,缺点:受限于收集的数据。因为训练集总是有限的,如果出现了神经网络之前没见过的数据,那么效果就会很差。

一个比较经典的条件是天气,下雨天的路面跟晴天的路面不一样,有雾的天气下道路能见度也会对摄像头收集的数据有很大影响。


原发布于掘金。2019年初迁移至思否

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19935.html

相关文章

  • 从零开始无人驾驶 2

    摘要:对于无人驾驶系统而言,多传感器已经是默认配置卡尔曼滤波经常运用于无人驾驶系统中感知模块,用于目标状态估计。所以利用一阶泰勒展开,用局部的线性系统接近整个非线性系统。 Sensor 对于无人驾驶系统而言,多传感器已经是默认配置showImg(https://segmentfault.com/img/remote/1460000018252000?w=5120&h=2880); Kalma...

    Caicloud 评论0 收藏0
  • Js实现点击查看全文(类似今日头条、知乎日报效果)

    摘要:这篇文章主要为大家详细介绍了原生仿今日头条知乎日报点击查看全文的效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下移动端展示王者荣耀攻略网需要设置过最大高度然后把超出部分隐藏。 这篇文章主要为大家详细介绍了原生JS+css仿QQ今日头条、知乎日报点击查看全文的效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下.showImg(https://segmentfault.com/i...

    habren 评论0 收藏0
  • GitChat · 人工智能 | 自动驾驶技术架构和生态发展

    摘要:目前每年全球有万人死于车祸,损失,相关于很多国家的,自动驾驶可以很大效率的减少车祸,拯救生命。美国汽车工程师协会和美国高速公路安全局将自动驾驶技术进行了分级。特定场所的高度自动驾驶。这叫基于规则的一种自动驾驶,简单的。 来自 GitChat 作者:刘盼更多IT技术分享,尽在微信公众号:GitChat技术杂谈 进入 GitChat 阅读原文我们先以汽车在现代科技领域的演进来开始这次的ch...

    X1nFLY 评论0 收藏0
  • 驾驶脑”上云,同济大学智能无人车实现L4高自动驾驶

    摘要:年来,途灵智能无人车实验室一直致力于研发级全自动驾驶系统。目前,同济大学途灵智能无人车实验室正在攻克的课题就是提高级自动驾驶技术突破环境局限的能力,这种突破需要将驾驶脑放置在仿真模拟场景下进行大量的极限训练。车水马龙的道路上,各种车辆交错汇聚,各种道路状况频出。从行驶缓慢的环卫车到疾驶抢道的出租车、因施工临时封闭的道路、突发的交通事故现场。作为路面上的车辆,是互不相让,还是借道通过,又或者是...

    Tecode 评论0 收藏0

发表评论

0条评论

marek

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<