「深度学习一遍过」必修27:基于Mask-RCNN的人体姿态估计的设计与实现

深度学习实践:人体姿态估计与目标检测
本教程介绍了如何使用预训练的深度学习模型进行人体姿态估计和目标检测,包括Mask R-CNN、Keypoint R-CNN和Faster R-CNN。提供了从图像到掩模、关键点和边界框的转换方法,以及绘制结果的实用函数。通过Python代码实现,适用于视频和摄像头输入。

本专栏用于记录关于深度学习的笔记,不光方便自己复习与查阅,同时也希望能给您解决一些关于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。
专栏地址:「深度学习一遍过」必修篇 

目录

项目 GitHub 地址

项目结果展示

项目代码 


项目 GitHub 地址

Classic_model_examples/2017_Mask-RCNN_TargetDetectionAndSegmentation at main · zhao302014/Classic_model_examples · GitHubicon-default.png?t=L892https://github.com/zhao302014/Classic_model_examples/tree/main/2017_Mask-RCNN_TargetDetectionAndSegmentation

项目结果展示

项目代码 

utils.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
# ------------------------------------------------- #
#      作者:赵泽荣
#      时间:2021年9月26日(农历八月二十)
#      个人站点:1.https://zhao302014.github.io/
#              2.https://blog.youkuaiyun.com/IT_charge/
#      个人GitHub地址:https://github.com/zhao302014
# ------------------------------------------------- #
import cv2
import torch
import numpy as np
import torchvision

'''
  创建一个“人体姿态估计器”类
'''
class ConvolutionalPoseMachine(object):
    def __init__(self, pretrained=False):
        # 是否使用 maskrcnn_resnet50_fpn 预训练模型,true 为使用,false 为不使用,默认为 false
        self._maskrcnn = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=pretrained)
        # 是否使用 keypointrcnn_resnet50_fpn 预训练模型,true 为使用,false 为不使用,默认为 false
        self._keypointrcnn = torchvision.models.detection.keypointrcnn_resnet50_fpn(pretrained=pretrained)
        # 是否使用 fasterrcnn_resnet50_fpn 预训练模型,true 为使用,false 为不使用,默认为 false
        self._fasterrcnn = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=pretrained)
        # 如果 GPU 存在,则转为 cuda 运行
        if torch.cuda.is_available():
            self._maskrcnn = self._maskrcnn.cuda()
            self._keypointrcnn = self._keypointrcnn.cuda()
            self._fasterrcnn = self._fasterrcnn.cuda()
        # 将模型转为验证模式
        self._maskrcnn.eval()
        self._keypointrcnn.eval()
        self._fasterrcnn.eval()

    def __call__(self, image, masks=True, keypoints=True, boxs=True):
        # 调用下面定义的 _transform_image 方法传入 image,将 image 转为 tensor 格式
        x = self._transform_image(image)
        # 如果 GPU 存在,则转为 cuda 运行
        if torch.cuda.is_available():
            x = x.cuda()
        # 若 masks 为 True 则进行掩膜操作,否则不执行此语句,默认为 True
        m = self._predict_masks(x) if masks else [None]
        # 若 keypoints 为 True 则进行关键点检测操作,否则不执行此语句,默认为 True
        k = self._predict_keypoints(x) if keypoints else [None]
        # 若 boxes 为 True 则进行关键点检测操作,否则不执行此语句,默认为 True
        b = self._predict_boxes(x) if boxs else [None]
        # 以 “键值对” 形式返回掩膜及关键点检测结果(注:m、k、b 为列表,要获取的是列表里的值,故 “[0]”)
        return {'maskrcnn': m[0], 'keypointrcnn': k[0], 'fasterrcnn': b[0]}

    # 定义转换 image 格式函数
    def _transform_image(self, image):
        # 返回值:将图像由 numpy 格式转为 tensor 格式
        return torchvision.transforms.ToTensor()(image)

    # 定义掩膜预测函数
    def _predict_masks(self, x):
        # 被包含部分不进行梯度计算
        with torch.no_grad():
            # 返回值:
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣仔!最靓的仔!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值