利用DEEPLABV3-RESNET101获取人体蒙版

article/2025/10/6 13:46:28

Deeplabv3-ResNet101由具有ResNet-101主干的Deeplabv3模型构成。预训练模型已在Pascal VOC数据集中存在的20个类别的COCO train2017子集中进行了训练。

这里利用Deeplabv3-ResNet101来进行语义分割获取人体蒙版,代码如下:

from torchvision import models
from PIL import Image
import matplotlib.pyplot as plt
import torch
import torchvision.transforms as T
import numpy as np
import os
import os.path as ospfile_path = '/root/Workspace/origin/vicon_03301_01'base_name = osp.basename(file_path)#vicon_03301_03color_dir = osp.join(file_path, 'Color')#color文件夹
if not osp.exists(color_dir):os.makedirs(color_dir)result_folder = '/root/Workspace/result'
output_folder = osp.join(result_folder, base_name)if not os.path.exists(output_folder):#就是在输出结果的文件夹下创建一个名为vicon_03301_03的文件夹os.makedirs(output_folder)def human_segment(net, path, nc=21):img = Image.open(path)trf = T.Compose([T.ToTensor(),#把一个取值范围是[0,255]的PIL.Image或者shape为(H,W,C)的numpy.ndarray,转换成形状为[C,H,W],取值范围是[0,1.0]的torch.FloadTensorT.Normalize(mean=[0.485, 0.456, 0.406],#把tensor正则化,Normalized_image=(image-mean)/stdstd=[0.229, 0.224, 0.225])])inp = trf(img).unsqueeze(0)#返回一个新的张量,对输入的制定位置插入维度 1out = net(inp)['out']image = torch.argmax(out.squeeze(), dim=0).detach().cpu().numpy()label_colors = np.array([(255, 255, 255),  # 0=background# 1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),# 6=bus, 7=car, 8=cat, 9=chair, 10=cow(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255),# 11=dining table, 12=dog, 13=horse, 14=motorbike, 15=person(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (0, 0, 0),# 16=potted plant, 17=sheep, 18=sofa, 19=train, 20=tv/monitor(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)])r = np.zeros_like(image).astype(np.uint8)g = np.zeros_like(image).astype(np.uint8)b = np.zeros_like(image).astype(np.uint8)# 每个像素对应的类别赋予相应的颜色for l in range(0, nc):idx = image == lr[idx] = label_colors[l, 0]g[idx] = label_colors[l, 1]b[idx] = label_colors[l, 2]# 这个就是语义分割的彩色图rgb = np.stack([r, g, b], axis=2)#堆栈save_image = osp.join(output_folder, osp.basename(path))plt.imsave(save_image, rgb)dlab = models.segmentation.deeplabv3_resnet101(pretrained=1).eval()for filename in os.listdir(color_dir):  #包含想要划分的图像的文件夹image_dir = osp.join(color_dir, filename)human_segment(dlab, image_dir)

实验效果

输入图片:
原始图片
输出图片:
得到的人体蒙版


http://chatgpt.dhexx.cn/article/kBmYeHuk.shtml

相关文章

PaddlePaddle2.0利用ResNet101预训练模型实现蝴蝶分类

PaddlePaddle2.0利用ResNet101预训练模型实现蝴蝶分类 该项目来自于AI Studio上的公开项目,这里记录我的学习笔记,把一些细节的地方具体说明一下,并且提供完整的程序代码和分步说明,供大家本地PaddlePaddle2.0环境或者AI Studio上…

PyTorch实现的ResNet50、ResNet101和ResNet152

PyTorch实现的ResNet50、ResNet101和ResNet152 PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks import torch import torch.nn as nn import torchvision import numpy as npprint("PyTorch Version: ",torch.__version__) print("Torchvisio…

Pytorch实现ResNet50网络结构,包含ResNet18,ResNet34,ResNet50,ResNet101,ResNet152

创建各版本的ResNet模型,ResNet18,ResNet34,ResNet50,ResNet101,ResNet152 原文地址: https://arxiv.org/pdf/1512.03385.pdf 论文就不解读了,大部分解读都是翻译,看的似懂非懂,自己…

mindspore-ResNet101使用GPU进行训练时报错

multiprocessing.context.TimeoutError RuntimeError: mindspore/ccsrc/backend/session/kernel_build_client.h:109 Response] Response is empty 1、修改resnet101_imagenet2012_config.yaml中的训练集路径,更改类数量以适应新数据集 2、在models/official/cv/r…

官方代码 Deeplab v3+ resnet101 做backbone

大年初一我居然在更博客。今年过年由于病毒横行,没有串门没有聚餐,整个人闲的没事干。。。医生真是不容易,忙得团团转还有生命危险,新希望他们平安。 本篇不属于初级教程。如果完全看不懂请自行谷歌或搜索作者博客。 deeplab官方…

