Skip to main content

moregeek program

使用mask r-cnn模型实现人体关键节点标注_华为云开发者社区的博客-多极客编程

摘要:在本案例中,我们将展示如何对基础的Mask R-CNN进行扩展,完成人体关键节点标注的任务。

本文分享自华为云社区《​​使用Mask R-CNN模型实现人体关键节点标注​​》,作者: 运气男孩。

前言

ModelArts 是面向开发者的一站式 AI 开发平台,为机器学习与深度学习提供海量数据预处理及交互式智能标注、大规模分布式训练、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期 AI 工作流。

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN

使用Mask R-CNN模型实现人体关键节点标注_分割_02

背景

Mask R-CNN是一个灵活开放的框架,可以在这个基础框架的基础上进行扩展,以完成更多的人工智能任务。在本案例中,我们将展示如何对基础的Mask R-CNN进行扩展,完成人体关键节点标注的任务。

Mask R-CNN整体架构,它的3个主要网络:

  • backbone网络,用于生成特征图
  • RPN网络,用于生成实例的位置、分类、分割(mask)信息
  • head网络,对位置、分类和分割(mask)信息进行训练

在head网络中,有分类、位置框和分割(mask)信息的3个分支,我们可以对head网络进行扩展,加入一个人体关键节点keypoint分支。并对其进行训练,使得我们的模型具备关键节点分析的能力。那么我们的模型结构将如下图所示:

使用Mask R-CNN模型实现人体关键节点标注_ModelArts_03

head网络中,红色的keypionts分支为新加入的人体关键节点分支

MaskRCNN模型的解析可以参考​此文章​ 。

本案例的运行环境是 TensorFlow 1.8.0 。

keypoints分支

在RPN中,我们生成Proposal后,当检测到Proposal的分类为"Person"时,对每个部位的关键点生成一个one-hot掩码,训练的目标最终是得到一个56*56的二值掩码,当中只有一个像素被标记为关键点,其余像素均为背景。对于每一个关键点的位置,进行最小化平均交叉熵损失检测,K个关键点是被独立处理的。

人体姿态检测中,人本身可以作为一个目标实例进行分类检测。但是,采取了one-hot编码以后,就可以扩展到coco数据集中被标注的17个人体关键点(例如:左眼、右耳),同时也能够处理非连续型数值特征。

COCO数据集中,对人体中17个关键点进行了标注,包括:鼻子,左眼,右眼,左耳,右耳,左肩,右肩,左肘,右肘,左手腕,右手腕,左膝盖,右膝盖,左脚踝,右脚踝,左小腿,右小腿,如下图所示:

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_04

基础环境准备

在使用 ModelArts 进行 AI 开发前,需先完成以下基础操作哦(如有已完成部分,请忽略),主要分为4步(注册–>实名认证–>服务授权–>领代金券):

1、使用手机号注册华为云账号:点击注册

2、点此去完成实名认证,账号类型选"个人",个人认证类型推荐使用"扫码认证"。

使用Mask R-CNN模型实现人体关键节点标注_ModelArts_05

3、点击进入 ModelArts 控制台数据管理页面,上方会提示访问授权,点击【服务授权】按钮,按下图顺序操作:

使用Mask R-CNN模型实现人体关键节点标注_框架_06

4、进入 ModelArts 控制台首页,如下图,点击页面上的"彩蛋",领取新手福利代金券!后续步骤可能会产生资源消耗费用,请务必领取。

以上操作,也提供了详细的视频教程,点此查看:​ModelArts环境配置​​​

使用Mask R-CNN模型实现人体关键节点标注_backbone网络_07

在ModelArts中训练Mask R-CNN keypoints模型

准备数据和源代码

第一步:准备数据集和预训练模型

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_08

下载完成后,显示如下压缩包

使用Mask R-CNN模型实现人体关键节点标注_backbone网络_09

解压后,得到data目录,其结构如下:

data/
├── mask_rcnn_coco.h5
├── annotations
│ ├── person_keypoints_train2014.json
│ ├── ***.json
├── train2014
│ ├── COCO_train2014_***.jpg
└── val2014
├── COCO_val2014_***.jpg复制

其中data/mask_rcnn_coco_humanpose.h5为预训练模型,annotations、train2014和val2014为我们提前准备好的最小数据集,包含了500张图片的标注信息。

第二步:准备源代码

使用Mask R-CNN模型实现人体关键节点标注_分割_10

使用Mask R-CNN模型实现人体关键节点标注_ModelArts_11

第三步:安装依赖pycocotools

我们使用COCO数据集,需要安装工具库pycocotools

使用Mask R-CNN模型实现人体关键节点标注_ModelArts_12

使用Mask R-CNN模型实现人体关键节点标注_分割_13

程序初始化

第一步:导入相关的库,定义全局变量

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_14

