当前位置: 首页 > news >正文

动作识别3——mmpose和mmaction2

目录

一、前言

二、数据集简要介绍(按类型分类)

三、mmaction2——使用现有模型进行推理

四、基于骨骼点的行为识别模型

4.1 安装mmcv

        4.1.1 torch版本与mmcv兼容性问题

        4.1.2 预编译mmcv源码

4.2 安装三方库

4.3 mmpose——使用现有模型进行推理

4.4 怎么把关键点给到mmaction2?

推理代码

示例视频推理结果

自己的视频推理结果

五、总结


一、前言

        今天我们来看看怎么使用mmaction2的模型推理来实现视频动作识别,以及对于基于骨骼点的行为识别模型,我们需要知道怎么使用mmpose得到姿态估计的关键点,然后以什么样的格式给到mmaction2进行动作识别。

        mmaction2可能也提供了姿态估计的代码,所以这篇我们可能会走一些弯路,比如说我们自己用mmpose生成姿态估计的关键点,然后再转换,再给到mmaction2进行动作识别,但是很有可能这些都已经在mmaction2里面某个文件集成了,它可能集成了mmdet检测、mmtrack跟踪(可能没有)、mmpose姿态轨迹、mmaction2动作识别(现在我没找到,明天我找找),但我会保留这个弯路的过程。

二、数据集简要介绍(按类型分类)

1. 大规模动作识别数据集

  • Kinetics-400/600/700/710:YouTube 视频,涵盖数百类人类动作,如 kicking ballmartial arts kicking

  • Moments in Time / Multi-Moments in Time:百万级短视频,动作类别广泛,包括踢球、格斗等。

  • HVU (Holistic Video Understanding):多标签视频理解,包含场景、对象、动作等。

2. 小规模经典动作识别

  • UCF101 / UCF101-24:101 类动作,明确有 Soccer JugglingKick Ball 等。UCF101-24 是时空检测版本。

  • HMDB51:51 类动作,包含 kick ballkick person

  • JHMDB:人体动作小数据集,带人体关键点标注,有 kick ball

  • Jester:手势识别数据集,不涉及脚踢。

3. 时空动作检测

  • AVA (Atomic Visual Actions):电影片段,标注细粒度动作,如 kick personsoccer kick

  • AVA-Kinetics:融合 AVA 与 Kinetics,动作更丰富。

  • THUMOS’14:动作检测数据集,包含体育类动作如踢球。

  • ActivityNet:长视频动作识别/检测,部分运动类动作涉及踢。

4. 专项数据集

  • Diving48:跳水动作,不涉及踢。

  • MultiSports:多种体育动作,包含足球、篮球等,可能有踢球。

  • GYM (FineGym):体操动作,主要是翻腾,不强调踢。

  • 骨架数据集 (Skeleton-based datasets):基于人体关键点的动作识别,常包含踢腿类动作。

  • OmniSource:多源视频数据,涵盖多类动作。

5. 视频检索/问答

  • MSR-VTT:视频到文本检索,包含日常生活和体育场景,可能有踢球视频。

  • 视频检索数据集:用于跨模态检索,不专门标注踢动作。

与“脚踢动作”相关的数据集

  • UCF101 / HMDB51 / JHMDB → 明确有 kick ballkick person 类别。

  • Kinetics 系列 → 有 soccer kickmartial arts kick

  • AVA / AVA-Kinetics → 时空检测,细粒度标注踢人、踢球。

  • Moments in Time → 包含踢球、格斗踢腿。

  • MultiSports → 体育类,可能包含足球踢球。

  • Skeleton-based datasets → 常见踢腿动作。

总结:如果你要研究 脚踢动作识别/检测,推荐优先使用 UCF101、HMDB51、JHMDB、Kinetics、AVA,这些数据集都有明确的踢球或踢人动作类别,并且标注较为清晰。

三、mmaction2——使用现有模型进行推理

https://mmaction2.readthedocs.io/zh-cn/latest/user_guides/inference.html

from mmaction.apis import inference_recognizer, init_recognizer

config_path = 'configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x8-100e_kinetics400-rgb.py'


checkpoint_path = 'https://download.openmmlab.com/mmaction/v1.0/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x8-100e_kinetics400-rgb/tsn_imagenet-pretrained-r50_8xb32-1x1x8-100e_kinetics400-rgb_20220906-2692d16c.pth'

