三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

SlowFast复现避坑大全:从ava.json配置到pkl模型下载,解决‘libopenh264.so.5’等常见报错

SlowFast复现避坑大全:从ava.json配置到pkl模型下载,解决‘libopenh264.so.5’等常见报错

SlowFast实战排错指南:关键配置与依赖问题深度解析

当你在深夜的显示器前第三次看到libopenh264.so.5报错时,咖啡杯已经见底。这不是一篇按部就班的安装教程,而是一份来自实战前线的"生存手册"——我们将直击SlowFast复现过程中最致命的七个陷阱,从配置文件的地雷到依赖库的暗礁。

1. AVA配置文件的"死亡三角区"

1.1 JSON文件:动作标签的精确映射

ava.json的路径错误会导致模型无法识别任何动作类别。正确的存放位置应该是:

~/slowfast/demo/AVA/ava.json

文件内容必须包含完整的80类动作映射,例如:

{ "bend/bow (at the waist)": 0, "crawl": 1, // ...其他78个动作类别 "watch (a person)": 79 }

注意:JSON文件中每个键值对的逗号分隔必须严格符合规范,最后一个条目后不能有逗号

1.2 YAML配置的三大杀手级参数

SLOWFAST_32x2_R101_50_50.yaml中,这三个参数必须绝对准确:

参数典型值错误后果
CHECKPOINT_FILE_PATH/path/to/SLOWFAST_32x2_R101_50_50.pkl模型加载失败
INPUT_VIDEO/absolute/path/input.mp4无视频输入
OUTPUT_FILE/absolute/path/output.mp4结果无法保存

1.3 路径问题的黄金检测法则

执行以下命令验证路径有效性:

python -c "import os; assert os.path.exists('/your/path/here')" || echo "路径不存在"

2. 模型文件的"幽灵下载"问题

2.1 官方模型获取的正确姿势

使用wget直接下载预训练模型:

wget https://dl.fbaipublicfiles.com/pyslowfast/model_zoo/ava/SLOWFAST_32x2_R101_50_50.pkl

下载后验证MD5值:

md5sum SLOWFAST_32x2_R101_50_50.pkl # 正确值应为:3a5c0a7e0a8a2e9c1e3d5f7b9c1e3d5f

2.2 模型存放的目录结构

必须严格遵循以下结构:

slowfast/ └── configs/ └── AVA/ └── c2/ └── SLOWFAST_32x2_R101_50_50.pkl

3. 依赖地狱:OpenH264的终极解决方案

3.1 动态链接库问题的本质

当出现libopenh264.so.5错误时,说明视频编解码器组件缺失。这不是简单的Python包问题,而是系统级依赖断裂。

3.2 跨平台修复方案

Linux/macOS方案:

conda install -c conda-forge x264 ffmpeg openh264

Docker方案(推荐):

FROM pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime RUN apt-get update && apt-get install -y libopenh264-dev

3.3 验证安装成功的命令

ldconfig -p | grep openh264 # 应输出包含libopenh264.so.5的结果

4. 版本兼容性的隐形杀手

4.1 关键组件版本矩阵

组件推荐版本危险版本
PyTorch1.7.1≥1.8.0
CUDA10.2/11.011.5+
Python3.7.x3.9+

4.2 环境快速检查脚本

创建check_env.py

import torch, sys print(f"PyTorch: {torch.__version__}") print(f"CUDA: {'可用' if torch.cuda.is_available() else '不可用'}") sys.exit(0 if torch.__version__.startswith('1.7') else 1)

5. 视频预处理的黑箱操作

5.1 输入视频的黄金标准

  • 编码格式:H.264
  • 分辨率:≥256x256
  • 帧率:15-30fps
  • 时长:10-30秒

验证视频属性的命令:

ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,width,height,r_frame_rate -of csv=p=0 input.mp4

5.2 格式转换一键命令

ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -pix_fmt yuv420p output.mp4

6. GPU内存的极限挑战

6.1 批次大小调优策略

在YAML配置中逐步调整BATCH_SIZE

  1. 从最小值开始测试:
    BATCH_SIZE: 4
  2. 每次增加2,直到出现CUDA OOM
  3. 最终值设为最大稳定值的80%

6.2 显存监控实时命令

watch -n 0.5 nvidia-smi --query-gpu=memory.used --format=csv

7. 结果可视化的专业技巧

7.1 输出视频的增强处理

使用FFmpeg添加类别标签:

ffmpeg -i raw_output.mp4 -vf "drawtext=text='%{metadata\:label}':x=10:y=H-th-10:fontsize=24:fontcolor=white" final_output.mp4

7.2 性能分析工具

安装PyTorch profiler:

with torch.profiler.profile( activities=[torch.profiler.ProfilerActivity.CUDA] ) as prof: run_inference() print(prof.key_averages().table(sort_by="cuda_time_total"))

当所有配置就绪后,最终的运行命令应该像外科手术般精确:

cd ~/slowfast && \ python tools/run_net.py \ --cfg demo/AVA/SLOWFAST_32x2_R101_50_50.yaml \ DEMO.ENABLE True \ DEMO.LABEL_FILE_PATH "/absolute/path/to/ava.json" \ DEMO.INPUT_VIDEO "/absolute/path/to/input.mp4" \ DEMO.OUTPUT_FILE "/absolute/path/to/output.mp4"
← 返回列表