目录
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