开源的 RTM pose 关节检测算法,解决你自己的关系的检测计算机视觉任务。在前面的视频中,我带大家用 label me 标注软件标注了自己的关节检测数据集,并且转换成了 Msql 标准格式。那这一讲,安装配置 m m detection 目标检测算法库,后续我们会用 m m detection 训练目标检测模型。在安装 m m pose 姿态估计算法库,后续会用 m m pose 训练关键点检测模型,包括 RTM pose 模型。这两个算法库也是 open m lab 众多算法库里影响力最大、最常用的两个。我整理好了全套的代码教程, Jupiter Notebook 就在右上角的链接里,建议用我教程里推荐的云 GPU 平台运行,你也可以下载到本地运行。
首先安装 m m pose 和 m m detection 这两个算法库,安装完成 m m pose 之后,用它模型库中预训练得到的人体的 RTM pose 模型,对一些图片和视频进行预测,看看效果。首先看 A1 代码,这些代码直接设置加回车就可以逐代码块的运行了,从上到下运行。首先安装Pytorch,然后安装MMCV,安装一些其他的第三方工具包,把原有的这个 m pose 文件夹删除,如果有的话,然后从 GitHub 上下载最新的 m pose 源代码,那 m m pose 的作者专门为我的教程开了一个分支,所以你就可以杠 b tutorial 2023 切到我这个分支,保证你的版本和我的版本是一样的。进入 m pose 主目录,然后 mini install 杠 e 点就安装了。
安装成功之后,在 m pose 目录下创建 checkpoint 文件夹,用于存放预训练模型权重文件。创建奥特 POS 文件夹,用于存放预测结果。然后 data 文件夹用来存放图片和视频的素材。马上就要把素材下载到 data 文件夹下,然后 data 下面创建一个 test 文件,用来存放这些人体的图片和视频的素材,然后下载这些素材。这是我自己找的几个图片和视频,然后这张图片是以马拉松的,很多人在跑步的一个视频,我们把它下载到 data test Multi person,点 JPEG 文件夹下,就是这张图片。然后这是唱跳 rap 篮球的视频,然后放到了这个 MP4 文件,然后妈妈和女儿跳舞,这是一个多人的舞蹈的视频,然后放在了这儿。
还有两个女生跳舞的视频,那这些视频用来一会儿用 m pose 预训练模型做预测好,然后检查安装配置成功。那注意,如果你用的是 GPU 环境的话, Pytorch 版本要根据指定的 CUDA 版本去安装。然后我现在用的 m m pose 版本是 1. 0,如果这些代码都没有报错,就证明 m m pose 安装成功了。
0. 我们现在到 A2 代码安装 m detection 步骤是一样的,然后先安装拍套尺,然后再安装MMCV,安装其他工具包,然后把原有的 mmdetection 文件夹删掉,如果有的话,然后从 GitHub 上下载最新的 mmdetection 源代码。
这里我们用的 branch 这个分支是 3. X 版本,然后进入 m deaction 的主目录安装,同样也创建 3 个文件夹, checkpoint 文件夹,奥特布斯文件夹和 data 文件夹。你也可以下载一些素材,但是这部分我就不过多赘述了,放在目标检测的算法库教程里边再来讲,然后检查安装配置成功。我们用的 MMM detection 的版本是 3. 0,那现在的目录下跟这些 Notebook 同一级目录就会出现 m m pose 和 m detection 这两个算法库的文件夹,就证明安装配置成功了。 0.
那现在我们就用 m m pose 的预训练模型对刚刚下载的素材进行一些预测了。然后首先进入到这个目录,这是一些素材,我已经把路径给大家准备好了。那这个模型库里边有很多预训练的模型,不光是 m m detection 的目标检测模型,还有 m m pose 的人体姿态估计模型,还有 r t m pose 人体姿态估计模型。那我把一些样例模型的 config 配置文件和 check point 权重文件放在了这里,你可以一会儿改成这些模型,你也可以到模型库中,到这些算法库的模型库中去看其他的模型。你可以换成自己的模型 RTM pose,我挑了一个 s 比较小的模型和 l 比较大的模型。
好,那现在我们就来预测单张图像吧。嗯,预测单张图像,就先预测这个 data 目录下 data test,然后 Multi person 点 JPEG 文件,先看一眼这个图片,是很多人在跑马拉松,然后人之间非常的密集,还存在遮挡。那我们就用 Python 脚本,就是 m m pose Demo 里边有一个 top down demo with m m debt,嗯,就是自顶向下,自上而下进行预测,先用 m detection 去画框,再对框里边的内容运行关键点检测的算法。
所以这里边存在两个模型,一个是目标检测模型,一个是关键点检测模型。那这里就是目标检测模型的 config 配置文件,这个是目标检测模型的 checkpoint 模型,权重文件点 PTH 格式的。那这里是关键点检测的 config 配置文件,那我用的模型是 HR net。
这是 2019 年由中科院和中科大和微软亚洲研究院,就是王景东老师团队发布的一个高分辨率网络,它可以解决像素密集型的任务,比如说目标检测、图像分割关系点检测这样的问题。那关于它的算法讲解和论文精读,可以看一下王景东老师和沈向阳老师录制的视频,我和王景东老师也录过一个视频,我回头也会发布出来。
那这是这个关键点检测模型的 checkpoint 权重文件, input 参数,指定输入的图像或者视频的路径,然后 output 指定模型预测结果保存的位置,我们先运行,然后 device 指定它的计算设备。然后 b box threshold 表示框的就是目标检测的置信度阈值 k p t, threshold 表示关键点检测的执行度阈值 n m s 虽然是后的表示框的非极大值,抑制的 i o u 阈值就是如果两个框的交并比,就是重合程度超过了这个阈值,就判定这两个框是重合的,那就只会保留置信度最高的框,替掉其他所有的框,剃掉跟最高的这个框重合的其他所有的框。
radius 表示可视化关键点的半径,然后 signs 表示框的线宽,然后 drawbox 表示是否要画框, draw hitmap 表示是否要画关键点的热力图,然后 show Keypoint IDX 表示是否在点上标明这是第几号关键点?好,然后运行的时候,它会先下载模型,然后再执行预测,我们再运行后边这个。
这第二个代码道理是一样的,只不过是把观点检测模型换成了 RTM pose s 模型,其他的是一模一样的。那分别保存了 BEHR net e 文件夹和 BERTME 文件夹。如果是对视频做预测的话,直接将这个 input 参数换成视频路径就可以了。你也可以换成唱跳 rap 篮球的视频,或者你自己的拍摄的视频。好,我们都运行一下。然后第二个代码是把关键检测模型换成了 RTM pose 模型,你也可以把这个视频换成刚刚下载的其他素材视频,运行完成之后,在 m m pose outpose 目录下就会出现几个结果文件夹,前两个是图片,后两个是视频,直接右键下载下来就可以看到了。那我已经下载好了。
这张是原图,这张是 RTM pose 的预测结果。可以看到每一个点的热力图都能画出来,总共是 17 个点。这是 Coco 17 个点的人体姿态估计数据集训练出来的预训练模型。那就有 17 行和 17 列,这 17 行表示这 17 个点的 x 坐标热力图,这 17 列表示 17 个点的 y 坐标的热力图。
这是 HR net 的预测结果,这是多人视频的预测结果,效果还是很不错的。这是多人视频的 RTM pose 的预测结果,这是唱跳 rap 篮球的预测结果,不管是对单人还是对多人,效果都是非常不错的。这是官方提供的命令行的预测接口,那我们也可以通过 Python API 来手动的完成。
进入 m pose 主目录,导入一大堆工具包,包括一些基础图像处理的包,可视化的包,Pytorch, m m c v, m m engine,还有 m m pose, m m Dat 获取计算设备。然后载入待测图像,这里指定图像的路径。首先要构建目标检测模型,因为是 top down 自顶向下,自上而下的算法吗?先构建目标检测模型,那你可以选择用 fast RCN,也可以选择用RTM,pose, tiny 这两个代码块,选一个运行就可以了,然后构建人体姿态估计模型,也就是关键点。
检测模型用的其实还是上一讲,就是 B1 代码里边我们用到的这些 config 配置文件和 checkpoint 权重文件,这里用的是Hrnet。所以先初始化一个 detector 目标检测器,再初始化一个 pose estimator 人体姿态估计器,然后进行预测,这是目标检测的类别。
置信度,那执行度低的这些就要被过滤掉,只保留置信度最高的这些获得框的坐标,这个坐标是左上角的x,左上角的y,右下角的x,右下角的y。每一行代表一个框,设置信度阈值为 0. 5,然后只保留置信度高于 0. 5 的预测框,这是预测关键点。通过这个 merge data samples 把多个框的关节点检测结果打包到一起,然后就可以查看每个人的 17 个关键点坐标了。那这个图里边总共有 18 个人, 18 个框,然后每个人有 17 个关键点,这是由 Coco 数据集定义的,每个点有 x 和 y 两个坐标。那我们可以看一下索引为 0 的这个人,总共是 0- 1718 个人,那我们看索引为 0 的人,他每个关键点的坐标,这是 17 个关键点的坐标,可以把它热力图展示出来。
然后我们只看十三号点的热力图,那这个图就表示了在原图上所有十三号人体关键点它的热力图,因为人体是对称的,所以每个人可能有两个,然后画在全图上就是这个样子的,所以这个热力图的方法其实是很准确的,它并不是直接生成一个点的精确坐标,而是给出一个像概率密度云一样的热力图。然后我们甚至可以不只是输出一个点的坐标,而是输出一个区域的一个球的一个圆的坐标。然后用 m pose 官方可视化工具 visualizer 可视化一下指定半径线宽和一些元数据,展示可视化效果,把结果保存在奥特 POS B2. jpg 目录下。就是,其实就是和刚刚命令行的效果是一模一样的,上面几个代码是在语音 GPU 完成的。那如果你想在本地安装的话,可以看这个父本地运行,运行 A1 A2, A3 来试一下, A1 就是在本地安装 m m pose 步骤是一模一样的,只不过这个时候本地可能就没有 GPU 了,比如说在我这个 MacBook Pro 电脑上就没有 GPU 了。
在本地会生成 mm pose 目录 AR 代码,安装 mm detection,然后在本地会生成 MM detection 的目录 A3 代码,就是调用本地的摄像头来跑一下 RTM pose 的预训练模型。首先需要指定一个目标检测器,那我们就用 RTM data,在 mm detection 里边有 RTM data,你可以找到tiny, SMLX 从小到大的几个模型,根据你的需求可以获得速度和精度的权衡。那这里我用一个 s 模型,这是它的 config 文件,这是它的 checkpoint 模型权重文件。好,这是 RTM Dat,把它放在第一个和第二个参数里边,分别是 config 和checkpoint。第二个是 RTM pose,可以直接到 RTM pose 的主页里边,也可以看到 RTM pose,TSML, m 和 l 这几个模型也是从小到大的,可以获得速度和精度的权衡。
那我们挑一个也是 r t, m pose s 模型,和刚刚命令行里边是一样的,在云端是一样的。那这个时候 input 参数,你既可以输入刚刚的图像路径、视频路径,也可以输入Webcam,输入摄像头的实时画面,然后指定保存目路径来运行一下。第一次运行的话,他会先下载这两个 check point 预训练模型的权重文件,然后就打开摄像头开始预测了。如果画面中出现了人,它就会显示 RTM pose 的热力图。
如果你的本地有 GPU 的话,就可以把这个 device 改成GPU,它的运算速度会更快。
mmdetection三角板目标检测
2023年6月9日 下午9:17
19 分 42秒
相关链接
添加链接
点击“编辑”,添加会议纪要
欢迎回到 r t m pose 关键检测全流程系列教程。上一讲我们安装好了 m m detection 目标检测算法库和 m m pose 姿态估计和关键点检测算法库。我们下一讲要用到的 RTM pose 关键检测算法是 top down 自上而下,自顶向下的算法,需要先运行目标检测得到预测框,在对框中的内容进行精准的关键检测,先粗条画框,再精调定位关键点。那这种 top down 算法的优点就是特别准,缺点就是需要训练两个模型,目标检测模型和关键检测模型。所以这一讲我们就用 m detection 训练目标检测模型,在我们的教程样例数据集中就使三角板目标检测模型,下一讲再在目标检测框的基础上训练 RTM pose 关键检测算法。
c 代码是下载数据集,那这个数据集既是目标检测的数据集,也是关键点检测的数据集。因为这个数据集的格式是 MS 扣扣格式的,它既包含了目标检测的标注,也包含了关键点检测的标注。第一代码是下载目标检测模型的 config 配置文件。第2代码是用 m detection 去训练三角板目标检测模型。第3代码是可视化训练过程中的日志。第4代码是模型权重的精简转换。 E 一是下载训练好的三角板目标检测模型的权重,这是你也可以换成你自己训练得到的权重,也可以用我预先提供的权重。一二代码是用训练好的三角板目标检测模型进行图像和视频的预测,那只是在云端跑的,在本地你也可以运行摄像头实时预测的三角板目标检测。
好,那我们就来看吧。从 c 代码开始,先下载数据集,注意这个代码要分别在 m m pose 目录和 m m session 目录都要跑一遍。我们先在 m pose 目录里边跑,删除掉原有的数据集文件,如果有的话,然后下载数据集的压缩包,这个压缩包名字叫船狗 215 key point Coco 点 zip 文件,在 data 目录下就能看到这个压缩包了,然后解压这个数据集,再删除掉压缩包。刷新一下就能看到这个文件夹了,里面这次文件夹里放了 215 张三角板的图片。
train 扣扣点 Jason 是 M s 扣扣格式的训练及标注文件。well,扣扣点 Jason 是 MS 扣扣格式的测试集标注文件。那这里我们就不再单独区分验证集和测试集了,统一把不用于训练的图片都叫做测试集,所以用训练集训练算法,用测试集评估算法。
那关于这个 MSQ 的格式,我们在之前的视频有详细的介绍过。在 category 里边是框的类别,点的信息和点的连接的信息。然后在 image 里边是每一张图片的信息,在 annotations 里边是每一个框的信息。在 Ms 后格式里边,目标检测,实例分割关系点检测都是以框的形式来组织的。比如说你看这个索引为 3 的框,它的关键点检测的标注、实力分割的标注和目标检测的标注都在一起,是以框的单位组织的,这又是 MSQ 格式,验证集也是一样的。好,再下载一些用于测试的图像和视频。那是 4 个图片和 3 个视频,都是我和小伙伴一起拍摄的,你就在这个 test 船狗文件夹里边有 4 个图片和 3 个视频,你也可以下载下来单独看一下,也可以用纰漏去可视化一些数据集中的图片或者样例图片,然后删除系统自动生成的多余文件,直接运行就可以了。
好,这是我们在 m m pose 目录里边运行了一遍,然后重启colonel,在 m m detection 目录里边再运行一遍,等于说把这个数据集既放在了 m m pose 目录里边,也放在了 m m detection 目录里边,分别用来训练关键检测模型和目标检测模型。这个也可以再运行一下用于测试的图像和视频,然后删除系统生成的多余文件。我们现在到 m detection 目录里边瞅一眼。好,这是数据集,这是用于测试的 4 个图片和 3 个视频。
好,那接下来我们就在 MTI 神目录里边用下载下来的这个数据集去训练三角板目标检测模型。注意,这里强调一下,这个代码要在 m m pose 和 m m detection 两个目录里边分别运行一遍。两个文件夹里边的 data 目录下都应该有数据集文件。我们来先下载三角板目标检测的 config 配置文件。好,先进入 m pose 目录或者 m t action 目录,那这个代码也是需要在两个文件夹中分别运行的。然后下载 config 配置文件至 data 目录,这是下载了 fast RCN 目标检测的 config 文件,再下载 RTM dat tiny 三角板目标检测的 config 配置文件。
好,我们先看一下,在 data 目录下有了这两个文件,这是三角板目标检测 fast r, c n n 的配置文件。指定数据集的类型是 MSQ 格式的,然后 data root 是数据集的路径,那是 data 目录下的,传个 215 key point Coco 这么一个路径,然后有一个类别是 SJB 下划线 react 就是三角板,然后有多少个类别?就是这个类别,只有一个类别。
对于关节点检测而言,载入预训练模型权重,这是一个在 MS Coco 80 个类别数据集上训练出来的预训练法斯尔 RCN 模型,指定训练超参数,然后指定 pipeline 和数据级的 data loader,训练级的 data loader,测试级的 data loader,然后测试的评估指标模型的结构,然后还有学习力优化器这些东西。
那如果你换成自己的目标检测数据集的话,其实只需要改前面这三行就可以了,后边的就保持不变,那我们看 RTM data tiny,同样也是只改这 3 行。数据集是 MS 后格式的数据集的目录,它的类别名称框的类别名称,然后训练超参数,因为 RTM 带特tiny,它这个模型需要多训练一些,所以这个 Maxi box 给它改的高一点,如果你的显存不够的话就把 batch size 也调小一点。然后可以看到这是 default 一些默认的设置,训练和测试的一些配置,然后训练和测试的 pipeline 和 data loader,还有测试的一些工作流模型的结构,这是 RTM Dat tiny 的模型结构。可以看到它有 backbone 骨干网络,有 neck 脖子和 head 梳梳头,这里边每一层都可以自定义去修改。那这里就先保持这个我自己的这个不变就可以了。你只需要把前三行换成你自己的数据集,准确的说只有这两行换成你自己的数据集,就可以训练一个目标检测模型了。
这是在 m m pose 目录里边运行了,我们再切换到 m m detection 目录里边,再运行一遍。那现在在 m n detection 目录里面的 data 文件夹下,也存在了这两个文件,那下面就可以开始训练了。训练非常简单,只需要进入 mmdetection 目录,然后运行这一行命令行就可以了。运行的其实就是 Python tools 里边的train,点 PY 文件,然后传入目标检测的模型配置文件。那建议这行在命令行中运行,那我们就在命令行中运行。
打开终端,然后进入 work 目录,进入关节检测,然后进入到我这个文件夹里边,然后再进入 m detection,这是 mattention 目录下的文件,然后运行这一行脚本。所以对于 open m lab 而言,所有的配置,所有要改的东西都在这个 config 配置文件里边。不管是模型结构、学习率优化器、数据集,还是各种各样的 hook 测试集的评估指标,全部都在 config 文件里边。你只要写好这个 config 文件,直接运行这个评估训练预测的脚本就可以了。他已经开始训练了,在 MDI 审目录下就会生成一个 work directories,然后就可以找到我们这个这次的训练,然后日志就保存在这个文件夹里,一会我们训练完看一看,在训练过程中它会保存一些模型文件,就会放在这个目录下。
这个点 PTH 文件就是 Pytorch 的文件,就是我们得到的三角板目标检测模型的模型权重文件。在训练过程中,你可以看到每隔若干轮,它就会在测试集上评估一次,计算出若干评估指标,比如说 m a p,比如说 Pasco VOC 的这个 AP 50,那你可以监控这个值是不是在不断的上升,不断的增长。
训练完成之后,目录就长这个样子,得到一个 EPOCH 50 模型权重文件,然后日志保存在了这个日期时间命名的文件夹里,那我们就用第三代码可视化一下训练日志,载入训练日志,那在这里边有一个 vdata 这个 json 文件, scalers 点 json 文件就保存了。训练过程中的日志包含了损失函数、评估指标、学习率和时间戳这些值。我们用 pandas 把它整成表格,训练集整成一个表格,测试集整成一个表格,然后分别保存到本地,然后引入 Meta Pro 利布的中文字体,我们来画图。如果这个代码它画出来的中文是框框,那你就重启kernel,重新运行一遍,直到它正常为止。
定义可视化辅助函数,那这些其实就是我们之前用过很多次的代码模板了。随机生成颜色、线形和这个标记。先可视化一下训练集的损失函数,那就是在表格里边的这几项都是和损失函数相关的 loss 开头的。用我们这个函数去画一下图,可以看到训练级的损失函数是不断的降低的,不管是目标检测的损失函数,分类的损失函数, RPN 的损失函数,都是在逐渐的降低的,那训练集上的准确率是在不断的提升,高的最终收敛。
测试集的评估指标先画 m s 扣 metric 就是map,各种map,这是小目标的中目标的,大目标的 map 50, map 75。关于它的含义可以看一下我优搂 V3 的论文精读,里边有详细的这个评估指标的介绍,画一下你会发现都是在提升的。
那为什么底下这两条线这么低呢?这是因为我们这个数据集里边根本就没有特别小的目标,没有特别小的框,所以这个小目标的这个值是一直是一个常数,因为就没有小目标在算 Passport VOC 的 metric 就是 AP 也是看到不断在上升的,那通过这个图我们就能监控到模型训练过程中是没有问题的,而且这些图也可以放到论文里边。
刚刚我们训练得到的是 fast RCN 模型,你也可以把配置文件换成 RTM DAT,就可以训练得到 RTM data 三角板目标检测模型了。训练得到的这个目标检测模型到底精度怎么样?可以放到测试集上去跑个分,评估一下模型的精度。用 mm detection 里边的 tools test 点 py 脚本,先传入模型的 config 配置文件,再传入训练得到的 check point 权重文件运行,最后就会计算出这个模型在测试集上的跑分,各种 MAP MARAPAR 都有,然后可以看到小目标、中等目标和大目标分别的评价指标。
那为什么是-1?因为我们的数据集里边根本就没有小目标和中等目标,在 work directory 斯也会生成一个对应的目录,然后这个 json 文件里也保存了所有的结果。如果我们这是一个卡狗竞赛的话,就是看这几个指标的跑分。训练完成之后可以用第四代码做模型权重文件的精简转换,就是把大的 PTH 文件变成小的 PTH 文件。为什么要做这一步,是因为训练过程中得到的这个 PTH 文件包含了很多训练的信息,我们预测的时候用不上这些信息,它只会让这个 PT 式文件变得过大。所以我们就用 tools 里边的 Moto Conver 德斯 publish model 点 py 脚本,把这个大的 PTH 文件变小,我们之后预测就用这个小的 PTH 文件,他只是把训练过程中的无关信息剔除掉。
模型没有做任何的精度损失,没有做任何的减脂量化知识蒸馏模型还是那个模型精度没有变好。我们分别把 fast r c n 的这个模型和 r t m Dat 的模型做精简转换,得到这两个新的文件,那这两个新的文件如果你不想自己训练的话,也可以直接下载我提供的这个模型权重。那注意 E1 代码也是要分别在 m pose 目录和 r detection 目录里边分别运行的。好下载 fast RCN 的三角板目标检测模型和 RTM data 目标检测模型运行一下,先在 m m pose 里边运行这两个代码块儿,下载到 checkpoint 目录下,然后重启kernel,切换到 m detection,然后在运行这个代码就下载到了 MM detection。
checkpoint 目录下只有两个点 PTH 的模型权重文件,然后就可以用这个三角板目标检测模型对新的图像视频摄像头实时画面做预测了。然后先进入 MDI 审主目录,然后逐行运行单张图像的预测和视频的预测。这个脚本的参数先传入待测视频,再传入 config 文件,再传入 checkpoint 权重文件,指定输出的文件夹路径、指定计算设备和指定目标检测的置信度阈值运行完成之后,在 output 目录下就会生成这几个文件,我已经把它下载下来了,来看看效果。
这是目标检测的预测结果,只有框可以看到,效果还是很不错的。这是 RTM DAT 的,那这个是视频的预测结果,效果也是很不错的。这分别是 fast RCN 和 RTM Dat 的视频预测结果,两个效果都很好,所以他们为后续的关键点检测打下了坚实的基础。
首先需要目标检测把框的位置先定位出来,关节点检测模型才能够在框的基础上进一步的去精调,去生成关键点的精准坐标。那从这两个视频比较的话,其实 RTM data 的效果会更好,这个效果简直堪称完美。所以 RTM dat 接 RTM pose 是一个黄金组合搭档,这就完成了在云端三角板目标检测的训练、评估和预测。那在本地怎么办?在本地直接下载, config 配置文件和 checkpoint 权重文件就可以了。这是先在 m m pose 目录里边运行,然后再到 m m detection 目录里边运行。
现在在 m m pose 和 m m detection 的 check point 目录下都有了这两个 PTH 文件。在 data 目录下都有了这两个 config 文件。检查一下,嗯,没有问题,你就可以在本地跑摄像头的三角板目标检测的预测了。
进入 m detection 主目录,然后运行 demo 里边的 webcom demo,传入 config 配置文件和 checkpoint 权重文件。那我们先跑一下 RTM DAT tiny 这个小的模型,效果还是很不错的,速度也很快。这是纯 CPO 运行的,如果你的电脑上有 GPO 的话,效果应该会更好。
现在我们换成这个 fast RCN 模型试一下,你会发现运行的会非常慢,所以不太推荐用 fast RCN 还是推荐用 RTM Dat。那我们就完成了在云端训练,模型评估、模型预测、图像和视频,在本地调用摄像头实施预测。三角板目标检测的部分就结束了,下面我们就做三角板关键点检测的部分。
mmposeRTMPOSE检测
2023年6月9日 下午9:18
17 分 54秒
相关链接
添加链接
点击“编辑”,添加会议纪要
欢迎来到 RTM pose 关键检测全流程系列。上一讲,我们用 m detection 训练了三角板目标检测算法,画出了三角板的框。这一讲就到了最核心最关键的一步,用 m m pose 里的 RTM pose 算法训练三角板关键点检测模型。你当然也可以用 m m pose 里其他的姿态估计和关键点检测算法。在我们的代码教程中用到的是我们 open m lab 团队自研开源的 RTM pose 关键检测算法。我特别推荐大家使用。
RTM pose,精度非常高,比 U6V 8 最大的模型精度还要高,因为它是 top down 自顶向下的,先粗条再精调,虽然速度可能会慢一些,但是精度非常高,特别适合医学、中医、穴位机器人这些高精度的应用,那关于 RTM pose 的各种算法细节,它的跑分,它的论文可以看套大佬之前的一场社区开放卖。
那套大佬既是 m m pose 的算法负责人,也是 RT m pose 的作者之一,你也可以加入答疑群, RTM pose 的所有作者和我都在群里给大家答疑。首先下载 config 配置文件,那这里的 config 文件是 RTM pose 关键点检测模型的 config 配置文件,下载到了 mm pose data 目录下,打开看一看,这个配置文件非常的重要,我来详细的解释一下。首先定义数据的类型是 MS 扣扣格式的,算法的流程是自顶向下,自上而下的先进行目标检测,画框在运行关键点检测数据集的路径,就是传个 215 这个数据集的路径,指定数据集的源,数据,数据集的名称,数据集的里边的框的类别。然后里边每一个点的信息, 0123 个点,分别是 30 度角, 60 度角, 90 度角,他们的名字,他们点的ID,点的颜色,这是可视化要用的。
然后 Skyler 特是点的连接的信息,比如说对于人体而言,比如说右腿和右膝盖,右脚这 3 个点是连在一起的, 30 度和 60 度这两个点连在一起颜色是它, 60 度和 90 度连在一起颜色是它, 90 度和 30 度连在一起颜色是它。那这个 joint waits 表示我们对这三个点的重视程度是否是一样的,因为有的时候我们希望让算法更关注一些点,让它的权重更大一点。
SIG 玛斯表示在标注过程中,不同的人标注同一个点可能会有一些偏差,那这个 SIG 玛斯就来衡量不同的人标注同一个点的偏差,这里其实就保持默认就可以了。训练超参数 EPOX 就是训练 epoch 的总数,然后每隔多少个 epoch 保存一次模型文件,评估一次模型。然后是优化器,如果你的 CUDA out of memory 了,显存不够了,就把这个 train batch size 改小一点。优化器学习率,那注意这里有个Codec, Codec 里边有 input size, Sigma 和这里还有一个 in feature map,这三个参数非常重要,那我这里默认的 input size 是 256* 256。
输入图模型的图像尺寸,那 Sigma 是表示关键点一为高斯分布的标准差,就是模型会预测出每一个关键点的热力图,有的关键点的热力图可能比较发散,有的观点热力图可能比较聚焦,那 Sigma 就表示我们要让模型在多大精度上,多严格的程度去拟合这个点,那这个 Sigma 越大模型越容易学习,但是精度上限会降低越小就表示我们要让模型越聚焦就是越严格。那对于人体、人脸、手部关系点这些高精度的场景可以适当的调小。 Sigma 在 RTM pose 的原始论文中为 5. 66。
好,那就是这三个参数。如果你的想让这个模型更精准,我们不要求它的速度,只要求它的精度,比如说做机器人的控制,做穴位,做医疗上的应用的话,我们想让它尽可能的精准,那我们可以调大这个 input size,那现在是 256* 256,你可以调成3845121024。然后其他的这三个缩参数等比例缩放,比如说你调成 512 的话, Sigma 就会变成,就调成 24* 24,然后 input fee in feature map size 就改成 16* 16。
那我的建议是,如果你要让这个模型非常准的话,你就把这个 input size 调成1024,然后 Sigma 和音 feature map size 直接放大,对应放大 4 倍,那这是模型的结构,那模型结构其实我提供了 s 模型、 m 模型和 l 模型三个模型,然后我把 m 和 l 先注释了,你也可以把 s 模型注释,然后把 m 和 l 模型的代码反注视就可以换成不同尺度的模型。
模型越大,参数量越多,然后 input size 越大, Sigma 对应越小,然后 in feature map 越大,它模型的性能精度就越高,但是速度就越慢。所以你可以自己去尝试改一下不同模型的config,就是不同 RTM pose 模型的config,在这个链接里边你也可以看一下,直接打开看。
那我们现在用的这个模型是在 COCO 17 个关键点数据上训练得到的,就是这几个模型。模型看完了,然后这是训练的 PIPELINE 和测试的PIPELINE,训练的 data loader 和测试的 data loader,这些其实都不需要改,因为我们的格式是 MSQ 格式的,它的标注文件就是按照 MSQL 来的,然后图像文件也是按照 MSQL 格式来的,你只要把数据集整成 MSQL 格式,后边的都不用变。然后这是评估的指标测试项的评估指标,弄完 config 就可以训练了。
和训练目标检测模型一样,也是直接进入 mm pose 目录,运行这个脚本就可以了。那我建议在命令行里边运行,打开终端,好进入 m pose 目录,然后运行这个脚本。在运行过程中,它就会在 m pose 目录下新建一个 work directless 目录,训练的日志就保存在这个日期命名的文件夹里,和刚刚的目标检测是一样的。
训练完成之后得到这几个点, PTH 格式的模型权重文件,它分别保存了最新的和最好的,你可以选择一个作为你用于预测的模型权重文件,训练日志保存在了这个文件夹里边。训练得到的关键检测模型到底表现怎么样,可以在测试集上评估精度,和之前目标检测是一样的。
使用阿兰 pose 里边的 TOOLS test,点 PY 脚本传入模型的 config 配置文件和 checkpoint 权重文件,就是这几个文件,你随便挑一个放进来,运行到最后就可以看到各种关键点检测的测试集评估指标了。这里边比较重要的一个是AP,还有一个是NME,还有一系列 Coco 和 PCK 的指标,这些都非常的重要。那可以看到这些 AP 很多都是一,就证明我们的模型学的是非常不错的,在测试集上可以打 100 分。那重点几个可以看一下PC,k, AUC 和NME。如果我们现在在办一个卡狗比赛的话,就是按这些分数来排名发奖牌的。
在 work directory 斯也会生成一个对应的 JSON 文件,里边记录了这些指标如何监控训练过程,它的各种评价指标,损失函数是否都收敛正常,有没有发生过拟合第几轮开始收敛的?就可以用 F3 代码可视化训练日志,打开 work directors 里边的训练日志目录。
用 F3 可以打开这个scalers,点 json 文件,和刚刚目标检测训练日志是一样的,我们用 pandas 把它分别整成两张表格,训练和测试的保存到本地,设置 Meta plot live 中文字体用于可视化,然后制定一个可视化辅助函数。
先可视化训练级的损失函数,可以看到都在逐渐降低,训练级的准确率也在逐渐的提升。测试级的评估指标先看 MS 扣扣metric,就是各种 AP 和 MAP 都是在逐渐上升的,因为我们的这个里边不存在 m 这个类别,所以它的这个 m 的指标是平的。
再看一个NME, NME 越低就表明关键检测算法越好,那它也是在逐渐降低的,就没有问题。那这些图你也都可以插到论文里边,和刚刚的目标检测模型一样,同样要进行模型权重文件的精简转换。进入 m pose 主目录,然后用 TOS miss publish model 点 PY 函数,把训练得到的 RTM pose 的这个点 PTH 文件进行精简,转换得到一个新的 RT m pose 模型,那这个模型就用于后边的预测了,你可以转成你自己的模型,也可以直接下载我提供好的模型,好进入 m m pose 主目录,然后下载这个模型到 checkpoint 文件夹里边。好,那这个 RTM pose 开头的这个模型就是我已经训练好的,你也可以直接运行。然后就可以做预测了。先是在命令行里边预测,还是用的 Demo 目录下的 top down demo with m Dat。
先对单张图像进行关键检测的预测,再对视频文件进行关键检测的预测传入的参数,首先是目标检测模型的 config 配置文件,目标检测模型的 checkpoint 权重文件、关键点检测的 config 配置文件和关键点检测的 checkpoint 权重文件。指定输入的图像视频的路径,指定保存的输出文件夹,指定计算设备。
目标检测执行度阈值。关键点执行度阈值。目标检测 NMS 飞机大值抑制的 IOU 阈值。可视化的点的关键点的半径线。目标检测框的线宽是否要画框,是否画热力图,是否展示关键点的ID,我们等它运行完成。预测完成之后,在 m m pose 奥特普斯目录下就会多出 G2 开头的这几个文件,把它们都下载下来,直接先看看视频预测结果,效果是非常不错的,无论是目标检测的框还是关键点都非常的稳定并且准确,比 Yulo V8 是要准确多了。而且通过这个热力图,我们可以对模型的预测流程有一个可解释性的打开黑箱子的了解,而且可以发现一些新的科学问题。比如说我现在就发现一个问题,三角板是乱摆的,关键点的分布也很没有规律,但是热力图里边的这些点却是等间距排布的,那这是为什么呢?这是模型本身有问题,还是说展示了模型的内在的一种特性,一种思维方式?那如何改进它,让它不要再产生这种等间距分布的让他困惑的其他点如何去实现?这个留待大家去思考。
来看看单张图像的预测结果也很准,那就是用命令行进行预测,我们再用 Python API 来进行预测,进入 m pose 主目录导入工具包,先导入一堆图像处理的可视化的拍套式 m c v 的,再导入 im unpost 获取计算设备载入待测图像。那同样也是需要先构建目标检测模型,再构建关键点检测模型。目标检测模型的话,你可以用 fast RCN,也可以用 RTM Dat,如果是追求速度的话就用 RTM DAT,其实用 RTM data 就是又快又好的。
然后构建关键检测模型,传入 r t m pose s 的 config 配置文件和刚刚精简转换得到的 checkpoint 权重文件,先进行目标检测的预测,和前面的这个 B2 代码是一模一样的。进行置信度的阈值过滤,获得目标检测的结果,再获取关键点预测的结果,进行解析,就获得一个 332 格式的,总共有三个三角板,每个三角板有三个关键点,每个点有 x y 两个坐标。绘制出热力图,你发现看一下索引为一的关键点的热力图,它就是一个等间距排布的点阵,虽然这个点阵里边我们能一眼看出置信度最高的这三个点,但是为什么会出现其他的点?这就是留待大家思考的问题。用 open CV 来可视化指定框的颜色,框的线宽,点的半径,连接的线宽,每一个点的颜色,还有连接的颜色。然后用我这个代码模板去进行 open CV 的可视化,我们就自己实现了目标检测和关键的检测,预测结果的解析和可视化。用 open CV 的 rectangle 函数去画框,用 Opencv 的 circle 函数去画点,用 open CV 的 lie 函数去画线,那注意要先画线再画点,这样点是覆盖在线上的,这样比较好看。也可以用 m pose 官方可视化工具 Visualizer 去可视化出来。然后这个热力图也包含在图里边,就和 B2 代码是一模一样的。
那我们在本地跑一下,在本地先下载这个 config 文件和 check point 权重文件到 m post 目录, config 文件下载到 data 目录,然后 checkpoint 文件下载到 checkpoint 目录,然后就可以调用摄像头去实时预测了,看一下效果。直接用 demo 目录下的 top down demo with m debt,指定目标检测的 config checkpoint 关键检测的 config 和 checkpoint 速度挺快的,关键是精度非常高。
这是第一种摄像头实时预测的方法,也是官方目前最推荐的做法。你还可以用 Webcom API 先下载一个 config 文件,叫 Triangle estimation,然后把目标检测和关键检测的 config checkpoint 都填进去。用 webcom API demo 点 py 这个脚本来运行一下,效果是类似的。那这个 Web com API 马上在新版本中就会被放弃了,所以不太推荐,你仍然可以跑一下试试看,有一点点小延迟, NQ 退出。
第三种就是原生 open CV 的 Python API 了,导入工具包,然后载入模型,指定可视化的元数据,可视化的配置,然后获取摄像头,调用摄像头,逐帧的用这个 process frame 单帧处理的函数去运行速度和精度,还可以画框、画点画线都是我们用 open CV 自己实现的。如果你想让它的推理速度更上一层楼,更快,可以看我们后续用 mm deploy 把这个关键检测算法部署到边缘终端设备上,部署到各种各样的推理引擎和推理框架上,做更快的推理。