视频理解方向的研究生入门,常常被一堆名词卡住:多目标跟踪、2D 人体姿态估计、动作识别、时序建模。看单个任务的论文还能跟上,一旦要把它们组合成一个完整的视频理解系统,脑子里就容易乱。很多初学者第一步不是倒在数学上,而是倒在“不知道该把哪个模块放在前面,哪个模块放在后面”。
这次我们直接把视频理解这条链路拆开来看。多目标跟踪负责在时间维度上锁定“谁是谁”,2D 人体姿态估计负责在空间维度上读懂“人长什么样、姿势是什么”,SlowFast 这类时序建模方法则负责回答“这段视频里发生了什么动作”。三个模块不是并列关系,而是一套典型的“感知-追踪-理解”后置串联关系。
这篇文章不追求把所有公式讲一遍,而是用研究生做课题的实际顺序去组织内容:先看清任务边界,再准备工具链,然后逐个模块跑通,最后把三者级联成一个完整管线。读完之后,你应该能回答三个问题:这类系统需要哪些前置条件?每个模块的输入输出到底是什么?组合起来之后如何验证效果?
1. 视频理解任务地图:多目标跟踪、姿态估计与时序建模
先把三个任务放在一张表里,明确它们的输入、输出和典型应用。研究生刚开始看论文时,最容易犯的错就是把任务边界搞混。多目标跟踪解决的是“目标持续存在”的问题,姿态估计解决的是“单帧内人体结构”的问题,SlowFast 类的视频理解模型解决的是“帧间动作变化”的问题。
| 任务模块 | 输入 | 输出 | 典型评估对象 | 常见落点 |
|---|---|---|---|---|
| 多目标跟踪 MOT | 连续视频帧 | 每一帧中每个目标的边界框与唯一 ID | 轨迹连续性、ID 切换次数 | 人流量统计、车辆跟踪 |
| 2D 人体姿态估计 | 单张图像或单帧 | 人体关键点坐标 | 关键点检测精度 | 行为识别、康复分析、人机交互 |
| SlowFast 与时序建模 | 连续视频片段 | 动作类别或时空动作 tube | 分类准确率、动作检测 AP | 视频分类、异常行为识别 |
从系统角度来说,多目标跟踪更偏向“底层感知后处理”,它依赖检测器提供每帧目标框,再做跨帧关联。2D 人体姿态估计既可以作为独立单帧任务,也可以作为跟踪框内的“二级任务”。SlowFast 这类时序建模网络通常不再直接输出框,而是对一段时间窗口内的视频内容做整体判断。因此,“后置模块”这个词的核心含义是:前面已经有检测或分割结果,后面这些模块在时间维度上把这些结果组织成有意义的轨迹和动作语义。
如果你问这三个模块哪个最重要,答案取决于研究目标。做行人重识别和统计,跟踪质量是瓶颈;做动作细节分析,姿态估计精度是关键;做视频分类,时序建模的输入采样策略和网络结构更重要。研究生准备课题时,建议先确定自己的主任务是三种类型中的哪一种,不要一上来就想“全部做完”。
2. 环境与工具链准备:入门视频理解的起步条件
视频理解方向的实验环境相对固定,即使零基础也可以快速搭好。需要满足三个层次的条件:硬件算力、基础软件环境、领域工具库。
2.1 硬件参考
视频任务相比单帧图像任务会更消耗显存,因为输入不再是单张图,而是一段连续帧。多目标跟踪和 2D 姿态估计的显存压力主要来自检测器和单帧分辨率;SlowFast 这类视频模型的显存压力则来自帧数、采样的片段数和 3D 卷积计算量。
对研究生个人电脑而言,NVIDIA 显卡是最省心的选择。显存大小没有绝对下限,一般 8GB 到 12GB 显存可以完成小 batch 的模型推理和简单训练;如果要做大规模视频预训练或高分辨率输入,通常需要 24GB 或更高规格的 GPU,或者使用实验室服务器。实际显存占用会随输入分辨率、batch size、模型结构变化,需要以本机测试为准。
2.2 软件环境建议
建议先从 PyTorch 生态入手,因为它同时覆盖检测、跟踪、姿态估计和视频理解。除了 PyTorch 本身,还需要安装 OpenCV 用于视频读写与可视化。
# 创建虚拟环境示例,具体版本请按实际环境调整 conda create -n video_understanding python=3.10 -y conda activate video_understanding pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install opencv-python matplotlib tqdm2.3 领域常见工具库
| 工具库 | 主要解决方向 | 典型组件 |
|---|---|---|
| Ultralytics YOLO | 检测与姿态估计 | YOLOv8、YOLOv8-pose |
| ByteTrack | 多目标跟踪 | ByteTrack 跟踪器 |
| mmdetection | 目标检测框架 | Faster R-CNN、YOLO 系列配置 |
| mmpose | 姿态估计框架 | Top-down、Bottom-up 模型 |
| mmaction2 | 视频理解框架 | SlowFast、TSN、TSM |
| supervision | 检测跟踪可视化和后处理 | 轨迹绘制、框过滤 |
需要说明:以上库并非都要装。做 MOT 跟踪实验时,用 Ultralytics 加 ByteTrack 可以快速出结果;做姿态估计研究时,mmpose 提供的标准评估脚本更方便;做 SlowFast 实验时,mmaction2 直接封装了模型和数据集接口。建议按任务选工具,不要一次性把全家桶都装上。
3. 多目标跟踪:在时间维度上持续锁定目标
多目标跟踪的核心任务看起来简单:给视频中每一帧的每个目标分配一个稳定的 ID。但实际落在代码上时,需要先想清楚“当前帧的目标框从哪里来”和“如何把当前帧的目标框与上一帧的轨迹关联起来”。
3.1 方法论演进与经典路线
现代 MOT 方法大多遵循“先检测后跟踪”的框架。第一步用目标检测器获得每一帧的检测框;第二步通过卡尔曼滤波做运动预测;第三步用匈牙利算法等做检测框与已有轨迹的匹配。经典路线包括:
- SORT:只用运动信息做关联,速度快但 ID 切换较多。
- DeepSORT:在 SORT 基础上引入外观特征,用 ReID 模型提取行人特征,减少 ID 切换。
- ByteTrack:利用低分检测框来补偿遮挡情况下的漏检,在 MOT17 等数据集上效果明显。
另外还有一类“联合检测与跟踪”方法,例如 TransTrack、TrackFormer,它们把跟踪建模为查询学习问题,但这更适合有一定基础后再深入研究。初学阶段建议从 ByteTrack 类方法入手,因为逻辑直观、依赖少、工程稳定性好。
3.2 MOT 输入输出
MOT 的官方数据集标注通常包含每个目标的边界框和 ID。在 MOT17 等数据集中,常见标注格式是:
帧号, ID, 框左上角x, 框左上角y, 框宽, 框高, 置信度, 类别, 可见性运行跟踪器后,输出格式保持一致,只是置信度被替换为跟踪器内部得分。评估时需要使用官方工具计算 MOTA、IDF1、HOTA 等指标。
3.3 工程化验证流程
从零开始实现卡尔曼滤波加匈牙利匹配,可以当作理解原理的练习,但不建议作为研究主代码来维护。更高效的方式是直接调用成熟跟踪器,在掌握接口后做替换实验。
# 通用 MOT 推理流程示意,实际需要按所选跟踪器调整 from ultralytics import YOLO import cv2 model = YOLO("yolov8n.pt") tracker = None # 这里替换为 ByteTrack 等跟踪器 cap = cv2.VideoCapture("input.mp4") while cap.isOpened(): ret, frame = cap.read() if not ret: break results = model(frame)[0] boxes = results.boxes.xyxy.cpu().numpy() scores = results.boxes.conf.cpu().numpy() # 将 boxes 和 scores 输入跟踪器,得到带 ID 的跟踪结果 # tracks = tracker.update(boxes, scores, frame.shape)这段代码只是流程模板,不是完整实现。实际使用 ByteTrack 时,需要单独安装bytetrack或从官方仓库引入匹配模块。重点要理解:任何 MOT 系统都包含状态存储和关联逻辑,状态存储用于保存历史轨迹,关联逻辑用于决定当前帧检测框属于哪条轨迹。
3.4 测试结果怎么看
跑通 MOT 后,第一步要人工检查可视化结果。把跟踪结果画回视频上时,重点观察:
- 目标被短暂遮挡后,ID 是否发生变化。
- 两个目标交叉时,轨迹是否发生混淆。
- 静止目标的 ID 是否稳定。
这些现象无法只靠 MOTA 这一个数字反映出来,IDF1 和 HOTA 更能体现轨迹一致性。研究生做实验时建议同时保存可视化视频和指标文件,方便定位问题。
4. 2D 人体姿态估计:从检测框到骨骼关键点
2D 人体姿态估计的目标是找到图像中人体的关键点位置,如肩膀、手肘、手腕、膝盖等。常见数据集使用 17 个关键点定义人体骨架,输出通常是一组坐标值。
4.1 两类技术路线
姿态估计领域存在两条经典技术路线:
- Top-down:先用目标检测器检测出每个人,再对每个人体框做关键点回归。优点是单人体姿态估计精度较高,缺点是推理耗时随人数增加而增加。
- Bottom-up:先检测图像中所有关键点,再通过分组策略把关键点分配到不同的人。优点是速度受人数影响较小,但拥挤场景下分组难度大。
当前工程实践里,Top-down 路线更方便与 MOT 结合。做“跟踪框内人体姿态估计”时,只需要在跟踪得到的 person 框内调用单人姿态估计模型。
4.2 关键点输出格式与可视化
使用 YOLO-pose 这类模型时,模型输出每个检测框对应的关键点坐标和置信度。一套常见的关键点索引对应关系为 COCO 17 点:
# 关键点顺序示例:0-鼻子 1-左眼 2-右眼 3-左耳 4-右耳 # 5-左肩 6-右肩 7-左肘 8-右肘 9-左腕 10-右腕 # 11-左胯 12-右胯 13-左膝 14-右膝 15-左踝 16-右踝可视化时可以直接用 OpenCV 画出关键点和骨架连线,这种可视化结果也常用在论文的定性对比图中。
4.3 姿态估计的精度度量
在 COCO Keypoints 数据集上,常用评估指标是AP,它基于 OKS 计算。OKS 衡量预测关键点与真实关键点的相似程度,距离越近得分越高。读论文时要留意报告的是AP@0.5、AP@0.75还是AP均值。
对初学者,这里有一个常见的误解:姿态估计效果好不等于下游动作识别效果好。姿态估计误差会被带入后续的时序建模,因此做级联时不要只盯着单模块 AP,而要看整体行为识别结果。
4.4 与跟踪结合的代码流程
实际系统里,姿态估计通常不是对整帧所有区域均匀计算,而是对跟踪得到的每个行人框内做单人姿态估计。这样既能减少背景干扰,也能让计算集中在目标区域。
# 跟踪框内做单人姿态估计 import cv2 import numpy as np def estimate_pose_on_crop(frame, box, pose_model): x1, y1, x2, y2 = [int(v) for v in box] crop = frame[y1:y2, x1:x2] if crop.size == 0: return None results = pose_model(crop) return results这段逻辑并不复杂,但它揭示了一个重要工程问题:当跟踪框抖动或漏检时,后续姿态估计会放大误差。如果做级联实验,可以先考虑是否对跟踪框做平滑,例如使用指数移动平均或检测框时序滤波。
5. SlowFast 与时序建模:让模型理解动作变化
前面两个模块关注的是空间结构,而动作识别需要在时间维度上理解连续变化。“一个人站着”和“一个人摔倒”在单帧姿态上可能差异不大,但放到连续帧中就可以通过运动速度、轨迹突变等信息区分。SlowFast 正是这类时序建模方法中的代表。
5.1 SlowFast 的核心设计思路
SlowFast 名字与“slow”和“fast”路径有关,它的设计动机是人类视觉系统会同时处理精细的颜色纹理信息和快速变化的运动信息。
SlowFast 包含两条分支:
- Slow 分支:低帧率、高通道数,负责提取空间语义信息。
- Fast 分支:高帧率、低通道数,负责捕捉运动变化。
- 两个分支通过横向连接融合,最终用于视频动作分类。
它的优势在于不把“时间”简单地当作多帧堆叠,而是用不同时间分辨率的路径分开建模。这个概念本身对研究生的启发大于具体网络结构:遇到视频理解任务,应该先想清楚“哪些信息变化慢,哪些信息变化快”。
5.2 时序建模不只是 SlowFast
从更宽泛的视角看,时序建模方法还包括 3D CNN、双流网络、TSN、TSM,以及基于 Transformer 的视频模型。学生入门时不必每个都精读,但建议至少梳理出一个演变脉络:从普通 2D CNN 逐帧处理,到 3D CNN 直接卷积时间维度,再到用 2D 卷积加时间偏移模拟时序建模,最后到 Transformer 用自注意力建模长距离依赖。
这种脉络有助于理解论文的贡献点。例如很多论文开头都会写“SlowFast 证明了双路径时序建模的有效性,但计算开销仍然较大”,然后提出自己的改进。
5.3 SlowFast 推理时的输入预处理
视频模型与图像模型的一个显著区别是输入预处理。输入视频不能简单地“读一帧”就送入网络,而是需要完成采样、裁剪、归一化等一系列操作。mmaction2 中已经内置了数据流程处理,但研究生需要理解背后的逻辑。
# 视频片段采样逻辑示意 # 假设输入片段数为 32,输入帧数为 32 # 先从视频中均匀抽取若干帧,再缩放到目标分辨率 frames = sample_frames_uniformly(video_path, num_frames=32) frames = [resize(frame, (224, 224)) for frame in frames] input_tensor = normalize_and_stack(frames)实际使用中,mmaction2提供了完整的配置文件和数据预处理流程,不需要从零实现。但初学者最好手动走一遍“读取视频采样帧-送入模型-输出预测”的最小链路,这样能避免后续训练时数据加载环节出问题却找不到根源。
5.4 从分类到时空动作检测
如果只做视频分类,模型输出是视频级别的动作类别。但如果要把 SlowFast 用到“理解视频中某个人在做什么”的完整粒度,就需要进入时空动作检测任务。代表性数据集是 AVA,标注的是每一秒中每个人的动作类别。定睛看下来,这与 MOT 加姿态估计的后置输出紧密相关:跟踪提供“人是谁在哪”,姿态提供“身体结构”,SlowFast 或类似模型提供“人在做什么”。
6. 级联视频理解系统:MOT + 姿态估计 + SlowFast
现在把三个模块按研究场景组装起来。下面以一个典型任务为例:对一段监控或实验视频中的多个人进行持续行为分析。这里要用到身份保持、姿态轨迹、动作分类三块能力。
6.1 级联逻辑
整体流程可以设计成三个层级:
- 第一层:MOT 不断输出每个人体的检测框和 ID。
- 第二层:姿态估计在每个人体框内提取关键点,形成姿态序列。
- 第三层:将姿态序列或原始人体框序列输入时序模型,识别动作类别。
这里最容易犯的错是“一股脑把所有东西都塞给时序模型”。实际上,你可以选择以原始视频帧作为时序模型的输入,也可以选择以关键点序列作为输入。两者代表不同的技术路线,前者是端到端视觉表示学习,后者更像是骨架动作识别。建议初学阶段做一个消融对比,观察输入表示对动作识别精度的影响。
6.2 级联系统伪代码
def run_pipeline(video_path): cap = cv2.VideoCapture(video_path) while cap.isOpened(): ret, frame = cap.read() if not ret: break # 1. 跟踪模块:得到带 ID 的目标框 tracks = mot_tracker.update(frame) # 2. 对每个跟踪目标做姿态估计 for track in tracks: track_id = track.id box = track.box pose = pose_estimator(frame, box) # 3. 积累一定帧数后,送入时序模型 # 滑动窗口 = 固定长度帧序列 # 例如收集到 32 帧后,用 slowfast_model 预测动作类别 cap.release()虽然代码看起来简短,但实际运行时会遇到大量细节问题:跟踪目标进进出出,如何维护每个 ID 对应的滑动窗口?部分目标消失后重新出现,是否沿用原 ID?如果每个目标都单独跑一个时序模型,GPU 内存会不会不够?这些属于系统设计问题,建议在开始编码前先画好状态图。
6.3 研究视角提醒
做课程项目或大作业时,串联三个模块并展示效果,通常是加分项。但如果是做论文级研究,要特别注意:三个模块级联后,误差会单向传递,最终指标无法清晰归属到某个模块的贡献。因此,研究课题如果围绕“动作识别”本身,通常应该在固定跟踪结果或固定检测结果的前提下进行实验,而不是边跟踪边训练端到端模型。这也是很多论文设置“oracle”实验的原因。
7. 接口封装与批量任务处理
做视频理解实验,很少有人只跑一个视频。正式实验通常需要批量处理数百个视频片段,记录每段推理结果。如果代码不封装、无日志、无断点续跑,最后调试会非常痛苦。
7.1 把级联系统封装成可调用接口
建议把上一节的级联逻辑封装为一个函数,输入是视频路径,输出是结构化结果。这样做的好处是,之后可以方便地对单视频测试,也可以用多进程批量处理。
# 接口封装示例 def analyze_video(video_path: str) -> dict: """ 输入一个视频路径,输出结构化分析结果。 返回结果包含轨迹、关键点序列和动作分类。 """ tracks = [] frames = [] # 实际代码需要在这里调用 MOT、姿态估计和时序模型 # 返回结果建议使用可序列化格式 return { "video_path": video_path, "track_ids": [], "action_class": None, "confidence": 0.0, }写接口时有一个重要原则:不要让函数既做模型推理又做可视化保存。推理函数应只返回数值结果,可视化和日志写入由外部调用者完成。这样在批量处理时,可以跳过可视化以节省时间。
7.2 批量任务组织方式
批量处理视频时,建议维护一个视频列表文件,避免在代码里写死路径。简单做法是读取一个txt文件,每行一个视频路径,然后循环调用推理接口。
# 示例:video_list.txt data/videos/video_01.mp4 data/videos/video_02.mp4 data/videos/video_03.mp4处理时统一把运行日志写到独立文件,模型推理的原始结果保存为json或npy,这样即使任务中断,也可以通过查看输出文件确定哪些视频已跑完。
7.3 批量视频处理的通用并行思路
如果 GPU 显存允许,可以按 batch 方式把多个视频片段发送给模型。但对级联系统而言,MOT 的状态是逐帧更新的,较难直接跨视频并行。更稳妥的方案是视频级并行:每个进程负责一个视频,进程数由 GPU 显存决定。多进程方案虽然简单,但需要注意不同进程不能同时初始化过大的模型副本,否则显存会瞬间溢出。
# 串行批量处理示例 import json with open("video_list.txt", "r") as fp: video_paths = [line.strip() for line in fp if line.strip()] results = [] for video_path in video_paths: result = analyze_video(video_path) results.append(result) with open("results.json", "w", encoding="utf-8") as fp: json.dump(results, fp, ensure_ascii=False, indent=2)如果需要做断点续跑,可以先检查输出文件是否已存在,已存在则跳过。这样即使处理到第 200 个视频时崩溃,也不用从头再来。
8. 资源占用、性能观察与常见问题排查
视频理解实验出错时,很多人第一反应是改模型,但实际大部分问题出现在数据读取、显存占用和跟踪状态管理上。下面列出最常见的几类问题和排查思路。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 程序启动后显存不足 | 视频片段过长或 batch 过大 | 查看 GPU 显存占用 | 降低采样帧数、减小 batch、降低输入分辨率 |
| 视频读取很慢 | 视频编码和解码占用大量 CPU | 检查是否每帧都做完整预处理 | 使用缓存或预抽取帧到本地目录 |
| 跟踪结果 ID 频繁切换 | 检测器漏检或遮挡严重 | 保存可视化视频观察 | 换用 ByteTrack,配合低分检测框补偿 |
| 姿态关键点抖动明显 | 单帧估计未使用时序平滑 | 对比相邻帧关键点坐标 | 对关键点坐标做平滑处理 |
| SlowFast 推理结果与直觉不符 | 采样帧数量太少或动作不在关键帧 | 打印采样帧索引 | 调整采样策略或增加输入片段数 |
| 级联系统整体 FPS 很低 | 每帧都做全部模块推理 | 排查各模块耗时 | 分流处理,低频模块降低计算频率 |
8.1 显存占用观察方法
显存占用不能只看训练时报告,推理时也要观察。推荐使用nvidia-smi或 PyTorch 自带的torch.cuda.memory_summary()。启动一个模型后,先看显存占用是否符合预期;如果输入视频分辨率或 batch 调整后显存变化异常,优先检查是否有中间变量被意外保留。
显存不足时不一定要换显卡,可以先尝试四件事:降低输入分辨率、减少 batch size、使用混合精度推理、避免同时加载多个大模型。做级联实验时,如果 MOT、姿态模型、时序模型无法同时放进显存,可以采用“先后加载”或“CPU 推理辅助模块”的方式,但这会增加工程复杂度,需要自行权衡换帧策略。
8.2 视频级系统和单帧模型的性能差异
很多人习惯先跑通单帧图像模型,再切换到视频任务,此时体验会明显变化。视频任务有两个额外开销:视频解码与帧采样。OpenCV 的VideoCapture对压缩视频的解码效率有限,如果发现 CPU 占用过高且 GPU 利用率不足,可以考虑先用 ffmpeg 把所有视频帧抽取为图片格式,再由 Python 读取图片序列。
8.3 三个容易踩的工程坑
第一个坑是视频帧数与标注帧数对不上。MOT 数据集中,标注通常从第 1 帧开始,但视频读取器偶发跳帧,导致轨迹错位。建议在跑评估前先检查读取帧数是否与标注文件中的最大帧号一致。
第二个坑是跟踪器的输出框坐标在不同尺度下不一致。部分跟踪器使用归一化坐标,部分使用原始像素坐标。级联到姿态估计时,如果坐标尺度不统一,裁剪出来的人体框会偏移。
第三个坑是评估脚本与推理代码的边界条件不一致。比如 MOT 评估要求最小检测框高度、置信度阈值等参数,推理时如果未按同样逻辑处理,最终指标会偏低。
9. 研究规范与使用边界:人体视频数据的合规问题
多目标跟踪、2D 人体姿态估计和视频行为理解都涉及人的图像和视频数据。做实验时,必须把隐私与版权合规放在代码正确性之前。
在实验数据方面,尽量使用公开数据集,如 MOT Challenge 数据集、COCO Keypoints 数据集、Kinetics、AVA 等。公开数据集的授权条款通常在官网标注,使用前应确认研究用途和发布限制。不要随意下载来源不明的监控视频、个人录像或未授权的人像数据用于训练和展示。
如果确实需要用自采数据验证系统效果,需要做到:获得当事人的明确授权;对可识别身份的人脸区域进行脱敏;实验数据仅保存在受控环境中;不得将分析结果用于未经允许的身份判断或行为评价。动作识别系统很容易从“分析动作”滑向“分析特定个人”,这在合规层面是高风险行为。
在论文写作和开源代码发布时,也要注意只展示脱敏后的可视化结果。公开的演示视频应避免包含可识别个人身份的画面,更不要展示未经处理的真实监控片段。版权方面,若复现论文中使用的模型或算法,应遵守模型许可证和代码仓库的授权要求。
10. 研究生基本功:从论文到代码的推荐学习路径
最后给零基础入门的同学一个更贴近实际的学习顺序,避免“读论文一个月,代码一行没跑”的情况。
10.1 第一阶段:跑通最小案例
先不要试图从零复现 SlowFast,也不要从头训练一个跟踪器。选一个统一框架,例如 Ultralytics 或 mmpose,先把自己的一张测试图、一段测试视频跑出结果。这个阶段的目标是建立“输入-输出”的直觉。
10.2 第二阶段:固定评价指标
跑出可视化结果后,立刻找一个公开数据集和官方评估脚本,记录指标。研究实验如果没有可复现的指标,等于没有基线。针对多目标跟踪可以记录 MOTA、IDF1、HOTA;针对姿态估计可以记录 AP;针对动作分类可以记录 top-1 accuracy。整个实验流程中用同一个评估版本,不要中途换评估脚本。
10.3 第三阶段:拆模块做消融
把三个模块组合成系统后,必须做消融实验,否则你看不清瓶颈。比如固定跟踪结果不变,只替换姿态估计模型,观察最终动作识别结果是否变化。不要把所有模块同时替换,否则指标变化无法归因。
10.4 第四阶段:带着问题精读论文
当你已经手写过数据处理、跑通过推理、记录过指标,再回去读论文,才能知道哪些环节是作者的核心贡献,哪些只是工程细节。建议每篇论文记录四件事:输入格式、网络结构、损失函数、推理采样方式。很多论文读不懂,不是数学不行,而是不知道它在哪里接数据、在哪里出结果。
这套流程只要能走完一遍,研究生阶段的计算机视觉入门就没有坎了。遇到问题优先从数据和工程链路排查,再回头质疑模型,顺序不要反。后续可以继续向三个方向深入:把跟踪器换成端到端联合模型,把姿态估计扩展到多人 3D 姿态,把动作识别扩展到时序动作检测和更细粒度的行为理解。每一步都建议保留一套最小可运行代码和一组固定指标,这样后续实验才有对照。