热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AIStudio精品项目|基于Keypoint模型下的人体关键点检测

点击左上方蓝字关注我们人的关节点活动动作的捕捉如何实现?如何提升捕捉质量和效果?本期AIStudio精品项目为您揭晓文末论文复现赛招募记得查看~项目介绍本次给大家带来的是基于Key

点击左上方蓝字关注我们

人的关节点活动动作的捕捉如何实现?

如何提升捕捉质量和效果?

本期AI Studio精品项目为您揭晓

文末论文复现赛招募记得查看~


项目介绍

本次给大家带来的是基于Keypoint模型下的人体关键点检测,Alchemist_W供稿,本项目是基于PaddleDetection套件使用COCO2017数据集对人体关键点进行检测以实现对人的关节点活动动作的捕捉。利用Top-down与Down-top两种方式实现模型训练及其推理。在训练过程中使用了PP-YOLOv2训练的Det检测器和HigherHRNet关键点检测器,以提高质量和效果。

PaddleDetection

PaddleDetection是飞桨目标检测开发套件,旨在帮助开发者更好地解决检测模型的表述、训练、优化及部署等全开发流程。

PaddleDetection 实现了多种主要目标检测,算法提供了详细的数据增强策略、网络模块组件(如骨网络)、损失函数等,并集成了模型压缩和跨平台开发能力。

经过长时间的产业实践检测,划桨检测已被熟练掌握、卓越的使用体验,工业质检、遥感图像检测、无人巡检、新、互联网、科研零售等十多个行业的开发者广泛应用。

特点:

  • 模型丰富:包含目标检测、实例分割、人脸检测100+个预训练模型,涵盖全球大赛冠军方案

  • 使用:简洁的设计,解耦各种网络组件,开发者轻松搭建、试用各种检测模型及优化策略,得到快速发展、定制化的算法。

  • 全面打通:从数据增强组网、训练、压缩、全景打通,并配套支持云端设备/端多架构、多部署。

  • 高性能:基于飞桨的高性能内核,模型训练速度及显存占用优势明显支持FP16训练,支持多机训练。

PP-YOLOV2

在实际应用场景中,有效性与高效性对于目标检测器非常重要。为满足这两个问题,全面评估了现有提高PP-YOLO性能的改进措施同时保持推理耗时不变。

PP-YOLO是PaddleDetection优化和改进的YOLOv3的模型,其精度(COCO数据集MAP)和推理速度均优于YOLOv4模型,要求使用PaddlePaddle> = 2.0.2版本(可使用PIP安装)

PP-YOLO在COCO test-dev2017数据集上精度达到45.9%,在单卡V100上FP32推理速度为72.9 FPS,V100上开启TensorRT下FP16推理速度为155.6 FPS。

训练结果查看:

HigherHRNet

HigherHRNet:自下而上姿态估计中的多尺度表征学习。自下而上的框架在速度上有优势,但是由于卷积神经网络对于尺度不敏感,而图片中人的多尺度的难题导致目前的结果和自上而下框架还有一定差距。所以采用了HigherHRNet来解决多尺度表征的问题。

训练结果查看:

部分代码展示

环境准备:

!git clone https://github.com.cnpmjs.org/PaddlePaddle/PaddleDetection#放入持久层!mv PaddleDetection/ work/#导入所需要的依赖!pip install -r work/PaddleDetection/requirements.txt

检测器数据集准备(部分):

"""按VOC格式划分数据集,train : val = 0.85 : 0.15生成标签label_list.txt"""from random import shuffle
dataset = 'dataset/VOCData/'train_txt = os.path.join(dataset, 'train_val.txt')val_txt = os.path.join(dataset, 'val.txt')lbl_txt = os.path.join(dataset, 'label_list.txt')
classes = ["person"]
with open(lbl_txt, 'w') as f:for l in classes: f.write(l+'\n')
xml_base = 'Annotations'img_base = 'images'xmls = [v for v in os.listdir(os.path.join(dataset, xml_base)) if v.endswith('.xml')]shuffle(xmls)split = int(0.85 * len(xmls))
with open(train_txt, 'w') as f:for x in tqdm(xmls[:split]): m = x[:-4]+'.jpg' xml_path = os.path.join(xml_base, x) img_path = os.path.join(img_base, m) f.write('{} {}\n'.format(img_path, xml_path))
with open(val_txt, 'w') as f:for x in tqdm(xmls[split:]): m = x[:-4]+'.jpg' xml_path = os.path.join(xml_base, x) img_path = os.path.join(img_base, m) f.write('{} {}\n'.format(img_path, xml_path))

