新闻  |   论坛  |   博客  |   在线研讨会
骁龙820A汽车 ADAS 分享方案介绍—自动驾驶车辆检测(一)
车载技术工程师 | 2018-06-26 16:23:44    阅读:103   发布文章

骁龙820A系列汽车级处理器针对汽车生态系统而设计,并具有众多显著特性:

  •可扩展的模块化平台提供了管脚、封装和软件兼容性,并有可选配的集成LTE功能,可随无线网络技术演进而进行软硬件升级。

  •通过提供覆盖从高端到标准性能配置的骁龙820A系列,支持垂直分层选项。

  •综合性软件可支持QNX、Linux和Android,以及大量平台级的高价值子系统集成,以应对更新周期的加速,并同时管理成本。

  •连接、多媒体和图形功能可支持诸多基于云的实时特性,包括串流多媒体、企业协作、实时地图与定位服务、远程诊断和一键式车载信息处理,为汽车OEM带来性能、连接和多媒体创新上的巨大潜力

我们本篇将来聊聊关于自动驾驶车辆检测。

车辆检测在车辆感知模块中是非常重要的功能,本节我们的目标如下:

  • 1.在标记的图像训练集上进行面向梯度的直方图(HOG)特征提取并训练分类器线性SVM分类器

  • 2.应用颜色转换,并将分箱的颜色特征以及颜色的直方图添加到HOG特征矢量中

  • 3.对于上面两个步骤,不要忘记标准化您的功能,并随机选择一个用于训练和测试的选项

  • 4.实施滑动窗口技术,并使用您训练的分类器搜索图像中的车辆

  • 5.在视频流上运行流水线(从test_video.mp4开始,稍后在完整的project_video.mp4中6实现),并逐帧创建循环检测的热图,以拒绝异常值并跟踪检测到的车辆

  • 6.估算检测到的车辆的边界框

定向梯度直方图(HOG)

定向梯度直方图(HOG)是计算机视觉和图像处理中用于目标检测的特征描述符。该技术计算图像的局部部分中梯度定向的发生。这种方法类似于边缘方向直方图,尺度不变特征变换描述符和形状上下文,但不同之处在于它是在均匀间隔的单元的密集网格上计算的,并使用重叠的局部对比度归一化来提高准确性。

从训练图像中提取HOG特征

此步骤的代码包含在方法“get_hog_features”中的文件vehicle_detection.py中

 Define a function to return HOG features and visualizationdef get_hog_features(self, img, orient, pix_per_cell, cell_per_block, 
                   vis=False, feature_vec=True):# Call with two outputs if vis==Trueif vis == True:
   features, hog_image = hog(img, orientations=orient,
                             pixels_per_cell=(pix_per_cell, pix_per_cell),
                             cells_per_block=(cell_per_block, cell_per_block),
                             transform_sqrt=True,
                             visualise=vis, feature_vector=feature_vec)    return features, hog_image# Otherwise call with one outputelse:      
   features = hog(img, orientations=orient,
                  pixels_per_cell=(pix_per_cell, pix_per_cell),
                  cells_per_block=(cell_per_block, cell_per_block),
                  transform_sqrt=True,

开始阅读所有的车辆和非车辆图像。这里是每一个中的一个的一个例子vehicle和non-vehicle类:然后探索不同的色彩空间和不同的skimage.hog()参数(orientations,pixels_per_cell,和cells_per_block)。我从两个类的每一个中抓取随机图像,并显示它们,以感受skimage.hog()输出的样子。使用后的图像以不同的对比度和光度多次试验,它的工作最好使用YCrCb相结合的色彩空间与HOG提取的特征orientations=9,pixels_per_cell=(8, 8)和cells_per_block=(2, 2)。这是一个使用YCrCb色彩空间和HOG参数的例子orientations=9,pixels_per_cell=(8, 8)并且cells_per_block=(2, 2)

提取颜色特征的空间分级

为了使算法在识别汽车时更加稳健,HOG特征还增加了一种新的特征。除非你确切地知道你的目标对象是什么样子,否则模板匹配不是一个特别可靠的寻找车辆的方法。但是,原始像素值在搜索汽车中包含在您的特征向量中仍然非常有用。

虽然包含全分辨率图像的三个颜色通道可能很麻烦,但是我们可以对图像执行空间分级,并且仍然保留足够的信息来帮助查找车辆。

正如你在下面的例子中看到的那样,即使一路下降到32×32像素分辨率,汽车本身仍然可以被眼睛清楚地识别,这意味着相关特征仍然保留在这个分辨率下。OpenCV的cv2.resize()是一个方便的缩小图像分辨率的函数。

# Define a function to compute binned color features  
   def bin_spatial(self, img, size=(32, 32)):
       # Use cv2.resize().ravel() to create the feature vector
       #features = cv2.resize(img, size).ravel() 
       # Return the feature vector
       #return features
       color1 = cv2.resize(img[:,:,0], size).ravel()
       color2 = cv2.resize(img[:,:,1], size).ravel()

提取颜色特征的直方图

在这个项目中使用的另一个技术,使更多的功能是颜色强度的直方图,如下图所示。

# Define a function to compute color histogram features 
   # NEED TO CHANGE bins_range if reading .png files with mpimg!
   def color_hist(self, img, nbins=32, bins_range=(0, 256)):
       # Compute the histogram of the color channels separately
       channel1_hist = np.histogram(img[:,:,0], bins=nbins, range=bins_range)
       channel2_hist = np.histogram(img[:,:,1], bins=nbins, range=bins_range)
       channel3_hist = np.histogram(img[:,:,2], bins=nbins, range=bins_range)        # Concatenate the histograms into a single feature vector
       hist_features = np.concatenate((channel1_hist[0], channel2_hist[0], channel3_hist[0]))        # Return the individual histograms, bin_centers and feature vector
       return hist_features

现在我们的工具箱中已经有了几个特征提取方法,我们几乎已经准备好对分类器进行训练了,但是首先,就像在任何机器学习应用程序中一样,我们需要规范化数据。Python的sklearn包为您提供了StandardScaler()方法来完成这个任务。将单个图像的所有不同特征组合为一组特征。

以上为自动驾驶车辆检测部分涉及的基础知识,我们会在接下来的博客中再详细讨论。



参与讨论
登录后参与讨论
推荐文章
最近访客