【Pytorch神经网络实战案例】27 MaskR-CNN内置模型实现语义分割
1 PyTorch中语义分割的内置模型
在torchvision库下的models\segmentation目录中,找到segmentation.Py文件。该文件中存放着PyTorch内置的语义分割模型。
2 MaskR-CNN内置模型实现语义分割
2.1 代码逻辑简述
将COCO 2017数据集上的预训练模型dceplabv3_resnet101_coco加载到内存,并使用该模型对图片进行语义分割。
2.2 代码实现:MaskR-CNN内置模型实现语义分割
Maskrcnn_resent_Semantic_Segmentation.py
import torch
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
from torchvision import models
from torchvision import transforms
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"# 获取模型,如果本地没有缓存,则下载
model = models.segmentation.deeplabv3_resnet101(pretrained=True) # 调用内置模型,并使用预训练权重进行初始化。
model.eval() # 不然报错 Expected more than 1 value per channel when training, got input size torch.Size# 在图片的数据输入网络之前,对图片进行预处理
transform = transforms.Compose([transforms.Resize(256), # 将图片尺寸调整为256×256transforms.CenterCrop(224), # 中心裁剪成224×224transforms.ToTensor(), # 转换成张量归一化到[0,1]transforms.Normalize( # 使用均值,方差标准化mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])
])def preimg(img): # 定义图片预处理函数if img.mode == 'RGBA': # 兼容RGBA图片ch = 4print('ch', ch)a = np.asarray(img)[:, :, :3]img = Image.fromarray(a)return img# 加载要预测的图片
img = Image.open('./models_2/mask.jpg') # 将图片输入模型,进行预测。
# 模型预测的输出是一个OrderedDict结构。deeplabv3_resnet101模型的图片输入尺寸是[224,224],输出形状是[1,21,224,224],代表20+1(背景)个类别。
plt.imshow(img)
plt.axis('off')
plt.show() # 显示加载图片
im = preimg(img)
# 对输入数据进行维度扩展,成为NCHW
inputimg = transform(im).unsqueeze(0)# 显示用transform转化后的图片
tt = np.transpose(inputimg.detach().numpy()[0],(1,2,0))
plt.imshow(tt.astype('uint8')) # 不然报错:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers)
plt.show()output = model(inputimg) # 将图片输入模型
print("输出结果的形状:",output['out'].shape)
# 去掉批次维度,提取结果。使用argmax函数在每个像素点的21个分类中选出概率值最大的索引,为预测结果。
output = torch.argmax(output['out'].squeeze(), dim=0).detach().cpu().numpy()
resultclass = set(list(output.flat))
print("所发现的分类:",resultclass)
# 所发现的分类.{0,13,15}
# 模型从图中识别出了两个类别的内容。索引值13和15分别对应分类名称“马”和“人”。def decode_segmap(image,nc=21): # 对图片中的每个像素点根据其所属类别进行染色。不同的类别显示不同的颜色。label_colors = np.array([(0, 0, 0), # 定义每个分类对应的颜色(128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128),(0, 128, 128), (128, 128, 128), (64, 0, 0), (192, 0, 0), (64, 128, 0),(192, 128, 0), (64, 0, 128), (192, 0, 128), (64, 128, 128), (192, 128, 128),(0, 64, 0), (128, 64, 0), (0, 192, 0), (128, 192, 0), (0, 64, 128)])r = np.zeros_like(image).astype(np.uint8) # 初始化RGBg = np.zeros_like(image).astype(np.uint8)b = np.zeros_like(image).astype(np.uint8)for l in range(0, nc): # 根据预测结果进行染色idx = image == lprint("idx:",idx)r[idx] = label_colors[l, 0]g[idx] = label_colors[l, 1]b[idx] = label_colors[l, 2]return np.stack([r, g, b], axis=2) # 返回结果rgb = decode_segmap(output)
img = Image.fromarray(rgb)
plt.axis('off') # 显示模型的可视化结果
print("快完了")
plt.imshow(img)
plt.show()
【Pytorch神经网络实战案例】27 MaskR-CNN内置模型实现语义分割相关推荐
- 【Pytorch神经网络实战案例】26 MaskR-CNN内置模型实现目标检测
1 Pytorch中的目标检测内置模型 在torchvision库下的modelsldetecton目录中,找到__int__.py文件.该文件中存放着可以导出的PyTorch内置的目标检测模型. 2 ...
- 【Pytorch神经网络实战案例】21 基于Cora数据集实现Multi_Sample Dropout图卷积网络模型的论文分类
Multi-sample Dropout是Dropout的一个变种方法,该方法比普通Dropout的泛化能力更好,同时又可以缩短模型的训练时间.XMuli-sampleDropout还可以降低训练集和 ...
- 【Pytorch神经网络实战案例】23 使用ImagNet的预训练模型识别图片内容
1 案例基本工具概述 1.1 数据集简介 Imagenet数据集共有1000个类别,表明该数据集上的预训练模型最多可以输出1000种不同的分类结果. Imagenet数据集是目前深度学习图像领域应用得 ...
- 【Pytorch神经网络实战案例】18 最大化深度互信信息模型DIM实现搜索最相关与最不相关的图片
图片搜索器分为图片的特征提取和匹配两部分,其中图片的特征提取是关键.将使用一种基于无监督模型的提取特征的方法实现特征提取,即最大化深度互信息(DeepInfoMax,DIM)方法. 1 最大深度互信信 ...
- 【Pytorch神经网络实战案例】15 WGAN-gp模型生成Fashon-MNST模拟数据
1 WGAN-gp模型生成模拟数据案例说明 使用WGAN-gp模型模拟Fashion-MNIST数据的生成,会使用到WGAN-gp模型.深度卷积GAN(DeepConvolutional GAN,DC ...
- 【Pytorch神经网络实战案例】40 TextCNN模型分析IMDB数据集评论的积极与消极
卷积神经网络不仅在图像视觉领域有很好的效果,而且在基于文本的NLP领域也有很好的效果.TextCN如模型是卷积神经网络用于文本处理方面的一个模型. 在TextCNN模型中,通过多分支卷积技术实现对文本 ...
- 【Pytorch神经网络实战案例】20 基于Cora数据集实现图卷积神经网络论文分类
1 案例说明(图卷积神经网络) CORA数据集里面含有每一篇论文的关键词以及分类信息,同时还有论文间互相引用的信息.搭建AI模型,对数据集中的论文信息进行分析,根据已有论文的分类特征,从而预测出未知分 ...
- 【Pytorch神经网络实战案例】01 CIFAR-10数据集:Pytorch使用GPU训练CNN模版-方法①
import torch import torchvision from torch import nn from torch.utils.tensorboard import SummaryWrit ...
- 【Pytorch神经网络实战案例】02 CIFAR-10数据集:Pytorch使用GPU训练CNN模版-方法②
import torch import torchvision from torch import nn from torch.utils.tensorboard import SummaryWrit ...
最新文章
- oracle根据一张表更新另外一张表
- 如何看待团队合作这件事?
- 世博、城市云和2020
- 好好学python · 元组
- Linux动态库应用
- NDK Socket编程:面向连接的通信(tcp)
- 百万级并发 Node.js也能行
- freebsd下支持LATEX书写数学公式的网站搭建
- SFML 与 VS2015 的安装配置
- 《算法图解》之选择排序
- Python 参数解析(getopt模块)
- 一个html页面最多写多少代码,在多个页面使用同一个HTML片段的代码
- winform窗体界面闪烁解决办法
- 智慧城管系统提高城市综合管理水平
- 浅析地理数据模型发展
- AI上推荐 之 MIND(动态路由与胶囊网络的奇光异彩)
- scheme语言编写执行
- wkhtmltopdf下载pdf有个别字体是乱码
- 微信新版本(6.6.7)功能设计背后的逻辑及需求
- 用Matlab实现猫变虎简单动画
热门文章
- 三次握手的第三个ACK包丢了,会发生什么?
- jsp中%@ % 与% % 与%! %
- Flask爱家租房--城区信息
- matlab如何用代码导入文件_20+行Matlab代码实现文件扫描
- html表格里的超链接点不了,Excel如何添加和取消超链接 Excel超链接打不开是怎么回事...
- tornado学习笔记day05-访问数据库
- Django-session的存放位置
- java.lang.IllegalArgumentException: Does not contain a valid host:port authority: ignorethis
- 第二季3:海思MPP模块与视频缓冲池
- 选购四轴飞行器的部件