4、传统方法回顾:HOG+SVM、Haar特征、滑动窗口在行人检测中的应用与局限
在深度学习席卷计算机视觉领域之前,无人车环境感知中的行人检测主要依赖手工设计特征与经典机器学习分类器的组合。其中,HOG(方向梯度直方图)+SVM(支持向量机)与Haar特征+Adaboost是两大主流技术路线,配合滑动窗口策略实现全图扫描。理解这些传统方法的数学本质、工程实现与性能瓶颈,不仅有助于我们读懂早期无人车系统的代码遗产,更能为理解现代检测器(如YOLO、Faster R-CNN)的锚点机制、特征金字塔与NMS后处理提供清晰的演进坐标。本节将系统回顾这些经典方法的核心原理、操作流程、实战案例与固有局限。
上图展示了传统行人检测的完整工程链路。从车载摄像头获取原始图像后,系统通过滑动窗口在多个尺度上生成候选区域,对每个窗口提取HOG或Haar特征,送入训练好的SVM或Adaboost分类器进行二分类判定,最后通过非极大值抑制(NMS)合并重叠检测框。这条链路在2010年前后是无人车感知模块的标准配置,但其计算冗余与特征表达能力的不足,最终促使业界转向深度学习方法。
4.1 核心原理:HOG特征与SVM分类器
HOG特征由Navneet Dalal和Bill Triggs在2005年提出,其核心思想是:物体的局部外观和形状可以通过局部梯度或边缘方向的分布来表征。具体实现时,将图像划分为小的连通区域(称为cell,通常为8×8像素),在每个cell内统计梯度方向直方图(通常9个bin),然后将相邻的2×2个cell组合成一个block(16×16像素),对block内的直方图进行对比度归一化,以增强对光照变化的鲁棒性。最终,一个64×128像素的检测窗口会产生7×15×36=3780维的特征向量。
SVM(支持向量机)在此扮演二分类器的角色,其目标是在特征空间中找到一个最大间隔超平面,将正样本(行人)与负样本(背景)分开。对于线性不可分的情况,引入核函数(通常为RBF核)将特征映射到高维空间。在行人检测场景中,由于特征维度较高而样本量相对有限,线性SVM往往就能取得不错的效果,且推理速度更快。
4.2 操作流程:从训练到部署的完整步骤
传统行人检测系统的构建遵循一套标准化的流程,每一步都对最终性能产生显著影响。以下是工程实践中的核心步骤:
- 数据准备:收集包含行人的正样本图像(通常需要裁剪为64×128像素)和不含行人的负样本图像(背景、道路、树木等)。正样本数量建议在5000~10000张,负样本初始收集10000~20000张。
- 特征提取:对每个样本计算HOG特征向量。对于负样本,通常采用“难例挖掘”策略——先用初始模型检测负样本图像,将误检的区域作为新的负样本加入训练集,迭代2~3轮。
- 模型训练:使用SVM(如liblinear或libsvm)训练分类器。训练时需将特征归一化到[-1,1]或[0,1]区间,并采用交叉验证选择最优参数。
- 滑动窗口检测:在推理阶段,对输入图像构建图像金字塔(通常缩放因子为1.05~1.2),在每个尺度上以固定步长(如8像素)滑动64×128的检测窗口,提取特征并送入SVM分类。
- 后处理:对分类得分高于阈值的窗口进行NMS,去除重叠度高的冗余框。NMS的IoU阈值通常设为0.3~0.5。
| 步骤 | 输入 | 关键参数 | 输出 | 耗时占比 |
|---|---|---|---|---|
| 图像金字塔构建 | 原始帧(1280×720) | 缩放因子1.1, 层数8~12 | 多尺度图像 | 10% |
| 滑动窗口生成 | 金字塔图像 | 步长8px, 窗口64×128 | 约5×10⁴个候选框 | 5% |
| HOG特征提取 | 每个候选框 | cell=8, block=16, bin=9 | 3780维向量 | 70% |
| SVM分类 | 特征向量 | 线性核, C=0.1 | 置信度分数 | 10% |
| NMS后处理 | 所有检测框 | IoU阈值=0.4 | 最终检测结果 | 5% |
4.3 案例拆解:基于HOG+SVM的校园低速无人车行人检测
2018年,某高校智能车队在校园封闭道路部署了一台低速无人接驳车,要求检测距离30米内的行人并实现紧急制动。团队最初采用HOG+SVM方案,以下是完整的工程实施与调优过程。
初始状态与约束:车载工控机为Intel i7-6700 CPU(无GPU),摄像头为130万像素工业相机,帧率30FPS。算法需在100ms内完成单帧检测,否则无法满足40km/h以下车速的安全制动距离。团队使用INRIA行人数据集(正样本2416张,负样本12180张)作为初始训练数据。
第一轮测试:直接使用默认参数(cell=8, block=16, 线性SVM, C=0.01),在测试视频上得到检测率82%,但每帧处理时间达到450ms,远超100ms预算。进一步分析发现,图像金字塔构建了12层,每层滑动窗口步长为8像素,导致单帧产生约12万个候选窗口,其中90%的计算浪费在背景区域。
优化措施:团队进行了三项关键调整。第一,将滑动窗口步长从8像素增大到16像素,候选窗口数量减少至3万个,处理时间降至180ms。第二,引入“感兴趣区域(ROI)”限制——利用无人车的固定安装位置,将检测区域限定在地平线以下、车辆前方30米内的梯形区域,进一步排除天空和远处无效区域,候选窗口降至1.2万个,处理时间降至95ms。第三,将SVM的C值调至0.05,并增加两轮难例挖掘,将负样本扩充至2.5万张,检测率提升至89%。
结果与代价:最终系统在校园场景达到89%的检测率,单帧处理时间95ms,勉强满足实时性要求。但代价是检测距离从30米缩短至25米(因为ROI裁剪了远处区域),且对部分遮挡行人(如被树干遮挡一半身体)的漏检率高达35%。团队复盘认为,HOG特征对局部遮挡的鲁棒性不足是根本原因,而ROI裁剪虽然提升了速度,却牺牲了感知范围。
4.4 Haar特征与Adaboost:另一条技术路线
Haar特征由Viola和Jones在2001年提出,最初用于人脸检测。其核心是计算图像中相邻矩形区域的灰度差分值,通过积分图实现O(1)复杂度的快速计算。Haar特征模板包括边缘特征、线性特征、中心特征和对角线特征,每个模板由2~3个矩形组成。在行人检测中,Haar特征通常与Adaboost级联分类器配合使用。
Adaboost的核心思想是迭代训练一系列弱分类器(通常是深度为1的决策树),每个弱分类器关注前一轮被错误分类的样本,最终加权组合为强分类器。级联结构则通过“粗筛+精判”的方式大幅提升推理速度:前几级分类器使用少量特征快速排除大部分背景窗口,后续级分类器使用更多特征对剩余候选窗口进行精细判定。
与HOG+SVM相比,Haar+Adaboost的优势在于:积分图计算速度快,适合嵌入式平台;级联结构天然支持早期拒绝,计算效率更高。但其劣势同样明显:Haar特征对光照变化敏感,对行人这种非刚性目标的表达能力弱于HOG;级联分类器的训练需要大量负样本,且容易过拟合。
| 对比维度 | HOG+SVM | Haar+Adaboost |
|---|---|---|
| 特征类型 | 梯度方向直方图 | 矩形灰度差分 |
| 特征维度 | 3780维(64×128窗口) | 数百~数千维(级联) |
| 分类器 | SVM(线性/RBF) | Adaboost级联 |
| 计算速度 | 较慢(特征计算量大) | 较快(积分图+级联) |
| 对行人形变鲁棒性 | 较好(梯度对局部形变不敏感) | 较差(依赖固定纹理模式) |
| 典型应用 | 行人、车辆检测 | 人脸检测、简单目标 |
| 无人车适用性 | 低速场景可用 | 不推荐(误检率高) |
4.5 常见误区与总结复盘
在工程实践中,开发者常陷入以下误区,导致传统方法性能不佳或部署失败:
- 误区一:盲目增加金字塔层数。认为层数越多检测越准,实际上每增加一层,计算量呈指数增长,而检测率的提升在3~4层后趋于饱和。建议根据目标最小尺寸和车速确定金字塔范围。
- 误区二:忽略难例挖掘。直接使用公开数据集训练后部署,导致在自车场景中误检率极高(如将路牌阴影误检为行人)。必须使用自车采集的负样本进行难例挖掘。
- 误区三:将HOG特征视为“万能特征”。HOG对旋转、遮挡、极端光照敏感。当行人弯腰、跑步或携带大件物品时,特征分布发生显著变化,SVM的决策边界无法覆盖。
- 误区四:忽视NMS参数调优。IoU阈值设置过高(如0.7)会导致同一行人产生多个检测框,设置过低(如0.2)则可能合并相邻行人。需根据实际场景的密集程度调整。
回顾HOG+SVM与Haar特征在行人检测中的兴衰,我们可以清晰地看到一条技术演进主线:从手工设计特征到数据驱动特征,从滑动窗口穷举到稀疏候选区域,从二分类器到端到端回归。传统方法的局限并非某个环节的缺陷,而是整个范式在复杂开放场景下的天花板。然而,其工程思想——多尺度处理、难例挖掘、级联拒绝、NMS后处理——至今仍深深影响着现代检测器的设计。理解这些底层逻辑,有助于我们在部署轻量级深度学习模型时,更精准地诊断问题、优化性能。