一、功能
对车辆前方的车辆进行检测,效果如图:
二、算法
1、传统检测方法
常规的机器学习方法,包括训练和应用两个过程。
训练:需要构建训练集(包括正负样本),使用HOG、SIFT等特征描述获取特征,使用SVM(支持向量机)、决策树等对上一步获取的特征和对应的标签(标签指:正样本或者负样本)进行训练(训练指:自动生成SVM或者决策树等的参数,使其可以用来分类)。
应用:提取需要识别的图片的HOG、SIFT等特征,使用训练好的SVM或者决策树对提取的特征进行分类。
2、神经网络
通过神经网络训练正负样本,可以直接识别。
考虑到应用场景为辅助驾驶,神经网络有两个缺陷,第一、神经网络需要大量的并行计算,占用大量的空间,在FPGA、ARM等硬件上运行速度很慢;第二、神经网络本身相当于黑盒,中间数据无法获取、调试起来无从入手,增加了不确定性。所以,这里使用OpenCV进行图像处理。
三、代码
1)提取HOG特征,以下为实现方法:
# Define a function to return HOG features and visualization
def get_hog_features(img, orient, pix_per_cell, cell_per_block, vis=False, feature_vec=True):
if 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=False,
visualise=True, feature_vector=False)
return features, hog_image
else:
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=False,
visualise=False, feature_vector=feature_vec)
return features
2)训练分类器
这里使用SVM分类器,以下为代码:
t = time.time()