MMpose代码实践(3)

目录

1. 数据准备

2.安装库的环节

3.预训练模型体验

4.三角板目标检测实践

5.pth模型精简

6.mmpose关键点检测


1. 数据准备

labelme进行标注数据集,再进行mscoco的格式转化

2.安装库的环节

可以直接参考mmpose的doc:欢迎来到 MMPose 中文文档! — MMPose 1.0.0 文档;当然简而言之,安装好pytorch框架后,使用openmim,git clone所需要的mmposegithub仓库版本,然后在目录下使用mim install -e .进行安装即可;

2.1 在进行下一步的进程前,很推荐进行如下的安装检验,以免事情堆叠起来发现不了问题所在:

# 检查 Pytorch
import torch,torchvision
print('Pytorch 版本',torch.__version_)
print('CUDA 是否可用',torch,cuda,is_available())
#检查 mmcV
import mmcv
from mmcv.ops import get_compiling_cuda version,get_compiler _version
print('MMCV版本',mmcv.__version__)
print('CUDA版本',get_compiling_cuda_version())
print('编译器版本',get_compiler_version())
# 检查 mmpose
import mmpose
print('mmpose版本',mmpose._version__)

mmdet安装与校验类似,不再赘述~

3.预训练模型体验

其实指的就是使用前人完成编辑与训练的模型(pth是权重文件)来直接对所需要检测目标进行预测,当然作者们发布的模型通常是大型通用数据集,例如COCO,类别可能与你所想要进行的任务不同,这时候只需要fine tune(在你的数据集任务中微调训练几个epoch)就可以得到不错的表现~

topdown算法是基于det的检测结果进行进一步处理的,所以需要加载两个pth权重文件;

topdown算法本质是先det后posedet,对框内人进行关键点检测,简而言之的优点是很准确,缺点是需要进行两个模型的训练。

简单对参数进行说明: bbox-thr: 目标检测框的置信度阈值;kpt-thr: 关键点检测的置信度阈值; nms-thr:框的非极大值抑制的iou阈值(交并比超过阈值则只保留置信度大的框); radius:关键点可视化的半径;thickness:所画框的线宽;draw-bbox:是否绘制框;draw-heatmap:是否绘制关键点检测的热力图; show-kpt-idx:是否对关键点进行编号

4.三角板目标检测实践

这部分我就只摘录我个人很关心的可视化log部分了:

以时间数字命名的log文件夹下的scalars.json文件保存了训练日志的统合,可以使用pandas将其整理成为表格:

df_train = pd.DataFrame()
df_test = pd.DataFrame()
for each in tqdm(json list):
  if'coco/bbox_mAp' in each:
    df_test = df_test.append(eval(each), ignore_index=True)
  else:
    df_train = df_train.append(eval(each), ignore_index=True)

然后使用matplot绘制:(首先要引入中文字体,不然中文部分会乱码)

# # windows操作系统
# plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签 
# plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

# Linux操作系统,例如 云GPU平台
wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220716-mmclassification/dataset/SimHei.ttf -O /environment/miniconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf
rm -rf /home/featurize/.cache/matplotlib

import matplotlib 
import matplotlib.pyplot as plt
matplotlib.rc("font",family='SimHei') # 中文字体

plt.plot([1,2,3], [100,500,300])
plt.title('matplotlib中文字体测试', fontsize=25)
plt.xlabel('X轴', fontsize=15)
plt.ylabel('Y轴', fontsize=15)
plt.show()

重点来了,这是matplot的可视化辅助函数设置:

from matplotlib import colors as mcolors
import random
random.seed(124)
# 颜色
colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan', 'black', 'indianred', 'brown', 'firebrick', 'maroon', 'darkred', 'red', 'sienna', 'chocolate', 'yellow', 'olivedrab', 'yellowgreen', 'darkolivegreen', 'forestgreen', 'limegreen', 'darkgreen', 'green', 'lime', 'seagreen', 'mediumseagreen', 'darkslategray', 'darkslategrey', 'teal', 'darkcyan', 'dodgerblue', 'navy', 'darkblue', 'mediumblue', 'blue', 'slateblue', 'darkslateblue', 'mediumslateblue', 'mediumpurple', 'rebeccapurple', 'blueviolet', 'indigo', 'darkorchid', 'darkviolet', 'mediumorchid', 'purple', 'darkmagenta', 'fuchsia', 'magenta', 'orchid', 'mediumvioletred', 'deeppink', 'hotpink']
# Matplotlib 绘图标记
markers = [".",",","o","v","^","<",">","1","2","3","4","8","s","p","P","*","h","H","+","x","X","D","d","|","_",0,1,2,3,4,5,6,7,8,9,10,11]
# Matplotlib 绘图线
linestyle = ['--', '-.', '-']

