2、视频AI基础:计算机视觉核心概念与常用算法
视频AI在商业场景中的落地,无论是客流统计、排队检测还是货架识别,其底层都依赖计算机视觉(Computer Vision, CV)技术。理解目标检测、目标跟踪与目标识别这三个核心概念的区别与联系,以及YOLO、DeepSORT、OpenPose等主流算法的适用边界,是设计可靠商业解决方案的前提。本节将系统梳理这些基础概念,并重点剖析算法选型时的关键考量因素。
2.1 三大核心概念:检测、跟踪与识别
在视频AI项目中,经常出现“检测到了但没跟踪住”“识别错了人”等混乱描述,根源在于对这三个概念边界不清。它们在实际系统中是串联协作的关系,但各自解决不同层次的问题。
核心原理
- 目标检测(Object Detection):解决“画面中有什么、在哪里”的问题。输出为边界框(Bounding Box)坐标和类别标签(如“人”“商品”)。检测是逐帧独立进行的,不关心帧与帧之间的关联。
- 目标跟踪(Object Tracking):解决“同一目标在连续帧中如何对应”的问题。输出为每个目标的唯一ID(如ID-1、ID-2)及其轨迹。跟踪需要利用检测结果,通过运动预测和外观匹配建立跨帧关联。
- 目标识别(Object Recognition):解决“这个目标具体是谁/是什么型号”的问题。例如,识别出“这是张三”或“这是可口可乐330ml罐装”。识别通常需要额外的特征提取和比对,如人脸识别、商品SKU识别。
三者协作关系
一个典型的视频AI处理链路为:视频帧 → 目标检测(找出所有人/商品) → 目标跟踪(赋予ID并持续关联) → 目标识别(对特定目标做身份/属性判断) → 业务逻辑(计数、排队时长、库存判断)。检测是基础,跟踪是时序上的增强,识别是语义层面的深化。
| 维度 | 目标检测 | 目标跟踪 | 目标识别 |
|---|---|---|---|
| 输入 | 单帧图像 | 连续视频帧+检测结果 | 检测框/跟踪轨迹+特征库 |
| 输出 | 边界框+类别 | ID+轨迹序列 | 身份/属性标签 |
| 核心难点 | 小目标、遮挡、多尺度 | ID切换、长期遮挡 | 类间相似、光照变化 |
| 商业应用 | 区域人数统计 | 路径分析、停留时长 | VIP识别、商品SKU确认 |
2.2 常用算法:YOLO、DeepSORT与OpenPose
算法选型直接决定系统的精度、速度和部署成本。以下三种算法是当前商业项目中最常见的选择,但各有优劣和适用场景。
YOLO系列(目标检测)
YOLO(You Only Look Once)是单阶段检测器的代表,将检测问题转化为回归问题,一次前向传播即可输出所有目标的位置和类别。目前商业项目中常用YOLOv5、YOLOv8及YOLOv9等版本。
- 优势:速度快(实时性高,边缘设备可达30-60 FPS)、精度较高、部署生态成熟(支持TensorRT、OpenVINO等加速)。
- 劣势:对极小目标(如远距离的人头)和密集遮挡场景的鲁棒性弱于两阶段检测器(如Faster R-CNN),但通过改进训练策略可缓解。
- 适用场景:客流统计(人头检测)、货架商品检测(SKU定位)、排队区域人员检测。
DeepSORT(目标跟踪)
DeepSORT(Simple Online and Realtime Tracking with Deep Association)是当前工业界最常用的多目标跟踪算法。它基于检测结果,结合卡尔曼滤波预测运动轨迹,并利用外观特征(Re-ID特征)进行数据关联。
- 核心流程:检测框 → 卡尔曼滤波预测 → 级联匹配(优先匹配短期轨迹) → 外观特征匹配(解决长期遮挡后的重识别) → 轨迹更新。
- 优势:在行人跟踪场景下表现稳定,ID切换率较低,计算开销适中。
- 劣势:严重依赖检测质量;如果检测频繁漏检,跟踪会中断;对快速运动和剧烈形变(如拥挤人群中的儿童)仍可能出现ID错误。
- 适用场景:客流路径分析、排队队列成员跟踪、顾客动线热力图。
OpenPose(人体关键点检测)
OpenPose是一种自底向上的人体姿态估计方法,先检测所有关键点(如手腕、肩膀、脚踝),再通过Part Affinity Fields(PAF)将关键点关联成个体骨架。
- 优势:能同时检测多人,且对遮挡有一定鲁棒性;输出关键点坐标可用于行为分析。
- 劣势:计算量大,实时性较差(原版在GPU上约10-20 FPS);对密集人群的骨架关联容易出错。
- 适用场景:排队检测中的“站立/蹲下”状态判断、顾客伸手取货动作识别、员工违规操作检测(如未戴口罩时手部靠近面部)。
2.3 案例拆解:某连锁便利店货架识别与客流统计系统
为帮助理解上述概念和算法的实际应用,以下以一个中型连锁便利店(50家门店)的AI改造项目为例进行拆解。
项目背景与约束
- 目标:实现门店内客流统计(进店人数、停留时长)和货架商品识别(缺货检测、陈列合规)。
- 硬件约束:每店部署2个普通RGB摄像头(1080p,15 FPS),使用现有x86工控机(无独立GPU,仅CPU推理)。
- 业务约束:需要实时性(延迟小于2秒),且误报率需低于5%。
初始现象与问题
初期尝试直接使用YOLOv5(官方权重)进行货架商品检测,发现两个严重问题:一是小瓶装饮料(330ml)频繁漏检;二是不同门店的灯光色温差异导致检测框抖动。同时,客流统计使用简单的帧差法,在多人并行进出时计数误差高达20%。
分析与决策过程
- 检测算法调整:放弃官方权重,使用YOLOv5s(小型模型)在自建数据集上微调。采集了10家门店、不同时段的5000张图像,标注了12类畅销SKU和“人”类别。针对小目标问题,将输入分辨率从640×640提升至960×960,并开启Mosaic数据增强。
- 跟踪算法选型:由于CPU推理,DeepSORT的Re-ID模型(通常为ResNet-50)计算量过大。改为使用DeepSORT的轻量版——将Re-ID模型替换为MobileNetV3-small,并降低特征匹配频率(每5帧匹配一次)。同时,在摄像头安装高度(3米俯视)下,人体外观特征区分度有限,因此将关联权重从外观特征(0.7)调整为运动特征(0.8)。
- 排队检测与OpenPose的取舍:原计划用OpenPose判断收银台前顾客是否“排队”,但实测CPU上OpenPose仅能跑2 FPS,无法满足实时性。改为使用YOLO检测“人”框 + 计算框中心点与收银台区域的距离,结合DeepSORT的ID停留时间来判断排队状态。OpenPose仅用于离线分析(如高峰时段顾客是否在货架前蹲下寻找商品)。
关键参数与实施步骤
# 检测模型配置(YOLOv5s自定义训练)
img_size: 960
batch: 16
epochs: 100
optimizer: SGD
lr0: 0.01
mosaic: 1.0
mixup: 0.2
# DeepSORT轻量化配置
max_dist: 0.3 # 最大余弦距离
max_iou_distance: 0.7 # IOU阈值
max_age: 30 # 轨迹最大存活帧数
n_init: 3 # 确认轨迹所需帧数
nn_budget: 50 # 特征库大小
reid_model: 'mobilenetv3_small.pt'
结果对比与复盘
| 指标 | 优化前 | 优化后 | 提升幅度 |
|---|---|---|---|
| 小瓶装饮料检测mAP@0.5 | 0.72 | 0.89 | +23.6% |
| 客流计数准确率 | 80% | 94% | +14% |
| CPU推理速度(FPS) | 8 | 12 | +50% |
| 排队检测误报率 | 15% | 4.5% | -70% |
风险与代价:自建数据集标注耗时约2周,且需要持续收集新门店数据以适配不同装修风格。轻量化DeepSORT在顾客快速转身时偶尔出现ID切换,但通过将max_age从30降至20,减少了“幽灵轨迹”的出现。OpenPose的离线分析需要额外存储视频片段,增加了存储成本。
2.4 常见误区与总结
在视频AI商业项目初期,团队容易陷入以下误区,导致项目延期或效果不达标。
误区一:混淆检测与识别
货架识别项目中,只做目标检测(框出商品)就宣称“识别成功”。实际上,识别需要区分具体SKU(如“可口可乐”vs“百事可乐”),这需要更细粒度的分类模型或度量学习。检测只能告诉你“这里有商品”,识别才能告诉你“这是哪个商品”。
误区二:忽略跟踪的“长尾问题”
DeepSORT在简单场景(人少、运动缓慢)表现良好,但在高峰期(人群密集、互相遮挡)会出现ID频繁切换。此时应优先优化检测器(如增加训练数据中的遮挡样本),而不是盲目调整跟踪参数。跟踪算法的上限由检测质量决定。
误区三:OpenPose万能论
OpenPose适合行为分析,但计算开销大。在排队检测中,如果只需要“人数”和“排队时长”,用YOLO+DeepSORT+区域规则即可,完全不需要姿态信息。引入OpenPose只会增加延迟和成本。
总结与选型建议
- 客流统计:首选YOLOv5s/v8s(人头检测)+ DeepSORT(轻量版),摄像头俯视安装效果最佳。
- 排队检测:YOLO检测人框 + 区域坐标判断 + DeepSORT停留计时,避免使用姿态估计。
- 货架识别:YOLO检测商品区域 + 分类模型(EfficientNet或RepVGG)识别SKU,若需判断缺货,可结合跟踪判断商品是否被取走。
- 行为分析(如员工操作规范):才考虑OpenPose或轻量级姿态模型,且需GPU加速。