当前位置:网站首页>语义分割标签即像素值的巨坑,transforms.ToTensor()的错误使用
语义分割标签即像素值的巨坑,transforms.ToTensor()的错误使用
2022-08-02 03:21:00 【& Tom】
问题:最近使用NEU-Seg数据集来验证模型的有效性,计算iou出现nan值?
前提:NEU-Seg数据集的样本图片时 .jpg 格式,使用cv2直接读取即可, mask图是全黑的,如下图所示:
官方说是用labelme标注的,像素值就是像素的类别(坑也在这!)通过一下代码来检查数据格式:
import numpy as np
from PIL import Image
img = Image.open("E:/All-Project/Other-File/Datset/00001.png") #图像所在位置
img1 = np.array(img)
a=np.unique(img1) # 查看图片内的像素值
print(a)
print(img.mode) # 查看图片模式
运行后输出如下:
可以看到像素值(标签)有0.1,0背景,1是缺陷,可是图片模式是L,也就是灰度图,可是VOC数据集应该是P模式才对,但是L可以直接用cv2读取,更方便了。后来就出现问题, 读取图片转成张量的时候,经过了transforms.ToTensor()处理, 直接训练网络,损失照常掉, 可是! 计算IOU全部变成nan了。计算求代码:
intersection = np.logical_and(img_mask, img_pred)
union = np.logical_or(img_mask, img_pred)
iou_score = np.sum(intersection) / np.sum(union)
nan了,我接受不了这个现实啊!我检查了我的模型代码,混淆矩阵代码都木有毛病啊!
经过我两周的debug终于发现了些端倪:
1.用cv2读取全黑的mask图,标签显示正常,[0, 1, 2, 3](neu数据集三类缺陷加背景)正常
2.获取的mask是narry格式,要转成张量 ,照常用了transforms.ToTensor()处理, 标签值变了!1变成了0.0017,这是啥玩意!问题就在这,接下来是解决办法:
0.transforms.ToTensor()这个函数首先会将数据归到[0, 1]区间内,可是标签就是像素值并不需要这么处理
办法:
用 torch.from_numpy(mask).type(torch.FloatTensor) 处理一下,标签值不变!!!!
就这一句就解决了,我花了两周,哭死
致谢:
感谢东北大学宋克臣老师的无私奉献,将数据集公开,网址:
http://faculty.neu.edu.cn/songkechen/zh_CN/zhym/263269/list/index.htm
宋老师的论文值得我学习! 向老师致敬!
声明:如使用老师数据集发表论文,应按照网站要求进行引用老师文章!(我现在只在验证阶段,如有不妥,请指正!)
边栏推荐
- How to check whether a table is locked in mysql
- Scaffolding installation
- AttributeError: Can't get attribute 'SPPF' on
- 科研试剂DMPE-PEG-Mal 二肉豆蔻酰磷脂酰乙醇胺-聚乙二醇-马来酰亚胺
- 手把手带你 Unity 入门之从零创建一个时钟(GameObjects 与 Scripts)
- 知识问答与知识会话的区别
- MySQL分页查询的5种方法
- 基本运算符
- (Reposted) The relationship between hashcode and equals
- day11--shell脚本
猜你喜欢
DSPE-PEG-PDP,DSPE-PEG-OPSS,磷脂-聚乙二醇-巯基吡啶供应,MW:5000
基于libmodbus库实现modbus TCP/RTU通信
Scaffolding installation
RHCSA第三天
UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the index ing argu
亚马逊卖家怎么提升转化率
Cloud server installation and deployment of Nacos 2.0.4 version
Keil development environment installation tutorial
【深度学习】从LeNet-5识别手写数字入门深度学习
LeetCode:1374. 生成每种字符都是奇数个的字符串【签到题】
随机推荐
青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”
DSPE-PEG-PDP,DSPE-PEG-OPSS,磷脂-聚乙二醇-巯基吡啶供应,MW:5000
【深度学习】从LeNet-5识别手写数字入门深度学习
Flexbox flex property
oracle内连接和外连接
UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the index ing argu
【博学谷学习记录】超强总结,用心分享 | 软件测试 接口测试基础
通过PS 2021 将网页图标抠下来
MySQL分页查询的5种方法
SOCKS5
getattr()函数解析
MySQL中JOIN的用法
排序学习笔记(二)堆排序
Deveco studio 鸿蒙app访问网络详细过程(js)
源码构建LAMP环境-1
(forwarded) HashCode summary (2)
知识工程作业2:知识工程相关领域介绍
2022ACM夏季集训周报(五)
[详解C语言]一文带你玩转C语言小游戏---扫雷
sh: 1: curl: not found