基于pytorch+Resnet101加GPT搭建AI玩王者荣耀

本源码模型主要用了SamLynnEvans Transformer 的源码的解码部分。以及pytorch自带的预训练模型"resnet101-5d3b4d8f.pth" 本资源整理自网络,源地址:https://github.com/FengQuanLi/ResnetGPT 注意运行本代码需要注意以下几点 注意!…

resnet101网络_网络标准101

resnet101网络 让我告诉你一个故事。 一旦我为我们的设计系统构建了另一个日期选择器组件。 它由文本输入和带有日历的弹出窗口组成,单击可显示日历。 然后,可以在外部单击或选择日期来关闭弹出窗口。 外部点击逻辑的大多数实现都是通过将实际点击侦听器…

基于ResNet101实现猴痘病毒识别任务

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master

使用VGG16作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master的详细步骤→Windows10Faster-RCNN-TensorFlow-Python3-masterVOC2007数据集。 如果使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master,在之前使用VGG16作为预训练模型的训练…

TensorRT学习笔记--基于FCN-ResNet101推理引擎实现语义分割

目录 前言 1--Pytorch模型转换为Onnx模型 2--Onnx模型可视化及测试 2-1--可视化Onnx模型 2-2--测试Onnx模型 3--Onnx模型转换为Tensor RT推理模型 4--基于Tensor RT使用推理引擎实现语义分割 前言 基于Tensor RT的模型转换流程:Pytorch → Onnx → Tensor RT…

迁移学习之ResNet50和ResNet101(图像识别)

文章目录 1.实现的效果:2.主文件TransorResNet.py: 1.实现的效果: 实际的图片: (1)可以看到ResNet50预测的前三个结果中第一个结果为:whippet(小灵狗) (2)Re…

Mask-RCNN(2)Resnet101

1. 对应着图像中的CNN部分,其对输入进来的图片有尺寸要求,需要可以整除2的6次方。在进行特征提取后,利用长宽压缩了两次、三次、四次、五次的特征层来进行特征金字塔结构的构造。Mask-RCNN使用Resnet101作为主干特征提取网络 2.ResNet101有…

Pytorch-预训练网络

预训练网络 我们可以把预训练的神经网络看作一个接收输入并生成输出的程序,该程序的行为是由神经网络的结构以及它在训练过程中所看到的样本所决定的,即期望的输入-输出对,或者期望输出应该满足的特性。我们可以在Pytorch中加载和运行这些预…

基于ResNet-101深度学习网络的图像目标识别算法matlab仿真

目录 1.算法理论概述 1.1、ResNet-101的基本原理 1.2、基于深度学习框架的ResNet-101实现 1.3网络训练与测试 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 介绍ResNet-101的基本原理和数学模型,并解释其在图…

【深度学习】ResNet网络详解

文章目录 ResNet参考结构概况conv1与池化层残差结构Batch Normalization总结 ResNet 参考 ResNet论文: https://arxiv.org/abs/1512.03385 本文主要参考视频:https://www.bilibili.com/video/BV1T7411T7wa https://www.bilibili.com/video/BV14E411H7U…

【使用Pytorch实现ResNet网络模型:ResNet50、ResNet101和ResNet152】

使用Pytorch实现Resnet网络模型:ResNet50、ResNet101和ResNet152 介绍什么是 ResNet?ResNet 的架构使用Pytorch构建 ResNet网络 介绍 在深度学习和计算机视觉领域取得了一系列突破。尤其是随着非常深的卷积神经网络的引入,这些模型有助于在图…

使用PyTorch搭建ResNet101、ResNet152网络

ResNet18的搭建请移步:使用PyTorch搭建ResNet18网络并使用CIFAR10数据集训练测试 ResNet34的搭建请移步:使用PyTorch搭建ResNet34网络 ResNet34的搭建请移步:使用PyTorch搭建ResNet50网络 参照我的ResNet50的搭建,由于50层以上几…

Java中的数组

数组 1.什么是数组 数组就是存储相同数据类型的一组数据,且长度固定 基本数据类型4类8种:byte/char/short/int/long/float/double/boolean 数组,是由同一种数据类型按照一定的顺序排序的集合,给这个数组起一个名字。是一种数据类型&#…

java输出数组(java输出数组)

多维数组在Java里如何创建多维数组? 这从第四个例子可以看出,它向我们演示了用花括号收集多个new表达式的能力: Integer[][] a4 { { new Integer (1), new Integer (2)}, { new Integer (3), new Integer (4)}, { new Integer (5), new…

java怎么输出数组(Java怎么给数组赋值)

Java中数组输出的三种方式。第一种方式,传统的for循环方式,第二种方式,for each循环,  第三种方式,利用Array类中的toString方法. 定义一个int类型数组,用于输出 int[] array={1,2,3,4,5}; 第一种方式,传统的for循环方式 for(int i=0;i {System.out.println(a[i]); } 第…