持续创作,加快成长!这是我参与「日新计划 10 月更文挑战」的第5天,点击检查活动详情

本文共享自华为云社区《运用Mask R-CNN模型实现人体要害节点标示》,作者: 命运男孩。

前语

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

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

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

布景

Mask R-CNN是一个灵敏敞开的结构,能够在这个根底结构的根底上进行扩展,以完结更多的人工智能使命。在本事例中,咱们将展示如何对根底的Mask R-CNN进行扩展,完结人体要害节点标示的使命。

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

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

在head网络中,有分类、方位框和切割(mask)信息的3个分支,咱们能够对head网络进行扩展,参加一个人体要害节点keypoint分支。并对其进行练习,使得咱们的模型具有要害节点分析的才能。那么咱们的模型结构将如下图所示:

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

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模型实现人体关键节点标注

根底环境准备

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

  1. 运用手机号注册华为云账号:点击注册

  2. 点此去完结实名认证,账号类型选”个人”,个人认证类型引荐运用”扫码认证”。

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

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

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

  4. 进入 ModelArts 控制台主页,如下图,点击页面上的”彩蛋”,收取新手福利代金券!后续过程可能会产生资源消耗费用,请务必收取。

以上操作,也供给了具体的视频教程,点此检查:ModelArts环境配置

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

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

准备数据和源代码

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

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

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

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

解压后,得到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为预练习模型,annotationstrain2014val2014为咱们提早准备好的最小数据集,包含了500张图片的标示信息。

第二步:准备源代码

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

第三步:装置依靠pycocotools

咱们运用COCO数据集,需求装置工具库pycocotools

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

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

程序初始化

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

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

第二步:生成配置项

咱们定义Config类的子类MyTrainConfig,指定相关的参数,较为要害的参数有:

  • __NAME__: Config的唯一称号
  • __NUM_CLASSIS__: 分类的数量,咱们只生成圆形,正方形和三角形,再加上布景,因而一共是4个分类
  • __IMAGE_MIN_DIM和IMAGE_MAX_DIM__: 图片的最大和最小尺度,咱们生成固定的128×128的图片,因而都设置为128
  • __TRAIN_ROIS_PER_IMAGE__: 每张图片上练习的RoI个数
  • __STEPS_PER_EPOCH和VALIDATION_STEPS__: 练习和验证时,每轮的step数量,削减step的数量能够加快练习,可是检测精度降低

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

第三步:创立数据集目标

咱们运用封装好的CocoDataset类,生成练习集和验证集。

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

创立模型

用”training”模式创立模型目标,并加载预练习模型

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

运转完结后输出下面

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

练习模型

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模型实现人体关键节点标注

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

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

然后练习ResNet Stage4和后续Stage

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

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

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

输出成果:

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

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

运用模型检测图片物体

第一步:创立”Inference”模式的模型目标,并加载咱们练习好的模型文件

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

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

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

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

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

输出成果,辨认图片如下:

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

第三步:运用模型对图片进行猜测,并显示成果

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

最终辨认成果:

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

总结

运用Mask R-CNN模型实现人体要害节点标示,在head网络中,有分类、方位框和切割(mask)信息的3个分支,咱们能够对head网络进行扩展,参加一个人体要害节点keypoint分支。并对其进行练习,使得咱们的模型具有要害节点分析的才能。对人体中17个要害点进行了标示,包含:鼻子,左眼,右眼,左耳,右耳,左肩,右肩,左肘,右肘,左手腕,右手腕,左膝盖,右膝盖,左脚踝,右脚踝,左小腿,右小腿,而且取得了不错的作用。

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