# 可以是本地路径 比如checkpoints/tsn_imagenet-pretrained-r50_8xb32-1x1x8-100e_kinetics400-rgb/tsn_imagenet-pretrained-r50_8xb32-1x1x8-100e_kinetics400-rgb_20220906-2692d16c.pth


img_path = 'demo/demo.mp4'   # 您可以指定自己的图片路径

# 从配置文件和权重文件中构建模型
model = init_recognizer(config_path, checkpoint_path, device="cpu")  # device 可以是 'cuda:0'
# 对单个视频进行测试
result = inference_recognizer(model, img_path)

print(f"result:{result}")  

mmaction2有提供现成的代码用于推理任意视频,这就很方便了,所以说当我们想要使用一个预训练模型推理时要注意Readme和教程文档有没有现成的推理代码,因为很多时候都是只有测试集的测试和评估代码(你想推理还得下载数据集,还得按照特定的格式,这是相当麻烦的)。

在上面的例子中,result打印的预测结果是6,我们看一下tools/data/kinetics/label_map_k400.txt里面第7行(因为预测结果索引是从0开始的,而txt是从1开始的,所以是看第7行而不是第6行),第7行是arm wrestling,意思是“扳手腕”,没毛病,demo.mp4里面两个人就是在扳手腕。

接下来我们随便找些视频来试试。我把动作识别1里面找的视频拿来测试,又找了个视频

https://www.bilibili.com/video/BV1tEu7ziEiL/?spm_id_from=333.337.search-card.all.click

结果是54 checking tires 检查轮胎、261 pushing car 推车,确实能找到数据集里面最相似的对应的那个动作,但是对动作的意图并不正确 。

我们换个叫做c3d的模型看看,

from mmaction.apis import inference_recognizer, init_recognizerconfig_path = 'configs/recognition/c3d/c3d_sports1m-pretrained_8xb30-16x1x1-45e_ucf101-rgb.py'
checkpoint_path = 'checkpoints/c3d_sports1m_16x1x1_45e_ucf101_rgb_20201021-26655025.pth'
img_path = 'demo/demo.mp4'   # 您可以指定自己的图片路径# 从配置文件和权重文件中构建模型
model = init_recognizer(config_path, checkpoint_path, device="cuda")  # device 可以是'cpu'或者'cuda:0'
# 对单个视频进行测试
result = inference_recognizer(model, img_path)
print(f"result:{result}")  

然后查看tools/data/ucf101/label_map.txt,结果是100 YoYo 溜溜球、60 PlayingDhol 打鼓、演奏、61 吹奏长笛。很明显,这个数据集训练出的模型,得出的结果偏离得更远了。

四、基于骨骼点的行为识别模型

        第二节的测试这让我有种直觉,基于骨骼点的行为识别模型会不会比行为识别模型更加靠谱一些。但是如果直接用第二节的推理代码推理基于骨骼点的行为识别模型会报错:

File "d:\zero_track\mmaction2-main\mmaction\datasets\transforms\pose_transforms.py", line 641, in transform skeleton = results['keypoint'] KeyError: 'keypoint'

       这是因为:

MMAction2 的骨骼点行为识别模型 不自带姿态估计,它只负责“拿到骨骼点→识别动作”这一步。
姿态估计(把 RGB 帧变成 17 个或 25 个关键点)必须自己提前完成,然后把结果按 MMAction2 要求的格式(coco / openpose / nturgb+d 三种之一)存成 .pkl.json 文件,再喂给模型训练或推理

官方给的默认流程是:

  1. 检测器:Faster R-CNN(把每帧的人框出来)

  2. 姿态估计器:HRNet-w32(把框里的人变成 17 个 COCO 关键点)

  3. 行为识别:ST-GCN / PoseC3D / 2s-AGCN 等(用前两步得到的关键点序列做分类)

        也就是说我们得先用MMDetection检测出人,然后用MMPose做姿态估计,然后才能用MMAction2做动作识别。也就是说我们得安装OpenMMLab全家桶

4.1 安装mmcv

        4.1.1 torch版本与mmcv兼容性问题

        根据mmcv的安装教程,建议是安装python3.10的conda环境+torch 2.3.x+cu121,装其他的新版本torch版本会导致mmcv需要通过预编译源码安装,最好别去搞,如果你有C++编译环境可以搞一搞,见4.1.2还有就是如果内网环境用不了mim install的话可以直接用pip install,出现版本问题再解决就好了。

https://mmcv.readthedocs.io/en/latest/get_started/installation.html

        看看我现在的是torch2.5.1,想要不编译mmcv源码的话,只能把torch降到2.3,才有whl包可以用。我的CUDA是12.2,装12.1也是兼容的