第二步:生成配置项

我们定义Config类的子类MyTrainConfig,指定相关的参数,较为关键的参数有:

  • __NAME__: Config的唯一名称
  • __NUM_CLASSIS__: 分类的数量,我们只生成圆形,正方形和三角形,再加上背景,因此一共是4个分类
  • __IMAGE_MIN_DIM和IMAGE_MAX_DIM__: 图片的最大和最小尺寸,我们生成固定的128x128的图片,因此都设置为128
  • __TRAIN_ROIS_PER_IMAGE__: 每张图片上训练的RoI个数
  • __STEPS_PER_EPOCH和VALIDATION_STEPS__: 训练和验证时,每轮的step数量,减少step的数量可以加速训练,但是检测精度降低

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_15

第三步:创建数据集对象

我们使用封装好的CocoDataset类,生成训练集和验证集。

使用Mask R-CNN模型实现人体关键节点标注_分割_16

创建模型

用"training"模式创建模型对象,并加载预训练模型

使用Mask R-CNN模型实现人体关键节点标注_ModelArts_17

运行完成后输出下面

使用Mask R-CNN模型实现人体关键节点标注_分割_18

训练模型

Keras中的模型可以按照制定的层进行构建,在模型的train方法中,我们可以通过layers参数来指定特定的层进行训练。layers参数有以下几种预设值:

  • heads:只训练head网络中的分类、mask和bbox回归
  • all: 所有的layer
  • 3+: 训练ResNet Stage3和后续Stage
  • 4+: 训练ResNet Stage4和后续Stage
  • 5+: 训练ResNet Stage5和后续Stage

此外,layers参数还支持正则表达式,按照匹配规则指定layer,可以调用model.keras_model.summary()查看各个层的名称,然后按照需要指定要训练的层。

我们针对不同的layer进行训练,首先,训练head网络中的4个分支:

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_19

输出结果:

使用Mask R-CNN模型实现人体关键节点标注_backbone网络_20

使用Mask R-CNN模型实现人体关键节点标注_分割_21

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_22

然后训练ResNet Stage4和后续Stage

使用Mask R-CNN模型实现人体关键节点标注_框架_23

最后,对所有layer进行优化,并将训练的模型保存到本地

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_24

输出结果:

使用Mask R-CNN模型实现人体关键节点标注_ModelArts_25

使用Mask R-CNN模型实现人体关键节点标注_框架_26

使用模型检测图片物体

第一步:创建"Inference"模式的模型对象,并加载我们训练好的模型文件

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_27

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_28

第二步:从验证数据集中随机选出一张图片,显式Ground Truth信息

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_29

使用Mask R-CNN模型实现人体关键节点标注_Mask R-CNN_30

输出结果,识别图片如下:

使用Mask R-CNN模型实现人体关键节点标注_ModelArts_31

第三步:使用模型对图片进行预测,并显示结果

使用Mask R-CNN模型实现人体关键节点标注_ModelArts_32

最终识别结果:

使用Mask R-CNN模型实现人体关键节点标注_backbone网络_33

总结

使用Mask R-CNN模型实现人体关键节点标注,在head网络中,有分类、位置框和分割(mask)信息的3个分支,我们可以对head网络进行扩展,加入一个人体关键节点keypoint分支。并对其进行训练,使得我们的模型具备关键节点分析的能力。对人体中17个关键点进行了标注,包括:鼻子,左眼,右眼,左耳,右耳,左肩,右肩,左肘,右肘,左手腕,右手腕,左膝盖,右膝盖,左脚踝,右脚踝,左小腿,右小腿,并且取得了不错的效果。


点击关注,第一时间了解华为云新鲜技术~

©著作权归作者所有:来自51CTO博客作者华为云开发者联盟的原创作品,如需转载,请与作者联系,否则将追究法律责任

cvpr2022 | zerocap:零样本图像到文本生成的视觉语义算法_wx6317028f762da的博客-多极客编程

CVPR2022 | ZeroCap:零样本图像到文本生成的视觉语义算法【写在前面】最近的文本到图像匹配模型将对比学习应用于大量未经管理的图像和句子对。虽然此类模型可以为匹配和后续的zero-shot任务提供强大的分数,但它们无法在给定图像的情况下生成标题。在这项工作中,作者重新利用这些模型来在推理时生成给定图像的描述性文本,而无需任何进一步的训练或调整步骤。这是通过将视觉语义模型与大型语言模型相

opencv-颜色映射(java版)_不要喷香水的博客-多极客编程

@​​TOC​​颜色映射的应用还是比较广泛的,比如红外热成像图,伪色彩采用以下图片做演示(​​使用灰度图和彩色图效果是一样的​​)一,Imgproc1.applyColorMap()方法说明applyColorMap(Mat src, Mat dst, int colormap)src:原图像dst:目标图像colormap:OpenCV自带的颜色userColor:自定义色彩 applyColo

