【SlowFast实战:从零构建自定义动作识别数据集到模型部署】
1. 从零开始构建自定义动作识别数据集动作识别是计算机视觉领域的重要研究方向而构建高质量的数据集是训练出优秀模型的第一步。我最近在医疗监护项目中尝试用SlowFast模型识别跌倒行为发现自定义数据集的构建过程有不少需要注意的细节。1.1 视频素材的选择与处理选择视频素材时要根据你的应用场景来决定。比如做手势识别就需要各种手势视频做跌倒检测就需要包含不同跌倒姿势的素材。我建议初期先用少量视频测试流程等跑通后再扩充数据量。处理视频时ffmpeg是最实用的工具。下面这个命令可以把长视频裁剪成3秒的片段ffmpeg -ss 00:00:00.0 -to 00:00:03.0 -i input.mp4 output.mp41.2 视频帧的提取策略SlowFast模型需要两种帧率的数据标注用帧率每秒1帧训练用帧率每秒30帧提取标注用帧的命令ffmpeg -i input.mp4 -r 1 -q:v 1 output_%06d.jpg提取训练用帧的命令ffmpeg -i input.mp4 -r 30 -q:v 1 output_%06d.jpg1.3 使用Faster R-CNN自动检测人物手动标注效率太低我推荐使用Detectron2中的Faster R-CNN来自动检测人物位置。安装Detectron2后可以用几行代码实现人物检测from detectron2 import model_zoo from detectron2.engine import DefaultPredictor cfg model_zoo.get_config(COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml) cfg.MODEL.WEIGHTS model_zoo.get_checkpoint_url(COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml) predictor DefaultPredictor(cfg)1.4 使用VIA工具进行标注修正虽然Faster R-CNN能自动检测人物但还是需要人工检查。我习惯用VGG Image Annotator(VIA)来修正检测结果。导入自动检测的CSV后可以删除错误的检测框保留质量好的检测结果。注意在VIA中不需要添加动作标签因为SlowFast使用的标签格式与VIA不同我们后续会手动添加动作标签。2. 构建AVA格式的数据集SlowFast默认使用AVA数据集格式我们需要将自己的数据转换成这种格式。经过几次尝试我总结出了一套可行的方案。2.1 数据集目录结构完整的AVA格式数据集包含以下文件和目录annotations/ ava_train_v2.2.csv ava_val_v2.2.csv ava_action_list_v2.2.pbtxt person_box_67091280_iou90/ ava_detection_train_boxes_and_labels.csv frame_lists/ train.csv val.csv frames/ video1/ video1_000001.jpg video1_000002.jpg ...2.2 关键文件详解ava_action_list_v2.2.pbtxt定义了动作类别item { name: fall id: 1 }ava_train_v2.2.csv包含训练集的标注格式为视频名,时间戳,x1,y1,x2,y2,动作ID,置信度 video1,1,0.395,0.230,0.545,0.933,1,0train.csv列出了所有训练帧original_video_id,video_id,frame_id,path,labels video1,0,0,video1/video1_000001.jpg,2.3 数据集划分技巧我建议将数据按视频划分训练集和验证集而不是随机划分帧。这样可以避免同一视频的相似帧同时出现在训练集和验证集中导致评估结果不准确。3. 配置SlowFast训练环境有了数据集后下一步是配置训练环境。这里有几个关键点需要注意。3.1 预训练模型的选择SlowFast提供了多个预训练模型我推荐使用SLOWFAST_32x2_R101_50_50.pkl。下载后放在configs/AVA/c2/目录下。提示使用预训练模型可以显著缩短训练时间特别是在数据量不大的情况下。3.2 配置文件详解创建自定义配置文件时有几个关键参数需要调整TRAIN: CHECKPOINT_FILE_PATH: path/to/pretrained/model.pkl DATA: PATH_TO_DATA_DIR: path/to/your/dataset AVA: FRAME_DIR: path/to/frames FRAME_LIST_DIR: path/to/frame_lists ANNOTATION_DIR: path/to/annotations MODEL: NUM_CLASSES: 1 # 根据你的动作类别数调整3.3 启动训练配置完成后用以下命令启动训练python tools/run_net.py --cfg configs/AVA/your_config.yaml训练过程中常见的问题显存不足减小BATCH_SIZE损失不下降检查数据标注是否正确过拟合增加数据量或使用正则化4. 模型部署与效果验证训练完成后我们需要验证模型效果并部署使用。4.1 创建推理配置文件在demo/AVA/目录下创建配置文件主要修改以下参数DEMO: LABEL_FILE_PATH: path/to/your_labels.json INPUT_VIDEO: path/to/input.mp4 OUTPUT_FILE: path/to/output.mp44.2 修改AVA Helper需要调整ava_helper.py中的帧范围设置匹配你的数据AVA_VALID_FRAMES range(1, 6) # 根据你的实际帧数调整4.3 运行推理使用以下命令进行视频推理python tools/run_net.py --cfg demo/AVA/your_demo_config.yaml4.4 效果优化技巧如果识别效果不理想可以尝试增加训练数据量调整数据增强参数微调模型架构优化检测阈值我在实际项目中发现SlowFast对光照变化比较敏感建议在数据采集时保持光照条件一致。另外模型对快速动作的识别效果较好但对缓慢变化的动作有时会漏检。

相关新闻