pyskl:hrnet+fastercnn+c3d

Posec3d行为识别

一、模型介绍:

/home/centos/xhy/code/pyskl-main/tools/work_dirs/posec3d/c3d_light_gym/joint721_nopretrain/epoch_24.pth

Ps:使用Skeleton的计算量 < 使用RGB的计算量,此实验利用骨骼信息作为实验训练输入对象。

Posec3d算法(PoseC3D 仅使用 2 维人体骨架热图堆叠作为输入,就能达到更好的识别效果。):

PoseC3D 是第一个将 2D 人类骨骼格式化为 3D 体素并使用 3D 卷积神经网络处理人类骨骼的框架。并发布了多个PoseC3D变体,这些变体使用不同的骨干实例化并在不同的数据集上进行训练。

  1. 对输入的视频进行抽帧,输入的视频长短不一致(1s-5s之间)
  2. 对每一帧的人物检测,利用官方提供的人物检测模型(mmdetection2下的faster_rcnn_r50_fpn_1x_coco-person_20201216_175929-d022e227.pth)进行人物的检测;
  3. 对每一帧检测到的人物使用官方mmpose提供的模型(hrnet_w32_coco_256x192-c78dce93_20200708.pth)进行姿态估计;
  4. 根据每一帧生成的姿态估计关键点(17个关键点左边)。沿着时间维度叠加关节或肢体的热图,并对生成的三维热图体积;
  5. 应用预处理网络(使用C3D网络)输出预测到的动作;

PoseC3d设计了两个3D-CNNs家族,即姿态模态的PoseConv3D和RGB+姿态双模态的RGBPose-Conv3D。(在本实验中使用单姿态模态的Poseconv3D)

二、网络模型:

osec3d训练模型:使用c3d网络作为backbone加上一个I3DHead的分类头:

具体详细:

1)关键点检测:

对视频抽帧(使用decoder对视频进行均匀抽帧),检测视频帧中的人物,根据视频帧中的人物进行人体关键关键点的检测。

前处理结果包括:

Key

备注

内容demo

Frame_dir

视频名称

P05_238975

label

动作类别标签

5

Img_shape

视频帧的宽高

(1080,1906)

Total_frames

视频帧数

58

Num_person_raw

视频中人员数量

1

keypoint

17个关键点坐标

[[[1077,298.5]....]],(17,3)(17个关键点在RGB三通道中的坐标点)

Keypoint_score

17个关键点坐标的score

[[[0.94]....]],(17,3)(17个关键点在RGB三通道中的置信度)

  1. 热图生成:

根据根据上述处理结果进行堆叠,堆叠成热图。

热图输出一共十七个关键点,每一个关键点一个channel,格式为(C,T,H,W)(N为设置的batch_size数32,T为设置的clip_len为32,即随机抽取32帧,H,W设置为56),即(32,17,32,56,56).

3)送入C3D网络:

Input:NCHW(17,32,56,56),(17个通道数,32帧,56x56的大小),C3D训练使用3个stage,base_channel为32。

  1. 分类头:

使用CrossEntropyLoss作为损失函数+nn.leaner(in:255,out:6),输出为每个动作的预测概率。

    (loss_cls): CrossEntropyLoss()

    (dropout): Dropout(p=0.5, inplace=False)

    (fc_cls): Linear(in_features=256, out_features=6, bias=True)

三、实验过程:

3.1、数据集制作:

划分训练集和测试集

新建txt的标注文档:

dir /s/b *.mp4 >label_text.txt

添加类别:

import os

dir_name="F:\poseC3D\\actionVideo\\label_list.txt"

f = open(dir_name,encoding="utf-8")

date = f.readlines()

with open('label_list.txt', 'w') as f1:

    for dataline in date:

        dataline =dataline.strip('\n')

        if "sleep" in dataline:

            dataline=dataline+"  2\n"

        if "PlayPhone" in dataline:

            dataline = dataline + "  4\n"

        if "delivery" in dataline:

            dataline = dataline + "  3\n"

        if "greet" in dataline:

            dataline = dataline + "  1\n"

        if "bow" in dataline:

            dataline = dataline + "  5\n"

        print(dataline)

        if "other" in dataline:

            dataline = dataline + "  0\n"

        print(dataline)

        f1.writelines(dataline)

标注文档txt内容:

3.2、环境搭建:

方法一:

    要配置该算法的环境,最好先配置好MMDetection的环境,根据官网给的安装教程。另外要注意安装mmcv、mmcv-full、mmdet和mmpose,版本不能太高,如果安装了最新的版本会报无法编译,安装版本,

mmcv=1.3.18,mmcv-full=1.3.18, mmdet=2.23.0, mmpose=0.24.0

Ps:mmcv-full安装要根据对应的cuda版本和torch版本。

安装MMDetection的时候,需要把Detectron2也装一下,使用官网的命令行安装就可以了,安装命令:

python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'

这样在使用下面的命令安装和编译就没有问题了。

git clone https://github.com/kennymckormick/pyskl.git

cd pyskl

# Please first install pytorch according to instructions on the official website: https://pytorch.org/get-started/locally/. Please use pytorch with version smaller than 1.11.0 and larger (or equal) than 1.5.0

pip install -r requirements.txt

pip install -e .

环境配置完,最好跑一下提供的demo。

python demo/demo_skeleton.py demo/ntu_sample.avi demo/demo.mp4

输出了视频结果,那么就Ok了。

方法二:

git clone https://github.com/kennymckormick/pyskl.git

cd pyskl

# This command runs well with conda 22.9.0, if you are running an early conda version and got some errors, try to update your conda first

conda env create -f pyskl.yaml

conda activate pyskl

pip install -e .

3.3、数据处理:

需要对官方提供的提取关键点的代码进行修改:

生成的pkl文件包括:

frame_dir,label,img_shape,original_shape,total_frames,num_person_raw,kaypoint,keypoint_score.

3.4、修改配置文件:

训练文件配置,使用posec3d算法,修改configs/posec3d/c3d_light_gym/joint.py:

参数设置:

四、实验结果:

实验一:(未添加other类)

训练结果:

测试结果:

2023-07-12 10:52:34,697 - pyskl - INFO - 124 videos remain after valid thresholding

Evaluating top_k_accuracy ...

top1_acc 0.7419

top5_acc 1.0000

Evaluating mean_class_accuracy ...

mean_acc 0.7556

top1_acc: 0.7419

top5_acc: 1.0000

mean_class_accuracy: 0.7556

实验二:(添加other类)

测试结果:

2023-07-12 13:21:58,070 - pyskl - INFO - 146 videos remain after valid thresholding

Evaluating top_k_accuracy ...

top1_acc 0.7123

top5_acc 0.9726

Evaluating mean_class_accuracy ...

mean_acc 0.6642

top1_acc: 0.7123

top5_acc: 0.9726

mean_class_accuracy: 0.6642

实验三:(重新扩充数据集,并清洗数据集,训练集997个视频,测试集126个视频)

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值