(mmaction2_win_env) mmaction2-main>python -c "import torch;print(torch.__version__)"

2.5.1+cu121

(mmaction2_win_env) mmaction2-main>nvcc -V

Cuda compilation tools, release 12.2, V12.2.128

Build cuda_12.2.r12.2/compiler.33053471_0

        去看一下pytorch官网,找到torch2.3的版本

https://pytorch.org/get-started/previous-versions/

# CUDA 12.1 pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121

        我们去https://download.pytorch.org/whl/torch/ 下载

torch-2.3.1+cu121-cp310-cp310-win_amd64.whl

        然后去这里下载对应的mmcv包

https://download.openmmlab.com/mmcv/dist/cu121/torch2.3/index.html

        4.1.2 预编译mmcv源码

         假设我现在装了torch2.5.1,我就不想降到torch2.3.1,那想在windows环境下编译C++,那可得折磨了,参见下面教程Build on Windows

       https://mmcv.readthedocs.io/zh-cn/latest/get_started/build.html#

        在windows环境下配置编译C++的环境不赘述了。要装VS2019,装Miniconda,装CUDA,设置MSVC编译器的环境变量,都是一些C++编译的基础条件,如果是要编译CUDA版本的话还要设置环境变量CUDA_HOME。

        然后就是把mmcv的源代码下载下来,比如说放到D:\zero_track\mmcv-2.1.0。如果你用的是python3.10,你应该下载的是mmcv 2.1.0而不是最新版本的mmcv 2.2.0(我也不知道是不是python3.10导致的,反正我编译mmcv2.2.0它说不兼容),否则会报错:

AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.2.0.

https://github.com/open-mmlab/mmcv/releases/tag/v2.1.0

然后运行了下面两条命令进行编译安装。结果就是等待了很久(8分钟),但最后还是成功了。

(mmaction2_win_env) D:\zero_track\mmcv-2.1.0> pip install -r requirements/optional.txt

(mmaction2_win_env) D:\zero_track\mmcv-2.1.0> python setup.py build_ext (mmaction2_win_env) D:\zero_track\mmcv-2.1.0> python setup.py develop

(mmaction2_win_env) D:\zero_track\mmcv-2.1.0>pip show mmcv

Name: mmcv
Version: 2.1.0

        如果没有按照教程使用pip install -r requirements/optional.txt安装这个ninja和psutil  第二条命令会警告:

D:\miniforge3\envs\mmaction2_win_env\lib\site-packages\torch\utils\cpp_extension.py:497: UserWarning: Attempted to use ninja as the BuildExtension backend but we could not find ninja.. Falling back to using the slow distutils backend.

        warnings.warn(msg.format('we could not find ninja.'))
warning: manifest_maker: MANIFEST.in, line 6: path 'mmcv/ops/csrc/' cannot end with '/'

        结果还是出现了其他的一些警告

D:\zero_track\mmaction2-main\setup.py:146: UserWarning: Failed to create a symbolic link for ..\..\tools, and it will be copied to D:\zero_track\mmaction2-main\mmaction\.mim\tools

