持续创作,加快成长!这是我参与「日新计划 10 月更文挑战」的第5天,点击检查活动详情
本文共享自华为云社区《运用Mask R-CNN模型实现人体要害节点标示》,作者: 命运男孩。
前语
ModelArts 是面向开发者的一站式 AI 开发平台,为机器学习与深度学习供给海量数据预处理及交互式智能标示、大规模分布式练习、自动化模型生成,及端-边-云模型按需布置才能,帮助用户快速创立和布置模型,管理全周期 AI 工作流。
布景
Mask R-CNN是一个灵敏敞开的结构,能够在这个根底结构的根底上进行扩展,以完结更多的人工智能使命。在本事例中,咱们将展示如何对根底的Mask R-CNN进行扩展,完结人体要害节点标示的使命。
Mask R-CNN整体架构,它的3个主要网络:
- backbone网络,用于生成特征图
- RPN网络,用于生成实例的方位、分类、切割(mask)信息
- head网络,对方位、分类和切割(mask)信息进行练习
在head网络中,有分类、方位框和切割(mask)信息的3个分支,咱们能够对head网络进行扩展,参加一个人体要害节点keypoint分支。并对其进行练习,使得咱们的模型具有要害节点分析的才能。那么咱们的模型结构将如下图所示:
head网络中,红色的keypionts分支为新参加的人体要害节点分支
MaskRCNN模型的解析能够参阅此文章 。
本事例的运转环境是 TensorFlow 1.8.0 。
keypoints分支
在RPN中,咱们生成Proposal后,当检测到Proposal的分类为”Person”时,对每个部位的要害点生成一个one-hot掩码,练习的方针最终是得到一个56*56的二值掩码,当中只要一个像素被标记为要害点,其他像素均为布景。关于每一个要害点的方位,进行最小化平均穿插熵丢失检测,K个要害点是被独立处理的。
人体姿态检测中,人本身能够作为一个方针实例进行分类检测。可是,采取了one-hot编码以后,就能够扩展到coco数据会集被标示的17个人体要害点(例如:左眼、右耳),同时也能够处理非连续型数值特征。
COCO数据会集,对人体中17个要害点进行了标示,包含:鼻子,左眼,右眼,左耳,右耳,左肩,右肩,左肘,右肘,左手腕,右手腕,左膝盖,右膝盖,左脚踝,右脚踝,左小腿,右小腿,如下图所示:
根底环境准备
在运用 ModelArts 进行 AI 开发前,需先完结以下根底操作哦(如有已完结部分,请忽略),主要分为4步(注册–>实名认证–>服务授权–>领代金券):
-
运用手机号注册华为云账号:点击注册
-
点此去完结实名认证,账号类型选”个人”,个人认证类型引荐运用”扫码认证”。
-
点此进入 ModelArts 控制台数据管理页面,上方会提示访问授权,点击【服务授权】按钮,按下图次序操作:
-
进入 ModelArts 控制台主页,如下图,点击页面上的”彩蛋”,收取新手福利代金券!后续过程可能会产生资源消耗费用,请务必收取。
以上操作,也供给了具体的视频教程,点此检查:ModelArts环境配置
在ModelArts中练习Mask R-CNN keypoints模型
准备数据和源代码
第一步:准备数据集和预练习模型
下载完结后,显示如下压缩包
解压后,得到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张图片的标示信息。
第二步:准备源代码
第三步:装置依靠pycocotools
咱们运用COCO数据集,需求装置工具库pycocotools
程序初始化
第一步:导入相关的库,定义全局变量
第二步:生成配置项
咱们定义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的数量能够加快练习,可是检测精度降低
第三步:创立数据集目标
咱们运用封装好的CocoDataset类,生成练习集和验证集。
创立模型
用”training”模式创立模型目标,并加载预练习模型
运转完结后输出下面
练习模型
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个分支:
输出成果:
然后练习ResNet Stage4和后续Stage
最后,对所有layer进行优化,并将练习的模型保存到本地
输出成果:
运用模型检测图片物体
第一步:创立”Inference”模式的模型目标,并加载咱们练习好的模型文件
第二步:从验证数据会集随机选出一张图片,显式Ground Truth信息
输出成果,辨认图片如下:
第三步:运用模型对图片进行猜测,并显示成果
最终辨认成果:
总结
运用Mask R-CNN模型实现人体要害节点标示,在head网络中,有分类、方位框和切割(mask)信息的3个分支,咱们能够对head网络进行扩展,参加一个人体要害节点keypoint分支。并对其进行练习,使得咱们的模型具有要害节点分析的才能。对人体中17个要害点进行了标示,包含:鼻子,左眼,右眼,左耳,右耳,左肩,右肩,左肘,右肘,左手腕,右手腕,左膝盖,右膝盖,左脚踝,右脚踝,左小腿,右小腿,而且取得了不错的作用。
点击重视,第一时间了解华为云新鲜技术~