Unet如何制作自己的训练集

这篇博客介绍了如何利用LabelMe工具制作自定义的UNET训练数据集。首先在CMD中激活虚拟环境并安装LabelMe,然后打开软件对图像进行标注。完成后,通过Python脚本将JSON文件转换为图像和对应的像素标签。注意,`classes`变量应根据实际图像内容进行调整。最终,你将得到用于UNET训练的图像和标签文件。
摘要由CSDN通过智能技术生成

最近一直在学unet,所以分享一个如何做一个自己想要的训练集,而不是去从网上找的博客。
首先打开cmd
在这里插入图片描述
输入你自己的虚拟环境,我是在base直接把所有环境都安好了,就不想在创建虚拟环境在安装了。
然后

pip install labelme==3.16.7

在这里插入图片描述
下载好了之后直接输入labelme
在这里插入图片描述

这就是打开后的样子
然后对所选择的图形进行描图,就像这样
在这里插入图片描述
最后他会在你的指定文件下生成一个josn文件,你现在还不能直接打开这个josn文件,需要运行代码

import argparse
import base64
import json
import os
import os.path as osp
import warnings

import numpy as np
import PIL.Image
import yaml
from labelme import utils


if __name__ == '__main__':
    jpgs_path = "datasets/JPEGImages"
    pngs_path = "datasets/SegmentationClass"
    classes = ["_background_", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow",
               "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train",
               "tvmonitor"]
    # classes = ["_background_","cat","dog"]

    count = os.listdir("./datasets/before/")
    for i in range(0, len(count)):
        path = os.path.join("./datasets/before", count[i])

        if os.path.isfile(path) and path.endswith('json'):
            data = json.load(open(path))

            if data['imageData']:
                imageData = data['imageData']
            else:
                imagePath = os.path.join(os.path.dirname(path), data['imagePath'])
                with open(imagePath, 'rb') as f:
                    imageData = f.read()
                    imageData = base64.b64encode(imageData).decode('utf-8')

            img = utils.img_b64_to_arr(imageData)
            label_name_to_value = {'_background_': 0}
            for shape in data['shapes']:
                label_name = shape['label']
                if label_name in label_name_to_value:
                    label_value = label_name_to_value[label_name]
                else:
                    label_value = len(label_name_to_value)
                    label_name_to_value[label_name] = label_value

            # label_values must be dense
            label_values, label_names = [], []
            for ln, lv in sorted(label_name_to_value.items(), key=lambda x: x[1]):
                label_values.append(lv)
                label_names.append(ln)
            assert label_values == list(range(len(label_values)))

            lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)

            PIL.Image.fromarray(img).save(osp.join(jpgs_path, count[i].split(".")[0] + '.jpg'))

            new = np.zeros([np.shape(img)[0], np.shape(img)[1]])
            for name in label_names:
                index_json = label_names.index(name)
                index_all = classes.index(name)
                new = new + index_all * (np.array(lbl) == index_json)

            utils.lblsave(osp.join(pngs_path, count[i].split(".")[0] + '.png'), new)
            print('Saved ' + count[i].split(".")[0] + '.jpg and ' + count[i].split(".")[0] + '.png')

在这里说一下classes这一行代码,这个是需要你根据你所处理图像里面的内容而定的。这里需要稍做修改。

最后,你所需要的unet训练集就出来了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值