当前位置:网站首页>语义分割标签即像素值的巨坑,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
宋老师的论文值得我学习! 向老师致敬!
声明:如使用老师数据集发表论文,应按照网站要求进行引用老师文章!(我现在只在验证阶段,如有不妥,请指正!)
边栏推荐
猜你喜欢

Freeswitch操作基本配置

Redis简单学习笔记

LeetCode:746. 使用最小花费爬楼梯【动态规划】

APK的安装过程分析 PMS包管理器

Daily practice------There are n integers, so that the previous numbers are moved back m positions in order, and the last m numbers become the first m numbers

MySQL8.0安装教程,在Linux环境安装MySQL8.0教程,最新教程 超详细

亚马逊卖家怎么提升转化率

磷脂-聚乙二醇-醛基 DSPE-PEG-Aldehyde DSPE-PEG-CHO MW:5000

DSPE-PEG-DBCO 磷脂-聚乙二醇-二苯并环辛炔 一种线性杂双官能聚乙二醇化试剂

mysql中如何查看表是否被锁
随机推荐
@Autowired注解的使用
基本运算符
Mysql8.0安装教程
源码构建LAMP环境-1
debian 10 nat 与路由转发
redis进行持久化时,有新的写操作将如何解决——写时复制
【程序人生】做了多年的运维,靠什么转行拿下12K+年终奖的薪资?
HCIP-第十一天-MPLS+BGP
周日数据库作业
化学试剂磷脂-聚乙二醇-羟基,DSPE-PEG-OH,DSPE-PEG-Hydroxyl,MW:5000
Good Key, Bad Key (thinking, temporary exchange, classic method)
CV-Model [4]: MobileNet v3
day11--shell脚本
Monaco Editor 的基本用法
线性代数学习笔记1:何为线性代数
删库后!除了跑路还能干什么?
Redis笔记基础篇:6分钟看完Redis的八种数据类型
About cross-domain issues
赶紧进来!!!教你用C语言写三子棋小游戏
Redis简单学习笔记