赞
踩
本文参照杨帆老师的博客,根据自己的需要进行制作,杨帆老师博客原文链接如下:
conda create -n your-env-name python=3.8 -y
conda activate your-env-name
数据集制作环境只需要YOLOv5和torch,下面命令是安装cuda11.1版本的torch的torchvision。
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
pip install opencv-python-headless==4.1.2.30
提前下载好YOLOv5源码,cd到YOLOv5根目录,使用如下命令安装YOLOv5的依赖。
pip install -r requirements.txt
训练环境本文严格依照MMaction2框架的安装环境,如有需要可参考如下链接:
安装 — MMAction2 1.2.0 文档https://mmaction2.readthedocs.io/zh-cn/latest/get_started/installation.html
conda create -n your-env-name python=3.8 -y
conda activate your-env-name
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
使用mim命令可以自动解决版本问题
- pip install -U openmim
- mim install mmengine
- mim install mmcv
- mim install mmdet
- mim install mmpose
- git clone https://github.com/open-mmlab/mmaction2.git
- cd mmaction2
- pip install -v -e .
请参考其他博客,进行MMaction2的安装验证
请先下载杨帆老师的裁剪程序包
git clone https://gitee.com/YFwinston/Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset.git
本文以11秒视频为例,读者可以根据自己的需求变更视频长度,建议每个视频里都有动作并且持续11秒时间,裁剪软件可以使用剪映,ffmpeg裁剪出来的视频长度有出入,一定务必保证裁剪出来的视频为11:00:00,不能多一毫秒!!!!
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset下运行如下命令
sh cut_video.sh
生成的结果保存在 Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/frames文件夹下
每秒一帧,整合在一个文件夹中的原因是方便yolov5检测,初步得到打标框 ,在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset下运行如下命令
python choose_frames_all.py 10 0
运行结果保存在 Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/choose_frames_all下
不整合主要是方便via的标注,文件结构会根据对应的视频 ,在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset下运行如下命令
python choose_frames.py 10 0
结果保存在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/choose_frames下
推荐使用YOLOv5x作为检测的预训练权重,虽然模型较大,但是检测性能较好,如有需要可以在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/yolov5/detect.py修改对应代码
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort下运行如下代码
python ./yolov5/detect.py --source ../Dataset/choose_frames_all/ --save-txt --save-conf
结果会保存在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/yolov5/runs/detect/exp,请挨个检查是否每张图片都有人的标注框,如果没有,请先将label里的txt文件转成xml后,使用labelimg标注,之后再将xml转为txt
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/mywork下运行如下代码
python dense_proposals_train.py ../yolov5/runs/detect/exp/labels ./dense_proposals_train.pkl show
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset下运行如下代码
python choose_frames_middle.py
请在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/mywork/dense_proposals_train_to_via.py 中修改自己的动作类别(注意:动作类别请尽量使用英文,中文动作可能在训练阶段会报编码错误!)
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/mywork下运行如下代码
python dense_proposals_train_to_via.py ./dense_proposals_train.pkl ../../Dataset/choose_frames_middle/
结果保存在 Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/choose_frames_middle文件夹中的json文件
由于YOLOv5的预训练权重包含了80种物品类别,我们只需要人这一种类别,所以我们需要删除其他类别
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset下运行如下代码
python chang_via_json.py
结果保存在 Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/choose_frames_middle文件夹中的_s.json文件
via标注工具下载链接:https://www.robots.ox.ac.uk/~vgg/software/via/downloads/via3/via-3.0.11.ziphttps://www.robots.ox.ac.uk/~vgg/software/via/downloads/via3/via-3.0.11.zip点击 via_image_annotator.html
点击1,导入choose_frames_middle的图片文件,点击2,导入_s.json文件
标注完之后点击保存,会下载一个json文件,请按照1_finish.json,2_finish.json重命名文件之后,放在choose_frames_middle对应的文件夹下
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/下执行
python json_extract.py
结果保存在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/train_without_personID.csv文件内
请提前下载deepsort的权重文件ckpt.t7,梯子下载过慢可以使用下面的百度网盘链接:
链接:https://pan.baidu.com/s/1zPBlLgJ8o3i5R5H539p_QQ
提取码:ww9c
将权重文件放在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/deep_sort_pytorch/deep_sort/deep/checkpoint文件夹内
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/执行(注意:请修改source的路径)
python yolov5_to_deepsort.py --source /path/to/your/Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/frames
结果保存在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/train_personID.csv
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/下执行
python train_temp.py
结果保存在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/train_temp.csv
会发现有些ID是-1,这些-1是deepsort未检测出来的数据,原因是人首次出现或者出现时间过短,deepsort未检测出ID
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/下执行
python train.py
结果保存在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/annotations/train.csv
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/annotations执行
- type nul > train_excluded_timestamps.csv
- type nul > included_timestamps.txt
然后在included_timestamps.txt 中写入
- 02
- 03
- 04
- 05
- 06
- 07
- 08
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/annotations执行
type nul > action_list.pbtxt
在文件内写入你需要的动作
- item {
- name: "your action1"
- id: 1
- }
- item {
- name: "your action2"
- id: 2
- }
- item {
- name: "your action3"
- id: 3
- }
dense_proposals_train.pkl
文件将3.2生成的dense_proposals_train.pkl
文件复制到Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/annotations下
由于本文使用的数据集较小,所以不区分训练集和验证集,使用训练集作为验证集,如果有需要区分的读者,验证集的制作过程需要重复本文以上的所有操作
复制6.1生成的文件即可
请将Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/frames内的所有文件,复制到Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/Dataset/rawframes中
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/mywork下运行如下代码
python change_raw_frames.py
在Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset/yolovDeepsort/mywork下运行如下代码
- python change_dense_proposals_train.py
- python change_dense_proposals_val.py
Dataset ├─annotations │ ├─dense_proposals_train.pkl │ ├─dense_proposals_val.pkl │ ├─dense_proposals_test.pkl │ ├─train.csv │ ├─val.csv │ ├─included_timestamps.csv │ ├─train_excluded_timestamps.csv │ ├─val_excluded_timestamps.csv │ └─action_list.pbtxt ├─videos │ ├─1.mp4 │ ├─2.mp4 │ └─... ├─video_crop │ ├─1.mp4 │ ├─2.mp4 │ └─... └─rawframes ├─1 │ ├─img_00001.jpg │ ├─img_00002.jpg │ └─... ├─2 │ ├─img_00001.jpg │ ├─img_00002.jpg │ └─... └─...
请参考下面的博客,对代码进行修改
使用如下命令启动训练
python tools/train.py path/to/your/config
模型权重保存在work_dir文件下
使用如下命令进行测试
python tools/test.py path/to/your/config path/to/your/weights
得到如下结果
在MMaction2的根目录下创建Checkpoints文件夹
将slowfast_r50_8x8x1_256e_kinetics400_rgb_20200716-73547d2b.pth文件放入Checkpoints/mmaction文件夹内
将faster_rcnn_r50_fpn_2x_coco_bbox_mAP-0.384_20200504_210434-a5d8aa15.pth放入Checkpoints/mmdetection文件夹内
以上文件的百度网盘链接如下:
链接:https://pan.baidu.com/s/1gUs3Ec_Ux2rfEBmY3AWRjw
提取码:8cx2
在MMaction2/tools/data/ava文件夹下,创建my_label_map.txt,里面放入自己的动作类别,前后顺序严格按照4.2的顺序
使用如下命令进行视频推理(请根据自己的需求修改命令行的路径)
python demo/demo_spatiotemporal_det.py --config path/to/your/config --checkpoint path/to/your/weights --det-config demo/demo_configs/faster-rcnn_r50_fpn_2x_coco_infer.py --det-checkpoint Checkpoints/mmdetection/faster_rcnn_r50_fpn_2x_coco_bbox_mAP-0.384_20200504_210434-a5d8aa15.pth --video path/to/your/input/video --out_filename demo/det_1.mp4 --det-score-thr 0.5 --action-score-thr 0.5 --output-stepsize 4 --output-fps 6 --label-map path/to/your/labelmap
视频保存在demo/det_1.mp4
如果在任何一步出现问题,可以在评论区进行讨论,谢谢大家的关注
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。