2、视频AI基础:计算机视觉核心概念与常用算法

视频AI在商业场景中的落地,无论是客流统计、排队检测还是货架识别,其底层都依赖计算机视觉(Computer Vision, CV)技术。理解目标检测、目标跟踪与目标识别这三个核心概念的区别与联系,以及YOLO、DeepSORT、OpenPose等主流算法的适用边界,是设计可靠商业解决方案的前提。本节将系统梳理这些基础概念,并重点剖析算法选型时的关键考量因素。

视频AI商业场景核心概念与算法选型框架 视频流输入 摄像头/RTSP/本地文件 三大核心概念 目标检测:位置+类别(框) 目标跟踪:跨帧ID关联 目标识别:身份/属性判定 常用算法 YOLO系列:单阶段检测器 DeepSORT:检测+跟踪关联 OpenPose:人体关键点检测 商业场景映射 客流统计 检测+跟踪+计数线 排队检测 检测+跟踪+区域停留 货架识别 检测+识别+SKU匹配 核心概念是基础,算法是工具,场景是目标——三者需联动选型

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);对密集人群的骨架关联容易出错。
  • 适用场景:排队检测中的“站立/蹲下”状态判断、顾客伸手取货动作识别、员工违规操作检测(如未戴口罩时手部靠近面部)。
选型风险提示:不要盲目追求“最新算法”。YOLOv9在精度上可能优于v5,但推理速度和硬件兼容性未必适合你的边缘设备。DeepSORT虽然经典,但若场景是密集人群(如商场入口),建议考虑ByteTrack等更鲁棒的关联策略。OpenPose在实时性要求高的场景中需谨慎,可考虑轻量级替代方案(如MoveNet、PaddleDetection的PP-TinyPose)。

2.3 案例拆解:某连锁便利店货架识别与客流统计系统

为帮助理解上述概念和算法的实际应用,以下以一个中型连锁便利店(50家门店)的AI改造项目为例进行拆解。

项目背景与约束

  • 目标:实现门店内客流统计(进店人数、停留时长)和货架商品识别(缺货检测、陈列合规)。
  • 硬件约束:每店部署2个普通RGB摄像头(1080p,15 FPS),使用现有x86工控机(无独立GPU,仅CPU推理)。
  • 业务约束:需要实时性(延迟小于2秒),且误报率需低于5%。

初始现象与问题

初期尝试直接使用YOLOv5(官方权重)进行货架商品检测,发现两个严重问题:一是小瓶装饮料(330ml)频繁漏检;二是不同门店的灯光色温差异导致检测框抖动。同时,客流统计使用简单的帧差法,在多人并行进出时计数误差高达20%。

分析与决策过程

  1. 检测算法调整:放弃官方权重,使用YOLOv5s(小型模型)在自建数据集上微调。采集了10家门店、不同时段的5000张图像,标注了12类畅销SKU和“人”类别。针对小目标问题,将输入分辨率从640×640提升至960×960,并开启Mosaic数据增强。
  2. 跟踪算法选型:由于CPU推理,DeepSORT的Re-ID模型(通常为ResNet-50)计算量过大。改为使用DeepSORT的轻量版——将Re-ID模型替换为MobileNetV3-small,并降低特征匹配频率(每5帧匹配一次)。同时,在摄像头安装高度(3米俯视)下,人体外观特征区分度有限,因此将关联权重从外观特征(0.7)调整为运动特征(0.8)。
  3. 排队检测与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的离线分析需要额外存储视频片段,增加了存储成本。

复盘经验:(1)算法选型必须结合硬件算力,CPU环境下优先考虑轻量模型和降低推理频率;(2)检测是跟踪的上游,检测精度不足时,跟踪调参意义有限;(3)不要为了“先进”而用OpenPose,简单几何规则(距离+停留时间)在排队检测中往往更稳定、更易解释。

2.4 常见误区与总结

在视频AI商业项目初期,团队容易陷入以下误区,导致项目延期或效果不达标。

误区一:混淆检测与识别

货架识别项目中,只做目标检测(框出商品)就宣称“识别成功”。实际上,识别需要区分具体SKU(如“可口可乐”vs“百事可乐”),这需要更细粒度的分类模型或度量学习。检测只能告诉你“这里有商品”,识别才能告诉你“这是哪个商品”。

误区二:忽略跟踪的“长尾问题”

DeepSORT在简单场景(人少、运动缓慢)表现良好,但在高峰期(人群密集、互相遮挡)会出现ID频繁切换。此时应优先优化检测器(如增加训练数据中的遮挡样本),而不是盲目调整跟踪参数。跟踪算法的上限由检测质量决定。

误区三:OpenPose万能论

OpenPose适合行为分析,但计算开销大。在排队检测中,如果只需要“人数”和“排队时长”,用YOLO+DeepSORT+区域规则即可,完全不需要姿态信息。引入OpenPose只会增加延迟和成本。

总结与选型建议

  • 客流统计:首选YOLOv5s/v8s(人头检测)+ DeepSORT(轻量版),摄像头俯视安装效果最佳。
  • 排队检测:YOLO检测人框 + 区域坐标判断 + DeepSORT停留计时,避免使用姿态估计。
  • 货架识别:YOLO检测商品区域 + 分类模型(EfficientNet或RepVGG)识别SKU,若需判断缺货,可结合跟踪判断商品是否被取走。
  • 行为分析(如员工操作规范):才考虑OpenPose或轻量级姿态模型,且需GPU加速。
核心记忆点:检测是“框”,跟踪是“ID”,识别是“标签”。算法选型顺序应为:先明确业务需要哪个概念,再根据硬件算力选择算法,最后用业务数据微调模型。不要本末倒置。