def get_line_arg():
    '''
    随机产生一种绘图线型
    '''
    line_arg = {}
    line_arg['color'] = random.choice(colors)
    # line_arg['marker'] = random.choice(markers)
    line_arg['linestyle'] = random.choice(linestyle)
    line_arg['linewidth'] = random.randint(1, 4)
    # line_arg['markersize'] = random.randint(3, 5)
    return line_arg

最激动人心的部分来了!训练集和测试集的指标获取与matplt绘制目标指标到图上并且对比!我写这篇博客不如说就是为了以后查看起来方便hhhhhhhh,一些描述备注直接在代码块中进行注释写了~

Let's start!

# 查看train的参数
df_train.columns
# 制作一个metric字典来存放想要放到图中的目标
metrics = ['loss', 'loss_bbox', 'loss_cls', 'loss_rpn_cls', 'loss_rpn_bbox']
plt.figure(figsize=(16, 8))

x = df_train['step'] # 这次准备横坐标使用step为计量,也可以换成epoch(看colums里面的记录,一般来说是有的)
for y in metrics:
    plt.plot(x, df_train[y], label=y, **get_line_arg())  # 最关键的一句话,传入x,y轴(目标),并且传入辅助绘制的设定(get_line_arg,见上文)

plt.tick_params(labelsize=20)
plt.xlabel('step', fontsize=20)
plt.ylabel('loss', fontsize=20)
plt.title('训练集损失函数', fontsize=25)
plt.savefig('训练集损失函数.pdf', dpi=120, bbox_inches='tight')

plt.legend(fontsize=20)

plt.show()

其余部分大差不差啦,对于测试集的指标,简单来说就是df_test.colums来查看其中存放了什么,然后其余绘制方法是一样的!

5.pth模型精简

新知识!原来训练获得的pth有不少对预测无用的冗余信息,使用tools/model_converters/publish)model.py可以精简这些信息,获取到更小的pth文件,使用精简后的pth文件进行预测即可。

6.mmpose关键点检测

特别的参数:

指定数据集的元数据:数据集名称、数据集框的类别、关键点的信息、skeleton关键点间连接的信息(例如人体而言,右腿右脚右膝盖应该连在一起)、jointweights重视程度、sigmas衡量不同人标注同一个点的偏差;

codec等参数

这个参数描述如下啦,偷偷懒~

最后的最后,子豪兄的mmpose视频链接附上:RTMPose关键点检测-训练、评估、推理预测_哔哩哔哩_bilibili

mmpose是一个基于PyTorch的开源多人姿态估计框架。它支持多种姿态估计模型,包括 OpenPose、HRNet、SimpleBaseline 等等,并提供了一个简单易用的 API 来对图像和视频进行姿态估计。 该框架还提供了多人姿态估计的评估代码,可以方便地评估模型在多人场景下的准确性。具体步骤如下: 1. 准备数据集:首先需要准备多人姿态估计的数据集,可以使用 COCO、MPII 等公开数据集或者自己构建数据集。 2. 下载模型:从 mmpose GitHub 仓库下载需要评估的模型,例如 HRNet-W32、SimpleBaseline 等。 3. 运行评估代码:使用提供的评估脚本在数据集上评估模型的准确性。评估脚本提供了多种指标,包括 PCKh、AP、AR 等。 以下是一个示例代码: ```python # 导入相关库和模型 from mmpose.apis import (inference_pose_model, init_pose_model, vis_pose_result) from mmpose.datasets import DatasetInfo model = init_pose_model( 'configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/hrnet_w32_coco_256x192.py', None, device='cuda:0') # 加载数据集 dataset = DatasetInfo('coco') data_root = 'data/coco/images/' ann_file = 'data/coco/annotations/person_keypoints_val2017.json' # 进行评估 result_file = 'output/result.pkl' inference_pose_model(model, ann_file, data_root, result_file) # 可视化评估结果 vis_pose_result( model, ann_file, data_root, 'output/result.pkl', dataset=dataset, kpt_score_thr=0.3, show=False, out_dir='output') ``` 其中,`init_pose_model` 函数用于初始化模型,`inference_pose_model` 函数用于评估模型,`vis_pose_result` 函数用于可视化评估结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值