【DSW Gallery】基于Top Down的关键点检测示例

简介: EasyCV是基于Pytorch,以自监督学习和Transformer技术为核心的 all-in-one 视觉算法建模工具,并包含图像分类,度量学习,目标检测,姿态识别等视觉任务的SOTA算法。本文以关键点检测为例,为您介绍如何在PAI-DSW中使用EasyCV。

直接使用

请打开基于Top Down的关键点检测示例,并点击右上角 “ 在DSW中打开” 。

image.png

EasyCV关键点检测-TOP-DOWN

  关键点检测任务是计算机视觉任务领域的基础任务之一,包括人脸关键点、人体关键点以及特定物体(如手掌)关键点检测等,在姿态估计、行为识别、人机交互、虚拟现实以及无人驾驶等领域有重要的应用价值。

  本文将介绍如何在pai-dsw基于EasyCV快速进行人体关键点检测模型的训练和推理。

运行环境要求

PAI-Pytorch 1.7/1.8镜像, GPU机型 P100 or V100, 内存 32G

安装依赖包

注:在PAI-DSW docker中无需安装相关依赖,可跳过此1,2步骤, 在本地notebook环境中执行1,2 步骤安装环境

1、获取torch和cuda版本,并根据版本号修改mmcv安装命令,安装对应版本的mmcv和nvidia-dali

import torch
import os
os.environ['CUDA']='cu' + torch.version.cuda.replace('.', '')
os.environ['Torch']='torch'+torch.version.__version__.replace('+PAI', '')
!echo $CUDA
!echo $Torch
[2023-02-03 16:42:27,634.634 dsw-16577-67c64db7b-kslkp:5077 INFO utils.py:30] NOTICE: PAIDEBUGGER is turned off.
cu101
torch1.8.2
# install some python deps
! pip install --upgrade tqdm
! pip install mmcv-full==1.4.4 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.8.0/index.html
! pip install http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/third_party/nvidia_dali_cuda100-0.25.0-1535750-py3-none-manylinux2014_x86_64.whl

2、安装EasyCV算法包 注:在PAI-DSW docker中预安装了pai-easycv库,可跳过该步骤,若训练测试过程中报错,尝试用下方命令更新easycv版本

#pip install pai-easycv
! echo y | pip uninstall pai-easycv easycv
!pip install pai-easycv
from easycv.apis import *

正式开始

数据准备

本案例我们提供了小型关键点检测的数据集,以便你快速跑通,你可以下载链接数据

图片文件夹结构示例如下, 文件夹路径为./pose

pose/
├── images
    ├── 0001.jpg
    ├── 0002.jpg
    ├── 0003.jpg
    |...
└── train_200.json
└── val_20.json

 执行如下命令下载解压

! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/configs/keypoint/pose_coco.tar.gz && tar -xpf pose_coco.tar.gz

训练模型

这个demo中我们采用litehrnet作为主干网络去进行训练

# 下载config文件
! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/configs/keypoint/litehrnet_30_coco_384x288.py 

为了缩短训练时间,打开配置文件 litehrnet_30_coco_384x288.py,修改total_epoch参数为10, 每隔1次迭代打印一次日志。

# runtime settings
total_epochs = 10
# log config
log_config=dict(interval=1)
# 查看easycv安装位置
import easycv
print(easycv.__file__)
/home/pai/lib/python3.6/site-packages/easycv/__init__.py
!python -m easycv.tools.train litehrnet_30_coco_384x288.py --work_dir work_dir/pose/litehrnet_30_coco

模型导出

