这是我自己做项目的时候用到一些积累经验
参考官方文档
20 分钟上手 MMPose — MMPose 1.3.1 文档
使用现有模型进行推理 — MMPose 1.3.1 文档
基于现有模型进行推理
随着很多模型都配置了预训练模型、简单部署等优化,其实没必要去学习很深的项目结构,只要能用就满足大部分人的要求了。
推理器
mmpose内置了一个API叫做推理器 MMPoseInferencer
,这个可以快速的调用想使用的模型,用户可以使用所有的MMpose支持的模型来进行图像、视频进行模型推理,并且实现推理结果的自动化,并方便用户保存预测结果
姿态估计任务
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)
result = next(result_generator)
result
变量 是一个包含两个键值 visualization
和 predictions
的字典
visualization
键对应的是列表
- 包含可视化结果,例如输入图像、估计姿态的标记,以及可选的预测热图。
- 如果没有指定
return_vis
参数,该列表将保持为空
'predictions'
键对应的值是:
- 一个包含每个检测实例的预估关键点的列表。
以上是什么意思呢?以下逐行解释:
初始化
inferencer = MMPoseInferencer('human')
创建了一个MMPoseInferencer
对象,该对象接受一个字符串做为输入这个字符串代表一个预设好的模型。
模型由两部分组成,第一部分是配置文件,一般是.py文件,其中按照mmlab的规则,对模型的训练过程、数据集标注、一些针对数据集的处理流水线等参数。
第二部分是权重文件,.pth文件,就是代表预训练模型的w值,通过该模型可以实现当前训练的效果。
human
就是一个预设好的模型名称,代表了一个配置文件和一个权重文件,此时创建了一个对人体关键点进行识别的推理器。
推理
result_generator = inferencer(img_path, show=True)
这句代表的意思是,通过创建的推理器,进行推理,img_path
就是源图片的位置,show==true
代表会弹出可视化窗口。如下图所示。
result
result
指的是执行的结果,根据mmlab的惯例应该是一个字典文件。
defaultdict(<class 'list'>, {'visualization': [], 'predictions': [[{'keypoints': [[573.6409301757812, 81.25, -168.97557067871094], [472.22808837890625, 25.0, -238.6968994140625], [579.979248046875, 0.0, -181.6521759033203], [605.3324584960938, 25.0, -187.990478515625], [465.8897705078125, -18.75, -207.00538635253906], [415.183349609375, -18.75, -251.37350463867188], [415.183349609375, -31.25, -238.6968994140625], [573.6409301757812, 12.5, -162.63726806640625], [421.5216369628906, 18.75, -308.4182434082031], [421.5216369628906, -25.0, -264.05010986328125], [415.183349609375, -56.25, -232.3585968017578], [567.3026123046875, 6.25, -162.63726806640625], [421.5216369628906, 12.5, -302.0799255371094], [598.994140625, 12.5, -207.00538635253906], [592.6558227539062, 25.0, -187.990478515625], [579.979248046875, 12.5, -194.3287811279297], [427.8599548339844, 6.25, -308.4182434082031], [598.994140625, -6.25, -200.66708374023438], [592.6558227539062, 43.75, -207.00538635253906], [592.6558227539062, -31.25, -194.3287811279297], [586.3175048828125, 0.0, -232.3585968017578], [332.785400390625, -53.00190353393555, -149.96066284179688], [415.183349609375, -59.25190353393555, -143.6223602294922], [472.22808837890625, -59.25190353393555, -137.2840576171875], [522.9345092773438, -53.00190353393555, -175.31387329101562], [345.4620056152344, -40.50190353393555, -149.96066284179688], [345.4620056152344, -59.25190353393555, -156.29896545410156], [345.4620056152344, -84.25190734863281, -162.63726806640625], [427.8599548339844, -90.50190734863281, -175.31387329101562], [389.83013916015625, -46.75190353393555, -181.6521759033203], [358.13861083984375, -59.25190353393555, -187.990478515625], [332.785400390625, -78.00190734863281, -200.66708374023438], [415.183349609375, -90.50190734863281, -213.34368896484375], [402.5067443847656, -46.75190353393555, -207.00538635253906], [364.4769287109375, -53.00190353393555, -219.68199157714844], [345.4620056152344, -78.00190734863281, -238.6968994140625], [427.8599548339844, -84.25190734863281, -245.0352020263672], [396.1684265136719, -46.75190353393555, -232.3585968017578], [370.8152160644531, -59.25190353393555, -245.0352020263672], [370.8152160644531, -65.50190734863281, -264.05010986328125], [434.1982421875, -71.75190734863281, -270.388427734375], [554.6260375976562, -46.75190353393555, -232.3585968017578]], 'keypoint_scores': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.49745672941207886, 0.3957699239253998, 0.4706900119781494, 0.5557132363319397, 0.39454182982444763, 0.4823494851589203, 0.5479313135147095, 0.7285355925559998, 0.42127925157546997, 0.5051830410957336, 0.7590689659118652, 0.8057553768157959, 0.4927248954772949, 0.6098707914352417, 0.7550918459892273, 0.684838593006134, 0.5013595223426819, 0.7095600366592407, 0.8371286392211914, 0.6427437663078308, 0.7080170512199402], 'bbox': ([303.62921142578125, 88.0114517211914, 628.1503295898438, 325.99932861328125],), 'bbox_score': 0.99953127, 'rel_root_depth': -46.75190353393555, 'hand_type': [0, 1]}]]})
想要什么数据从其中获取就可以了。