opencv-滤波矩阵(java版)_不要喷香水的博客-多极客编程

@​​TOC​​用下图做演示multiply()顾名思义,乘法函数。使用该函数可以将像素的每个通道值乘以这个参数。 方法说明multiply(Mat src1, Scalar src2, Mat dst, double scale, int dtype)src1:原图像src2:颜色矩阵scale:src2矩阵参数的乘数值(从图像的角度来说,可以理解为亮度值,值越大,图像越亮)dst:目标图像dt

详解降维-pca-最大投影方差&最小重构代价【白板推导系列笔记】_wx63088f6683f8f的博客-多极客编程

作者:[shuhuai008]   PCA的核心就是对原始特征空间的重构(将一组可能线性相关的变量,通过正交变换变换成一组线性无关的变量) 两个基本的要求是最大投影方差(即找到的投影方向对于数据集投影方差最大),最小重构代价(即降维所得到的新数据与原数据相比,信息损失最小)   $$ \begin{gathered} X=\begin{pmatrix} x_{1} & x_{2} &a

【自然语言处理(nlp)】基于ernie-gen的中文自动文摘_灵彧universe的博客-多极客编程

【自然语言处理(NLP)】基于ERNIE-GEN的中文自动文摘 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~ . 博客主页:ぃ灵彧が的学习日志 . 本文专栏:人工智能 . 专栏寄语:若你决定灿烂,山无遮,海无拦 .

【自然语言处理(nlp)】基于transformer的英文自动文摘_灵彧universe的博客-多极客编程

【自然语言处理(NLP)】基于Transformer的英文自动文摘 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~ . 博客主页:ぃ灵彧が的学习日志 . 本文专栏:人工智能 . 专栏寄语:若你决定灿烂,山无遮,海无拦 .

cvpr2022 | zerocap:零样本图像到文本生成的视觉语义算法_wx6317028f762da的博客-多极客编程

CVPR2022 | ZeroCap:零样本图像到文本生成的视觉语义算法【写在前面】最近的文本到图像匹配模型将对比学习应用于大量未经管理的图像和句子对。虽然此类模型可以为匹配和后续的zero-shot任务提供强大的分数,但它们无法在给定图像的情况下生成标题。在这项工作中,作者重新利用这些模型来在推理时生成给定图像的描述性文本,而无需任何进一步的训练或调整步骤。这是通过将视觉语义模型与大型语言模型相

后cnn探索,如何用rnn进行图像分类_华为云开发者社区的博客-多极客编程

摘要:RNN可以用于描述时间上连续状态的输出,有记忆功能,能处理时间序列的能力,让我惊叹。本文分享自华为云社区《​​用RNN进行图像分类——CNN之后的探索​​》,作者: Yin-Manny。一、 写前的思考:当看完RNN的PPT,我惊叹于RNN可以用于描述时间上连续状态的输出,有记忆功能,能处理时间序列的能力。当拿到思考题,在CNN框架下加入RNN程序,这是可以实现的吗,如果可以,它的理论依据是

【自然语言处理(nlp)】基于bilstm的关系抽取_灵彧universe的博客-多极客编程

【自然语言处理(NLP)】基于BiLSTM的关系抽取 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~ . 博客主页:ぃ灵彧が的学习日志 . 本文专栏:机器学习 . 专栏寄语:若你决定灿烂,山无遮,海无拦 . (文章目录

【自然语言处理(nlp)】基于ernie-gen的中文自动文摘_灵彧universe的博客-多极客编程

【自然语言处理(NLP)】基于ERNIE-GEN的中文自动文摘 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~ . 博客主页:ぃ灵彧が的学习日志 . 本文专栏:人工智能 . 专栏寄语:若你决定灿烂,山无遮,海无拦 .

【自然语言处理(nlp)】基于transformer的英文自动文摘_灵彧universe的博客-多极客编程

【自然语言处理(NLP)】基于Transformer的英文自动文摘 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~ . 博客主页:ぃ灵彧が的学习日志 . 本文专栏:人工智能 . 专栏寄语:若你决定灿烂,山无遮,海无拦 .

web3 中最佳 ai 艺术工具_devpoint:web开发技术点的博客-多极客编程

::: hljs-center ::: AI 生成的艺术已经存在多年,直到最近才成为数字艺术世界的最新趋势,它正在改变人们对艺术的看法和使用它的方式。 使用AI来创作和创作新艺术品(和电影)的艺术家数量正在上升,并且曝光率越来越高。 在 Web3 中,像AI Nightbirds或Artsy Monke等 NFT 项目,它们分别是最受欢迎的 Moonbird 和 Bored Apes 的衍生产品