YOLOv7-pose:回归到回归的多人单阶段关键点检测🤔

举报
杜甫盖房子 发表于 2023/02/28 09:19:10 2023/02/28
【摘要】 YOLOv7-pose:回归到回归的多人单阶段关键点检测🤔最近,一种基于目标检测的关键点检测算法悄然兴起。如基于YOLOv5的KAPAO以及基于YOLOv7的YOLOv7-pose,这类方法不使用heatmap而是类似回归的方法进行关键点检测,因此可以达到更好的速度精度trade-off,对工程比较友好。此外,单阶段关键点检测在拥挤的场景下比双阶段的方法更有优势,因此我们决定,就用YOL...

YOLOv7-pose:回归到回归的多人单阶段关键点检测🤔

最近,一种基于目标检测的关键点检测算法悄然兴起。如基于YOLOv5的KAPAO以及基于YOLOv7的YOLOv7-pose,这类方法不使用heatmap而是类似回归的方法进行关键点检测,因此可以达到更好的速度精度trade-off,对工程比较友好。此外,单阶段关键点检测在拥挤的场景下比双阶段的方法更有优势,因此我们决定,就用YOLOv7-pose做一个多人关键点检测的案例,最终效果如下:

yolov7-pose

本案例所需资源(代码、模型、测试数据等)均可从obs下载,案例使用Windows版本的ModelBox SDK进行开发,如果对此还不熟悉,请先阅读ModelBox端云协同AI开发套件(Windows)开发环境篇,如果对ModelBox AI应用开发感兴趣,欢迎参加我们的ModelBox实战营

工程目录

这个应用对应的ModelBox版本已经做成模板放在华为云OBS中,可以用sdk中的solution.bat工具下载,接下来我们给出该应用在ModelBox中的完整开发过程:

1)下载模板

执行.\solution.bat -l可看到当前公开的技能模板:

PS ███> .\solution.bat -l
...
Solutions name:
mask_det_yolo3
...
multi_human_pose_yolov7pose

结果中的multi_human_pose_yolov7pose即为yolov7多人关键点应用模板,可使用如下命令下载模板:

PS ███> .\solution.bat -s multi_human_pose_yolov7pose
...

solution.bat工具的参数中,-l 代表list,即列出当前已有的模板名称;-s 代表solution-name,即下载对应名称的模板。下载下来的模板资源,将存放在ModelBox核心库的solution目录下。

2)创建工程

ModelBox sdk目录下使用create.bat创建multi_human_pose_yolov7pose工程:

PS ███> .\create.bat -t server -n multi_human_pose_yolov7pose -s multi_human_pose_yolov7pose
sdk version is modelbox-xxx
success: create multi_human_pose_yolov7pose in ███\modelbox\workspace

create.bat工具的参数中,-t 表示创建事务的类别,包括工程(server)、Python功能单元(Python)、推理功能单元(infer)等;-n 代表name,即创建事务的名称;-s 代表solution-name,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程。

workspace目录下将创建出multi_human_pose_yolov7pose工程,工程目录如下:

multi_human_pose_yolov7pose
    ├─bin
    │  ├─main.bat                                 // 技能运行入口脚本
    │  └─mock_task.toml                           // 本地mock运行配置文件
    ├─data
    │  └─demo.mp4                                 // 测试视频
    ├─depandence
    │  └─modelbox_requirements.txt                // python依赖库,如使用hilens控制台部署技能会自动安装
    ├─etc
    │  └─flowunit                                 // 功能单元目录
    │      └─yolov7_pose_post                     // 关键点检测后处理功能单元
    │         ├─yolov7_pose_post.py               // 关键点检测后处理功能单元入口文件
    │         ├─yolov7_pose_post.toml             // 关键点检测后处理功能单元配置文件
    │         └─utils.py                          // 其他工具函数
    ├─graph
    │  └─multi_human_pose_yolov7pose.toml         // 默认技能流程图,运行测试视频
    ├─model                                       
    │  └─yolov7_pose                                   
    │      ├─yolov7_pose.toml                     // 关键点检测推理单元配置文件
    │      └─yolov7-pose.onnx                     // 关键点检测模型
    ├─...
    └─build_project.sh

可以看到,工程非常的简单,只包含一个推理功能单元与一个后处理功能单元。其中关键点检测模型为YOLOv7-pose预训练模型导出的onnx模型,后处理单元也只需要进行一些简单的NMS等操作以及结果绘制:

def process(self, data_context):
    in_image = data_context.input("in_image")
    in_feat = data_context.input("in_feat")
    out_image = data_context.output("out_image")

    for buffer_img, buffer_feat in zip(in_image, in_feat):
        width = buffer_img.get('width')
        height = buffer_img.get('height')
        channel = buffer_img.get('channel')
        out_img = np.array(buffer_img.as_object(), dtype=np.uint8, copy=False)
        out_img = out_img.reshape(height, width, channel)

        pose_data = np.array(buffer_feat.as_object(), copy=False).reshape((1, -1, self.kps))

        decoder_and_draw(out_img, pose_data, self.score_threshold, (self.net_h, self.net_w))

        add_buffer = modelbox.Buffer(self.get_bind_device(), out_img)
        add_buffer.copy_meta(buffer_img)
        out_image.push_back(add_buffer)

    return modelbox.Status.StatusCode.STATUS_SUCCESS

此外,我们也比较关心案例的性能,因此在默认技能图中开启了性能统计配置:

[profile]
profile=true
trace=true

运行项目

打开工程目录下bin/mock_task.toml文件,设置其中的任务输入和任务输出配置为如下内容:

[input]
type = "url"
url = "${HILENS_APP_ROOT}/data/demo.mp4"

[output]
type = "local"
url = "${HILENS_DATA_DIR}/result.mp4"

即使用data目录下的测试视频运行技能,结果保存在hilens_data_dir下。

执行bin/main.bat 运行应用,可以看到hilens_data_dir下生成了结果视频与性能统计文件:

hilens_data_dir
    ├─mb_profile
    │  ├─performance_{time}.json
    │  └─trace_{time}.json
    └─result.mp4

yolov7-pose

在Chrome浏览器chrome://tracing/中加载性能统计文件查看:

yolov7-pose

可以看到耗时最久的为推理功能单元,平均耗时39.657ms,因为ModelBox是静态图并行推理,fps取决于耗时最久的功能单元,因此此技能约能达到25fps,还是满不错的😎

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。