深度学习训练标签24位的mask.png转换成8位的png

在复现一个深度学习框架时,遇到了我自己标注的标签图作者的标签图不一致问题导致模型学习的交叉熵损失迅速降为0,这里的原因是作者代码中的label图使用的是8位单通道的灰度图,我标注完之后生成的是24为的RGB图像,因此这里需要修改label图的类型

错误原因(大家可看可不看,这里仅供自己后续看,转换代码在后边)

作者的图,原图黑色,经过线性拉伸变为这样的图(在envi里查看的)
在这里插入图片描述
我的图
在这里插入图片描述
打开一张进行拉伸,此处以为和作者的图是一个类型的,就放入模型开始训练自己的数据集

在这里插入图片描述

开始训练,训练过程中交叉熵损失(loss_ce)很快降为0(其实在200多次迭代就有0.000的结果)
在这里插入图片描述
Loss_ce代表交叉熵损失,测量模型的预测概率与目标标签的真实分布之间的差异,查了一下说模型训练良好,模型已经学会了以非常高的置信度对训练数据进行准确分类。表明该模型有效地捕获了训练数据中的模式和关系。”(由于新手小白,还以为模型训练的很好,此处很智障)

随后进行测试:结果test预测图为全黑,black是背景的结果,可以看出只检测出背景,1类别的精确度和召回率为空或为0
在这里插入图片描述

问题

模型对我的训练标签没有正确读相应的0和1标签,模型识别的只是一张黑色的图,因此模型什么也不用学,所以交叉熵损失很快降为0。问题出在训练标签上。

于是从标签开始找问题所在

作者的标签,用python读如作者的label图,是这样的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
而我的图是这样的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里可以看到它的详细信息,mode=“L”代表作者用的是灰度图,而我的是RGB,位深度和通道数以及标签名都不一样,所以都需要修改。(不懂位深度的可以自己去查,显示的色彩会不一样)

24位深转换成8位图像

根据需要只需要改成自己的路径即可

#将24位的图像转换成8位的图像
import os
from PIL import Image
def convert_image(input_path, output_path):
    """Converts a 24-bit RGB image to an 8-bit grayscale image."""
    image = Image.open(input_path)
    grayscale_image = image.convert('L')
    grayscale_image.save(output_path)
input_dir = r'your input path'
output_dir = r'your output path'
for filename in os.listdir(input_dir):
    if filename.endswith('.jpg') or filename.endswith('.png'):
        input_path = os.path.join(input_dir, filename)
        output_filename = os.path.splitext(filename)[0] + '.png'  # Replace extension with '.png' for grayscale
        output_path = os.path.join(output_dir, output_filename)
        convert_image(input_path, output_path)

转换成功!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值