warnings.warn(
running egg_info
warning: no files found matching '*.sh' under directory 'mmaction\.mim\tools'
warning: no files found matching '*.py' under directory 'mmaction\.mim\tools'

writing manifest file 'mmaction2.egg-info\SOURCES.txt'
running build_ext

        只要不是ERROR,警告一般都是不管的。

4.2 安装三方库

https://mmpose.readthedocs.io/zh-cn/latest/installation.html

mmcv我是直接从源码安装的,没有用pip源,pip源安装的好处就是方便,源码安装有个好处就是我们能修改源码,为了我们以后能修改源码呢,mmdet和mmpose我们最好也是从源码安装。我是直接 pip install -U openmim, pip install mmengine, 之后的就是源码安装。

当然,如果没有修改源码的需求,直接从pip安装,pip install mmcv, pip install mmdet,pip install mmpose也可以。

conda create -n open-mmlab python=3.8 -y
# 或者装python3.10
conda create -n open-mmlab python=3.10 -yconda activate open-mmlab
# 1) PyTorch
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 \--extra-index-url https://download.pytorch.org/whl/cu117或者装torch 2.3.1
# ROCM 6.0 (Linux only)
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/rocm6.0
# CUDA 11.8
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121
# CPU only
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cpu# 2) OpenMMLab 全家桶
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.1"
mim install "mmdet>=3.1.0"   # 检测器
mim install "mmpose>=1.0"    # 姿态估计
# 3) 克隆仓库
git clone https://github.com/open-mmlab/mmpose.git
git clone https://github.com/open-mmlab/mmaction2.git

4.3 mmpose——使用现有模型进行推理

下载mmpose源码,放到D:\zero_track\mmpose

https://github.com/open-mmlab/mmpose/tree/main

如果你没有在4.1使用mim install mmpose或者pip install mmpose,那么现在你可以

(mmaction2_win_env) D:\zero_track\mmpose> pip install -e .

(mmaction2_win_env) D:\zero_track\mmpose> pip show mmpose

Name: mmpose
Version: 1.3.2

使用现有模型进行推理:

https://mmpose.readthedocs.io/zh-cn/latest/user_guides/inference.html

新建一个my_test1.py 运行python my_test1.py

from mmpose.apis import MMPoseInferencer

img_path = 'tests/data/coco/000000000785.jpg'   # 将img_path替换给你自己的路径

# 使用模型别名创建推理器
inferencer = MMPoseInferencer('human')

# MMPoseInferencer采用了惰性推断方法,在给定输入时创建一个预测生成器
result_generator = inferencer(img_path, show=True, out_dir='output')
result = next(result_generator)

print(f"result:{result}")

注意如果你不是联网环境,要下载这两个模型,放到用户目录下C:\Users\用户名\.cache\torch\hub\checkpoint

Downloading: "https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-body7_pt-body7_420e-256x192-e48f03d0_20230504.pth" to C:\Users\guan.linyi/.cache\torch\hub\checkpoint\rtmpose-m_simcc-body7_pt-body7_420e-256x192-e48f03d0_20230504.pth

Downloading: "https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmdet_m_8xb32-100e_coco-obj365-person-235e8209.pth" to C:\Users\guan.linyi/.cache\torch\hub\checkpoint\rtmdet_m_8xb32-100e_coco-obj365-person-235e8209.pth

到这里,我们已经推理了一下mmpose官方教程示例里面的图片,确实得到了一个滑雪人图片的关键点。我们看下官方教程里面对result格式的描述:

result 变量是一个包含两个键值 'visualization' 和 'predictions' 的字典。

  • 'visualization' 键对应的值是一个列表,该列表:

    • 包含可视化结果,例如输入图像、估计姿态的标记,以及可选的预测热图。

    • 如果没有指定 return_vis 参数,该列表将保持为空。

  • 'predictions' 键对应的值是:

    • 一个包含每个检测实例的预估关键点的列表。

他这个教程好像没有更新,我看到的格式跟它教程说的不一样,可能改了吧。我们指定了out_dir='output',所以在mmpose/output/predictions里面我们可以看到推理结果的json,在mmpose/output/predictions/visualizations 可以看推理图片。从json中我们可以比较清晰地看到t推理单张图片的推理结果格式是怎么样的。

result = {'visualization': [],'predictions': [[{'keypoints': [[367.4406433105469, 78.85079193115234],[375.095947265625, 72.04609680175781], [361.4865417480469, 72.89668273925781],......  # 有17个 ] 'keypoint_scores': [1.044141173362732, 0.9866827726364136, ...]# 有17个  'bbox': ([279.71575927734375, 42.4456787109375, 495.99371337890625, 390.8460388183594],),   'bbox_score': np.float32(0.9273744)     },......]...]
}

还可以使用用于用于推断的命令行界面工具(CLI, command-line interface): demo/inferencer_demo.py。这个工具允许用户使用以下命令使用相同的模型和输入执行推理:

python demo/inferencer_demo.py 'tests/data/coco/000000000785.jpg' \
    --pose2d 'human' --show --pred-out-dir 'predictions'

这里关于命令转行要说一下,linux用 \ 转行,windows下cmd终端用 ^ 转行,PowerShel用 `,

你直接写成一行的话最不容易出错。我是用的vscode里面打开的cmd终端。

我们试一下用自己的那几个视频推理

from mmpose.apis import MMPoseInferencer

img_path = r'D:\zero_track\mmaction2\input_videos\test2.mp4'   # 将img_path替换给你自己的路径

# 使用模型别名创建推理器
inferencer = MMPoseInferencer('human')

# MMPoseInferencer采用了惰性推断方法,在给定输入时创建一个预测生成器
result_generator = inferencer(img_path, show=False, out_dir='output2')

results = [result for result in result_generator]

注意我们推理视频或者图片文件夹的话,就得对result_generator进行遍历了。

我看了一下推理视频的结果,感觉姿态估计比yolov11-pose准的多呀,都不怎么受遮挡的影响,速度看起来也还可以

我们看一下视频推理生成的json格式,跟图片相比就是多一个frame_id字段,然后keypoints的字段被instances包裹起来了而已。

[

        {

                "frame_id": 0,

                "instances": [

                        {

                                'keypoints': [[391.2884521484375, 433.1463317871094],

                                                   ......]]

                                "keypoint_scores":[0.937532365322113, ......],

                                "bbox": [[208.05035400390625,......]

                                "bbox_score": 0.8448390364646912

                        }

                ]

        }

        {

                "frame_id": 1,

                ......

        }

]

4.4 怎么把关键点给到mmaction2?

这个mmpose输出的result怎么给到mmaction2,需要将mmpose输出的json文件转pkl

首先我们按照4.3的教程,把r'D:\zero_track\mmaction2\demo\demo_skeleton.mp4'这个示例视频的关键点提取出来,我们把输出文件设置为output4,这样就生成了D:\zero_track\mmpose\output4\predictions\demo_skeleton.json

我们在mmpose下面创建一个json2pkl.py

import json
import pickle
import numpy as np# 加载 MMPose 视频推理结果 JSON 文件
with open(r'D:\zero_track\mmpose\output4\predictions\demo_skeleton.json', 'r') as f:data = json.load(f)converted = []# 遍历每一帧
for frame in data:frame_dict = {}persons = []for inst in frame.get('instances', []):keypoints = np.array(inst['keypoints'], dtype=np.float32)  # shape: (num_keypoints, 2)scores = np.array(inst['keypoint_scores'], dtype=np.float32)  # shape: (num_keypoints,)persons.append((keypoints, scores))if persons:keypoints_array = np.stack([p[0] for p in persons], axis=0)  # shape: (num_person, num_keypoints, 2)scores_array = np.stack([p[1] for p in persons], axis=0)     # shape: (num_person, num_keypoints)frame_dict['keypoints'] = keypoints_arrayframe_dict['keypoint_scores'] = scores_arrayconverted.append(frame_dict)# 保存为 PKL 文件
with open(r'D:\zero_track\mmpose\output4\predictions\demo_skeleton.pkl', 'wb') as f:pickle.dump(converted, f)print("✅ 转换完成,已保存为 xxx.pkl")

我们还可以在mmpose下面创建一个checkpkl.py用于检查生成的pkl格式

import pickle
import numpy as npwith open(r'D:\zero_track\mmpose\output4\predictions\demo_skeleton.pkl', 'rb') as f:data = pickle.load(f)for i, frame in enumerate(data):kp = frame['keypoints']ks = frame['keypoint_scores']print(f"Frame {i}: keypoints shape = {kp.shape}, scores shape = {ks.shape}")assert kp.ndim == 3 and kp.shape[2] == 2, "Keypoints must be (num_person, num_keypoints, 2)"assert ks.ndim == 2 and ks.shape == kp.shape[:2], "Scores must match keypoints shape"assert kp.dtype == np.float32 and ks.dtype == np.float32, "Data type must be float32"

输出:

Frame 1: keypoints shape = (1, 17, 2), scores shape = (1, 17)

Frame 2: keypoints shape = (1, 17, 2), scores shape = (1, 17)

......

我们在mmaction2下面建一个my_test2.py文件用于推理。

首先我们要找到一个模型和对应的配置文件

https://github.com/open-mmlab/mmaction2/blob/main/configs/skeleton/2s-agcn/README.md

我直接下载了一个NTU60_XSub_2D表中第一行的模型和配置文件,一定得是2D的模型,不能是3D的,因为我们提取的关键点是2D的。我们把模型和配置文件以及pkl还有img_shape都传给inference_skeleton函数,其中img_shape我们可以通过查看demo_skeleton.mp4属性获知高和宽。

推理代码

from mmaction.apis import init_recognizer, inference_skeleton
import pickle# 初始化模型
config_file = 'configs/skeleton/2s-agcn/2s-agcn_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d.py'
checkpoint_file = 'checkpoints/2s-agcn_8xb16-joint-u100-80e_ntu60-xsub-keypoint-2d_20221222-4c0ed77e.pth'
model = init_recognizer(config_file, checkpoint_file, device='cuda:0')# 加载关键点数据(假设是 HRNet 或 MMPose 生成的)
pkl_path = r'D:\zero_track\mmpose\output4\predictions\demo_skeleton.pkl'
with open(pkl_path, 'rb') as f:pose_results = pickle.load(f)# 获取图像尺寸(必须提供)
# img_shape = (256, 256)  # 示例值,需与你的原始图像一致
img_shape = (1080, 1920)  # h, w# 推理
result = inference_skeleton(model, pose_results, img_shape)
print(f"result:{result}") 

推理所需数据格式

pose_results 应该是一个 列表,每个元素代表一帧,格式如下:

[
    {
        'keypoints': np.ndarray(shape=(num_person, num_keypoint, 2), dtype=np.float32),
        'keypoint_scores': np.ndarray(shape=(num_person, num_keypoint), dtype=np.float32)
    },
    ...
]

如果想知道inference_skeleton函数是什么内容,可以关注一下这两个文件。后面我可能也会看看。

mmaction/apis/inference.py

mmaction/datasets/transforms/pose_transforms.py

示例视频推理结果

        跑出的结果是54,根据模型和配置文件的名字,应该是对应这个数据集tools/data/skeleton/label_map_ntu60.txt

https://github.com/open-mmlab/mmaction2/blob/main/tools/data/skeleton/label_map_ntu60.txt

        找到第55行 hugging other person,没错,示例视频就是两个人在拥抱。

自己的视频推理结果

        但是我输入了自己的视频试了一下,推理结果是59 walking apart from each other,完全不对。

五、总结

        可见这些预训练模型太受限于训练数据里面的动作类别了,似乎没有去对事物进行分层,先识别基础动作,当出现新的动作时,寻找新的动作跟基础动作的关系从而认识新的动作(或者说有可能这种联系能力完全就要等待新的算法或者等待具身智能发展才能做到)。如此看来,目前我推测以动作识别这一块的研究水准,标注然后训练可能是必不可少的工作,目前视频理解动作还真没那么容易。

        之后我们可能得先找找mmaction2里面有没有集成mmdet检测、mmtrack跟踪(可能没有)、mmpose姿态轨迹、mmaction2动作识别,然后看看它怎么训练和测试。

        

http://www.dtcms.com/a/602091.html

相关文章:

  • 潍坊做网站优化网站设计项目
  • 2025企业可观测平台选型指南:聚焦核心能力,构建面向未来的观测体系
  • 郑州网站建设最低价鼓楼徐州网站开发
  • java开源Socket.io服务器端长链接通信解决方案
  • 牛客2025秋季算法编程训练联赛4-基础组
  • 视频类网站怎么做软件开发专业技能
  • 具身智能-一文详解视觉-语言-动作(VLA)大模型1.前言2.VLA的进化之路:从单兵作战到三位一体3.拆解VLA的大脑:核心组件全解析 预训练视觉表征
  • 空口协议栈的介绍及CA对其的影响
  • 网站建设制作优化推广类电商文案
  • 网站空间购买价格电子商务以后能干什么
  • C语言编译预处理 | 探索C语言编译过程中的预处理环节
  • kubernetes(k8s)-扩缩容(工作负载HPA、节点)
  • 广告设计网站官网北京小程序定制开发
  • 做网站怎样收费的怎样更换网站模板
  • 狸窝转换器将MP4格式视频转换为以下格式后的大小对比:RM、RMVB、AVI、MKV、WMV、VOB、MOV、FLV、ASF、DAT、3GP、MPG、MPEG
  • 【QT/C++】Qt样式设置之CSS知识(系统性概括)
  • 《华为应用市场编程工具上架深度拆解:鸿蒙适配与合规实战指南》
  • 29.删除链表的倒数第 N 个结点
  • 做黑帽需不需要搭建网站o2o的四种营销模式
  • 中英文的网站是怎么做的中国建设官网信息查询
  • 大航母网站建设流程黑龙江网站制作平台
  • C语言编译软件文档 | 如何高效使用C语言编译工具,提升编程效率
  • Android ROOM 数据库
  • 从红军城烽火到无人机时代:两场战争的跨越与现代军事启示
  • 营口网站seo网站开发的相关网站
  • 解决PyQt6安装失败:文件重命名权限错误与缓存清理方法
  • 第五章:MySQL DQL 进阶 —— 动态计算与分类(IF 与 CASE WHEN)多表查询
  • 【SQL server】不同平台相同数据库之间某个平台经常性死锁
  • Ubuntu系统安装.NET SDK 7.0
  • 基于深度学习与MATLAB的脑电信号情绪识别系统