# 查看训练产生的pt文件
! ls  work_dir/pose/litehrnet_30_coco/*pth
work_dir/pose/litehrnet_30_coco/CoCoPoseTopDownEvaluator_AP_best.pth
work_dir/pose/litehrnet_30_coco/epoch_10.pth
! python -m easycv.tools.export  litehrnet_30_coco_384x288.py work_dir/pose/litehrnet_30_coco/CoCoPoseTopDownEvaluator_AP_best.pth work_dir/pose/litehrnet_30_coco/export_best.pth
[2023-02-03 18:20:24,874.874 dsw-16577-67c64db7b-kslkp:6643 INFO utils.py:30] NOTICE: PAIDEBUGGER is turned off.
pose/litehrnet_30_coco_384x288.py
load checkpoint from local path: work_dir/pose/litehrnet_30_coco/CoCoPoseTopDownEvaluator_AP_best.pth

模型预测

  在预测之前、我们还要下载一个目标检测模型,top-Down是直接从单个人体中进行关键点的预测,所以我们需要先将我们输入的图片中的人体先一个个检测出来,然后再一个个人体进行关键点检测模型进行检测关键点

!wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/configs/pose/epoch_300.pt
Will not apply HSTS. The HSTS database must be a regular and non-world-writable file.
ERROR: could not open HSTS store at '/root/.wget-hsts'. HSTS will be disabled.
--2023-02-03 17:54:09--  https://pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com/gl_pp/epoch_300.pt
Resolving pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com (pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com)... 39.98.20.19
Connecting to pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com (pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com)|39.98.20.19|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 36133977 (34M) [application/octet-stream]
Saving to: ‘epoch_300.pt’
epoch_300.pt        100%[===================>]  34.46M  16.3MB/s    in 2.1s    
2023-02-03 17:54:11 (16.3 MB/s) - ‘epoch_300.pt’ saved [36133977/36133977]

下面预测过程中如果出现以下报错,请手动卸载mmdet,至终端运行 pip uninstall mmdet

KeyError: 'YOLOXLrUpdaterHook is already registered in hook'
from PIL import Image
import numpy as np
from easycv.predictors.pose_predictor import TorchPoseTopDownPredictorWithDetector
# 修改output_ckpt指向
pose_model_path = 'work_dir/pose/litehrnet_30_coco/export_best.pth'
detection_model_path = 'epoch_300.pt'
model_path = ','.join((pose_model_path, detection_model_path))
model_config={
                'pose': {
                    'bbox_thr': 0.3,
                    'format': 'xywh'
                },
                'detection': {
                    'model_type': 'TorchYoloXPredictor'
                }
            }
fe = TorchPoseTopDownPredictorWithDetector(model_path=model_path, model_config=model_config)
input_img = 'small_coco/images/000000012754.jpg'
input_data_list = [np.asarray(Image.open(input_img))]
results = fe.predict(input_data_list)[0]
print(results['pose_results'])
print(results['pose_results'][0]['keypoints'].shape)
/home/pai/lib/python3.6/site-packages/easycv/predictors/pose_predictor.py:437: DeprecationWarning: Call to deprecated class TorchYoloXPredictor (Please use YoloXPredictor.).
  detection_model_path, model_config=model_config['detection'])
reparam: 0
load checkpoint from local path: epoch_300.pt
/home/pai/lib/python3.6/site-packages/easycv/datasets/detection/pipelines/mm_transforms.py:1447: DeprecationWarning: pad_val of float type is deprecated now, please use pad_val=dict(img=(114.0, 114.0, 114.0), masks=(114.0, 114.0, 114.0), seg=255) instead.
  f'masks={pad_val}, seg=255) instead.', DeprecationWarning)
/home/pai/lib/python3.6/site-packages/easycv/datasets/detection/pipelines/mm_transforms.py:1447: DeprecationWarning: pad_val of float type is deprecated now, please use pad_val=dict(img=(114.0, 114.0, 114.0), masks=(114.0, 114.0, 114.0), seg=255) instead.
  f'masks={pad_val}, seg=255) instead.', DeprecationWarning)
相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
JSON 监控 算法
TIDE.JS:三维空间数字化渲染引擎
为了满足我们三维空间渲染各个业务的需求,并且提供易用SDK方便第三方开发人员快速搭建自己的应用或平台,我们自研了TIDE.JS——一款组件化、轻量化、高性能、大规模的面向空间数字化应用的渲染引擎。
4136 0
TIDE.JS:三维空间数字化渲染引擎
|
安全 测试技术 API
后端开发中的API设计原则与最佳实践
本文将深入探讨在后端开发中API(应用程序编程接口)设计的基本原则和最佳实践。通过阐述如何构建高效、可扩展且安全的API,帮助开发者提升后端系统的性能和用户体验。不同于传统的摘要,本文无需包含背景介绍,直接进入主题,为读者提供实用的指导。
623 7
|
10月前
|
人工智能 算法 IDE
通义灵码:以AI重塑开发者生产力,解锁智能编程新范式
通义灵码是阿里云推出的一款AI智能编程助手,基于通义大模型打造,深度集成于主流IDE。它不仅提供全场景智能代码生成、对话式开发体验和工程化智能重构等功能,还通过百亿级参数大模型底座、企业级环境适配、私有化部署等优势,重新定义人机协作边界。在真实开发场景中,通义灵码显著提升API开发与算法优化效率,助力开发者从机械劳动转向创造性对话,开启人机协同的新时代。
540 9
|
机器学习/深度学习 人工智能 资源调度
【博士每天一篇文献-算法】连续学习算法之HAT: Overcoming catastrophic forgetting with hard attention to the task
本文介绍了一种名为Hard Attention to the Task (HAT)的连续学习算法,通过学习几乎二值的注意力向量来克服灾难性遗忘问题,同时不影响当前任务的学习,并通过实验验证了其在减少遗忘方面的有效性。
435 12
|
存储 开发框架 .NET
【博士每天一篇文献-综述】A Comprehensive Survey of Continual Learning Theory, Method and Application
本文综述了持续学习的理论基础、方法论和应用实践,探讨了五种主要的解决策略,包括基于回放、架构、表示、优化和正则化的方法,并深入分析了持续学习的不同场景、分类、评价指标以及面临的挑战和解决方案。
871 1
【博士每天一篇文献-综述】A Comprehensive Survey of Continual Learning Theory, Method and Application
|
消息中间件 Linux
Linux IPC(进程间通信)管理:深入解析ipcs和ipcrm命令的用法与示例
在Linux操作系统中,进程间通信(IPC)是实现进程之间数据传递和同步的关键机制。Linux提供了多种IPC方式,如消息队列、信号量和共享内存等。为了优化系统性能与稳定性,及时管理和清理IPC资源非常重要。本文将深入介绍ipcs和ipcrm命令的使用方法,并给出丰富的示例,以帮助读者更好地理解IPC资源管理的实践技巧。
1637 1
|
机器学习/深度学习 运维 算法
【KDD2024】面向集群整体作业运行变慢的异常检测
阿里云计算平台大数据基础工程技术团队主导,与浙江大学合作的论文《Cluster-Wide Task Slowdown Detection in Cloud System》被数据挖掘领域顶会ACM SIGKDD2024接收。论文从新的视角分析云计算平台集群健康状态,实现了基于神经网络的集群作业整体变慢异常定向检测,与SOTA异常检测算法相比平均提升F1 score 5.3%。
|
Web App开发 移动开发 小程序
看我如何让手机秒变扫码枪
为解决无扫码枪问题,作者受到微信小程序“超级扫码枪”启发,决定自制手机扫码到电脑的应用。项目需求是手机扫描条形码或二维码后实时传送到电脑。实现步骤包括:电脑端用Java Swing和Robot模拟键盘输入,手机端H5调用摄像头扫码(借助html5-qrcode库),并通过WebSocket服务将结果发送至电脑。项目源码及演示视频链接提供。
3351 5
|
机器学习/深度学习 自然语言处理 TensorFlow
使用Python实现深度学习模型:序列建模与生成模型的博客教程
【7月更文挑战第2天】 使用Python实现深度学习模型:序列建模与生成模型的博客教程
256 1
|
机器学习/深度学习 算法 C语言
5.2.1 Backbone(特征提取) 5.2.2 Neck(多尺度检测)
这篇文章介绍了YOLOv3目标检测模型中的Backbone(特征提取)部分,详细阐述了使用Darknet53作为骨干网络来提取图像特征的方法,并通过代码示例展示了如何实现Darknet53网络结构以及如何查看不同层级输出特征图的形状,同时还讨论了Neck(多尺度检测)的概念,解释了如何通过特征图的尺寸放大和融合来实现对不同尺寸目标的检测。

热门文章

最新文章