【解决】Unet训练自己的数据集,预测结果全黑

Unet代码参考:zhixuhao / unet
解决方法参考:U-Net预测自己数据集全黑解决方法

用自己的数据集直接替换源代码内的数据集,训练好模型后预测,结果全黑。。
在这里插入图片描述
原因:
查看数据集中图像的位深
在这里插入图片描述

参考的代码内所需数据集格式是.png,位深为8,所以要把自己数据集图片的位深也改为8(灰度化)

先把测试图像改为8位,用模型预测一下,还是全黑的话再试试:改训练集重新训练模型
在这里插入图片描述
附:使用opencv批量灰度化图片的代码:

import os
import glob
import cv2

def togrey(img,outdir):
    src = cv2.imread(img) 
    try:
        dst = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
        cv2.imwrite(os.path.join(outdir,os.path.basename(img)), dst)
    except Exception as e:
        print(e)

for file in glob.glob('D:/文件夹路径/test24/*.png'):  
    togrey(file,'D:/文件夹路径/test8/')

结果:
loss: 0.1328 ( lr = 1e-4 ,epoch =5)

在这里插入图片描述
修改了参数重新训练后
loss : 0.0531 (lr = 1e-5 , epoch=10)
在这里插入图片描述
再加一个阙值处理
这里有批量阙值处理的代码:

import cv2
import numpy as np
import os

imgdir=r'D:/XXX/00'#原图片文件夹
outdir = r'D:/XXX/11'#输出的文件夹

def Threshold(imgpath):
      img=cv2.imread(imgpath)
      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
      img255 = np.zeros_like(gray, dtype='uint8')
      for i in range(gray.shape[0]):
            for j in range(gray.shape[1]):
                if gray[i, j] > 190: #自己定
                      img255[i, j] = 255
      return img255
     
 filelist=os.listdir(imgdir)
 for item in filelist:
       if item.endswith('_predict.png'):#这里网络输出的文件名,格式为'0_predict.png'
             imgpath = imgdir + os.sep + item
             #print(imgpath)
             dst=Threshold(imgpath)
             outfilepath=os.path.join(outdir, os.path.basename(item))
             cv2.imwrite(outfilepath, dst)

                

最终:

在这里插入图片描述 在这里插入图片描述

  • 15
    点赞
  • 168
    收藏
    觉得还不错? 一键收藏
  • 39
    评论
你可以使用UNet训练自己的数据集UNet是一种用于图像分割任务的深度学习架构,广泛应用于医学图像分割领域。 以下是一个基本的步骤指南来训练UNet模型: 1. 收集并准备数据集:收集相关的图像数据,并将其划分为训练集和验证集。确保你的数据集包含有标注的图像,即每个像素都有相应的标签。 2. 数据预处理:对于图像分割任务,通常需要将图像和标签进行预处理。这可能包括调整图像大小、对图像进行归一化、添加数据增强等。 3. 构建UNet模型:使用深度学习框架(如TensorFlow、PyTorch)构建UNet模型。UNet模型由编码器和解码器部分组成,可以通过堆叠卷积层、池化层和上采样层来实现。 4. 定义损失函数和优化器:常见的损失函数包括交叉熵损失函数和Dice损失函数,用于衡量预测结果与真实标签之间的差异。选择合适的优化器(如Adam、SGD)来更新模型参数。 5. 训练模型:使用训练集数据对UNet模型进行训练。将输入图像传入模型,得到预测结果,与真实标签进行比较,计算损失值,并通过反向传播算法更新模型参数。重复这个过程多个epoch,直到模型收敛。 6. 评估和验证:使用验证集数据对训练好的模型进行评估和验证。计算评估指标(如准确率、召回率、F1分数等)来衡量模型的性能。 7. 预测:使用训练好的UNet模型对新的图像进行预测。将图像输入模型,得到预测结果,并根据需要对结果进行后处理(如阈值处理、连通域分析等)。 请注意,以上仅是一个基本的步骤指南。根据你的具体任务和数据集特点,可能还需要进一步调整和优化模型架构、损失函数、数据预处理等。
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值