当前位置:网站首页>Pytorch语义分割理解
Pytorch语义分割理解
2022-08-04 05:29:00 【视觉菜鸟Leonardo】
贴出部分pytorch的语义分割代码理解
#读取图片
image =PIL.Image.open("D:\\DataSets\\PascalVOC2012\\VOCdevkit\\VOC2012\\JPEGImages\\2010_003055.jpg")
#图片预处理,转化为0-1之间
image_transf =transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.485,0.456,0.406],
std =[0.229,0.224,0.225])
])
image_tensor =image_transf(image).unsqueeze(0)
output =model(image_tensor)["out"]
#将输出转化为二维图像
outputarg =torch.argmax(output.squeeze(),dim=0).numpy()
outputarg上述代码将图片放入网络模型中,输出图片中每个像素点的预测值,因为有20类,所以输出范围在【0-20】之间,此图片输出结果为:

#对得到的输出结果进行编码
def decode_segmaps(image,label_colors,nc=21):
#函数将输出为2D图像,会将不同的类编码为不同的颜色
r =np.zeros_like(image).astype(np.uint8)
g =np.zeros_like(image).astype(np.uint8)
b =np.zeros_like(image).astype(np.uint8)
print("r:",r)
print("r[0]:",r[0])
for cla in range(0,nc):
idx =image ==cla
r[idx]=label_colors[cla,0]
g[idx] =label_colors[cla,1]
b[idx] =label_colors[cla,2]
"""
print("image:",image)
print("idx:",idx)
print("cla:",cla)
print("r[idx]:",r[idx])
print("g[idx]:",g[idx])
print("b[idx]:",b[idx])
"""
rgbimage =np.stack([r,g,b],axis =2)
# print(rgbimage)
return rgbimage
上述代码令我头疼了老半天,可算是理解了
r =np.zeros_like(image).astype(np.uint8)
g =np.zeros_like(image).astype(np.uint8)
b =np.zeros_like(image).astype(np.uint8)用于生成R、G、B三通道各自与原图片相对应的矩阵

idx =image ==claidx是一个bool变量,true为1,false为0,解释:
image作为一个经过模型预测后输出的图片分类矩阵,其每个数都落在【0-20】之间,
cla作为一个for循环的数值,范围同样是落在【0-20】之间
这里判断image矩阵上的每个数是否与cla相等,如果相等,则代表image图像上的这个像素点的分类就是cla,假设当cla=0时,image的图像分类矩阵为:

此时上面那一部分为0,与cla相等,说明上面一部分的分类类别为0,也就是label对应的“背景”,这一部分的idx为True(对应的为Image图像中为True的像素点的位置),下面的r,g,b会有相对应的值
而下面对应的15与cla不相等,说明这一部分的idx为False,下面的r,g,b为空

r[idx]=label_colors[cla,0]
g[idx] =label_colors[cla,1]
b[idx] =label_colors[cla,2]这里的r[idx]代表的是第几行,label_colors[cla,0]代表第cla类别上的第0通道(r通道)上的灰度值
rgbimage =np.stack([r,g,b],axis =2)np.stack()将上述三元素组合,转化成一个三通道的图像(RGB),输出便为语义分割后的图像。

边栏推荐
- sklearn中的学习曲线learning_curve函数
- 【深度学习21天学习挑战赛】备忘篇:我们的神经网模型到底长啥样?——model.summary()详解
- 简单明了,数据库设计三大范式
- Install dlib step pit record, error: WARNING: pip is configured with locations that require TLS/SSL
- (十五)B-Tree树(B-树)与B+树
- npm install dependency error npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfonpm ERR! errno ENOTFOUND
- 0, deep learning 21 days learning challenge 】 【 set up learning environment
- 动手学深度学习__张量
- flink onTimer定时器实现定时需求
- 【CV-Learning】Object Detection & Instance Segmentation
猜你喜欢

flink问题整理

TensorFlow2 study notes: 7. Optimizer

MySql--存储引擎以及索引

npm install dependency error npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfonpm ERR! errno ENOTFOUND

postgresql 游标(cursor)的使用

MySQL事务详解(事务隔离级别、实现、MVCC、幻读问题)
![[Introduction to go language] 12. Pointer](/img/c8/4489993e66f1ef383ce49c95d78b1f.png)
[Introduction to go language] 12. Pointer
![[CV-Learning] Semantic Segmentation](/img/ad/ff5076495fa68e4bbf3be78f5ac6f2.png)
[CV-Learning] Semantic Segmentation

fill_between in Matplotlib; np.argsort() function

完美解决keyby造成的数据倾斜导致吞吐量降低的问题
随机推荐
SQL练习 2022/7/2
PostgreSQL模式(Schema)
【CV-Learning】图像分类
动手学深度学习_卷积神经网络CNN
Thread 、Handler和IntentService的用法
oracle临时表与pg临时表的区别
flink问题整理
判断字符串是否有子字符串重复出现
Matplotlib中的fill_between;np.argsort()函数
JPEG2jpg
【go语言入门笔记】12、指针
Jupyter Notebook installed library;ModuleNotFoundError: No module named 'plotly' solution.
(五)栈及其应用
Data reading in yolov3 (1)
(十三)二叉排序树
SQl练习 2022/6/29
Kubernetes基本入门-元数据资源(四)
(十五)B-Tree树(B-树)与B+树
win云服务器搭建个人博客失败记录(wordpress,wamp)
图像resize