关键点数据集准备(部分):

import jsonimport osimport shutil
train_path = "COCO_All/train2017/"train_json_path = "COCO_All/annotations/person_keypoints_train2017.json"out_train_path = "COCO_Humen/tarin2017/"
val_path="COCO_All/val2017/"val_json_path = "COCO_All/annotations/person_keypoints_val2017.json"out_val_path = "COCO_Humen/val2017/"
def humen_img(img_path, json_path,out_path):      count = 0 with open( json_path, 'r') as f: data = json.load(f)for name in data['annotations']: img_file= name['image_id'] img_name = str(img_file).zfill(12)+".jpg" img_file = img_path+ img_name #照片名字都是12位+.jpg后缀表示 如:000000319100.jpg
if os.path.exists(out_path + img_name):# print("有重复文件!!,跳过,不移动!!!")continueelse: count += 1 shutil.copy(img_file, out_path)    print("本次生成照片数量为:",count)

导出模型:

%cd /home/aistudio/work/PaddleDetection/ # 导出PP-YOLOV2模型!python tools/export_model.py -c configs/ppyolo/ppyolov2_r50vd_dcn_voc.yml \ -o weights=output/ppyolov2_r50vd_dcn_voc/model_final.pdparams #导出模型hrnet_w32_384x288模型!python tools/export_model.py -c configs/keypoint/hrnet/hrnet_w32_384x288.yml \-o weights=output/hrnet_w32_384x288/model_final.pdparams

联合模型推理:

# [联合部署推理]!python deploy/python/keypoint_det_unite_infer.py --det_model_dir=output_inference/ppyolov2_r50vd_dcn_voc/ \--keypoint_model_dir=output_inference/hrnet_w32_384x288/ --video_file=../../Test/test.mp4 --use_gpu=True

部署:

# 准备PaddleLite依赖!pip install paddlelite # 准备PaddleLite部署模型# --optimize_out=output_inference/ssd_mobilenet_v1 \ 与上面同一个文件夹!paddle_lite_opt \--model_file=output_inference/ssd_mobilenet_v1_300_120e_voc/model.pdmodel \ --param_file=output_inference/ssd_mobilenet_v1_300_120e_voc/model.pdiparams \ --optimize_out=output_inference/ssd_mob \ --optimize_out_type=naive_buffer \ --valid_targets=arm

测试结果展示

·相关链接·

AI Studio项目地址:

https://aistudio.baidu.com/aistudio/projectdetail/2132652

PaddleDetection地址:

https://github.com/PaddlePaddle/PaddleDetection

Keypoint中文文档地址:

https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/configs/keypoint/README.md

PP-YOLO中文文档地址:

https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/configs/ppyolo/README_cn.md

飞桨论文复现赛

请点击“阅读原文”访问项目原文。

飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨企业版针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。

END


推荐阅读
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了在序列化时如何对SnakeYaml应用格式化,包括通过设置类和DumpSettings来实现定制输出的方法。作者提供了一个示例,展示了期望的yaml生成格式,并解释了如何使用SnakeYaml的特定设置器来实现这个目标。对于正在使用SnakeYaml进行序列化的开发者来说,本文提供了一些有用的参考和指导。摘要长度为169字。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Python的参数解析argparse模块的学习
    本文介绍了Python中参数解析的重要模块argparse的学习内容。包括位置参数和可选参数的定义和使用方式,以及add_argument()函数的详细参数关键字解释。同时还介绍了命令行参数的操作和可接受数量的设置,其中包括整数类型的参数。通过学习本文内容,可以更好地理解和使用argparse模块进行参数解析。 ... [详细]
author-avatar
娟儿2502923263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有