TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

这篇具有很好参考价值的文章主要介绍了TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

***************************************************

码字不易,收藏之余,别忘了给我点个赞吧!

***************************************************

---------Start

官方代码:https://github.com/Beckschen/TransUNet

目的:训练5个类别的汽车部件分割任务(测试在另一篇博客中)

CSDN数据集免费下载

实现效果:

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

1. github下载代码,并解压。

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

项目里的文件可能跟你下载的不一样,不急后面会讲到!

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

2. 配置数据集(尽最大努力还原官方数据集的格式)。

通常自己手上的数据集分images和labels文件夹,分别存放着原始图像和对应的mask图像,如下图所示; mask图像中的像素有0,1,2,3,4 分别代表背景,车身,轮子,车灯,窗户,一共五个类别,所以这里显示全黑色,肉眼看不出差别!通过阅读官方读取数据的代码,我们需要将一张图像和其对应的标签合并转化成一个.npz文件.

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
官方数据集格式,data文件夹,Synapse文件夹,test_vol_h5文件夹,train_npz文件夹手动创建!
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

转化数据集的代码如下,会将images中的图像和labels中的标签生成一个.npz文件。

def npz():
    #图像路径
    path = r'G:\dataset\car-segmentation\train\images\*.png'
    #项目中存放训练所用的npz文件路径
    path2 = r'G:\dataset\Unet\TransUnet-ori\data\Synapse\train_npz\\'
    for i,img_path in enumerate(glob.glob(path)):
    	#读入图像
        image = cv2.imread(img_path)
        image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
        #读入标签
        label_path = img_path.replace('images','labels')
        label = cv2.imread(label_path,flags=0)
		#保存npz
        np.savez(path2+str(i),image=image,label=label)
        print('------------',i)

    # 加载npz文件
    # data = np.load(r'G:\dataset\Unet\Swin-Unet-ori\data\Synapse\train_npz\0.npz', allow_pickle=True)
    # image, label = data['image'], data['label']

    print('ok')

生成的文件在 data\Synapse\train_npz文件夹中,如下图,也可以自己定义生成的路径,然后把文件复制到data\Synapse\train_npz文件中。

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
data\Synapse\train_npz文件夹中存放的是训练集样本,按照同样的方式生成测试集样本,存放在data\Synapse\test_vol_h5文件夹中。
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
我的训练集203个样本,测试集3个样本。npz文件生成完成之后,找到train.txt和test_vol.txt,手动将文件里面的内容清空,split_data.py这个文件直接无视。自己写一个函数读取train_npz中所有的文件名称,然后将文件名称写入train.txt文件,一个名称一行,如下图所示。同理可完成test_vol.txt文件制作。
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
至此,数据集制作完毕!!!代码会先去train.txt文件中读取训练样本的名称,然后根据名称再去train_npz文件夹下读取npz文件。所以每一步都很重要,必须正确!

3. 下载预训练权重

官方下载地址

CSDN下载地址[推荐]

进入网站后,点击imagenet21k文件夹。
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
下载这个权重文件即可。
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
手动创建如下多个文件夹,存放刚刚下载完毕的权重,注意名称跟我的保持一致!
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
至此,预训练权重已下载完毕。

4. 修改读取文件的方法

找到datasets/dataset_synapse.py文件中的Synapse_dataset类,修改__getitem__函数。

 def __getitem__(self, idx):
        if self.split == "train":
            slice_name = self.sample_list[idx].strip('\n')
            data_path = self.data_dir+"/"+slice_name+'.npz'
            data = np.load(data_path)
            image, label = data['image'], data['label']
        else:
            slice_name = self.sample_list[idx].strip('\n')
            data_path = self.data_dir+"/"+slice_name+'.npz'
            data = np.load(data_path)
            image, label = data['image'], data['label']
            image = torch.from_numpy(image.astype(np.float32))
            image = image.permute(2,0,1)
            label = torch.from_numpy(label.astype(np.float32))
        sample = {'image': image, 'label': label}
        if self.transform:
            sample = self.transform(sample)
        sample['case_name'] = self.sample_list[idx].strip('\n')
        return sample

找到datasets/dataset_synapse.py文件中的RandomGenerator类,修改__call__函数。

    def __call__(self, sample):
        image, label = sample['image'], sample['label']

        if random.random() > 0.5:
            image, label = random_rot_flip(image, label)
        elif random.random() > 0.5:
            image, label = random_rotate(image, label)
        x, y,_ = image.shape
        if x != self.output_size[0] or y != self.output_size[1]:
            image = zoom(image, (self.output_size[0] / x, self.output_size[1] / y,1), order=3)  # why not 3?
            label = zoom(label, (self.output_size[0] / x, self.output_size[1] / y), order=0)
        image = torch.from_numpy(image.astype(np.float32))
        image = image.permute(2,0,1)
        label = torch.from_numpy(label.astype(np.float32))
        sample = {'image': image, 'label': label.long()}
        return sample

至此,数据读取的部分已经修改完毕!

5. 配置训练参数

认真检查各个参数是否正确,这里的路径都是 ‘./’(当前目录下),不是"…/",训练时,batch_size通常大于1,我这里设置有误!类别数可根据你的任务定!

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
图片大小设置,越大越耗显存。
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

6. 修改trainer.py文件

设置trainer.py文件中的DataLoader函数中的num_workers=0
TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

至此,所有代码修改完毕!文章来源地址https://www.toymoban.com/news/detail-442595.html

总结:以上修改内容针对彩色图像的分割任务, 由于仅文字表述某些操作存在局限性,故只能简略应答,有任何问题可下方留言评论。

到了这里,关于TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度图与RGB彩色图的对准(内附Python代码)

    在使用RealSense深度相机前,必须把深度相机和RGB相机 对准 了使用。。。不然会导致采集到的图像不对齐(如下图所示):             左边是RGB图像,右边是深度图像。  关于RealSense相机的校准,网上已经有了许多教程,这里就不再赘述。本文主要内容是如何处理 已采集

    2024年02月08日
    浏览(51)
  • yolov8代码梳理 训练自己的数据 最终版

    最开始为了检测不规则的麻包袋,所以采用了目标检测。yolov3,fasterrcnn,ssd。这种矩形框还是可以用。后面检测的物体变成了规则的纸箱,我们还用目标检测发现,没有旋转角度,因为箱子的摆放不是正的。只能通过opencv的minarea去找到最小矩形框去寻找角度。但是opencv的方

    2024年02月12日
    浏览(33)
  • InternImage segmentation部分代码复现及训练自己的数据集(一)

    所谓“复现”,不过是跑通了官方的代码,以下仅为个人的一些经验和理解,欢迎指正。 (其实仅作为个人学习使用,也欢迎交流) 首先贴出官方文献和代码: 官方文献:InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions,链接:InternImage: Exploring Large-Sca

    2024年02月14日
    浏览(30)
  • 手写数学公式识别领域最新论文CAN代码梳理,以及用自己的数据集训练

    Counting-Aware Network(CAN)-手写数学公式识别网络是好未来与白翔团队一起发布的一篇2022年的被ECCV收录的论文,该论文旨在缓解目前大部分基于注意力机制的手写数学公式识别算法在处理较长或者空间结构较复杂的数学公式时,容易出现的注意力不准确的情况。该论文通过将符号

    2024年02月07日
    浏览(24)
  • U2Net、U2NetP分割模型训练---自定义dataset、训练代码训练自己的数据集

    前言 博客很久没有更新了,今天就来更新一篇博客吧,哈哈; 最近在做图像分割相关的任务,因此,写这么一篇博客来简单实现一下分割是怎么做的,内容简单,枯燥,需要耐心看,哈哈; 博客的内容相对简单,比较适合刚接触分割的同学参考学习(这篇博客在算法训练上

    2024年02月05日
    浏览(26)
  • 彩色图像灰度化 (RGB ⇒ Gray )(RGB ⇒ YUV)(Verilog)

    简介:         把一个彩色图像,也称为 RGB(红,绿,蓝)图像转化为灰度图像的行为称为彩色图像灰度化处理。也就是由原来的三个通道 RGB 转化为一个通道 YCrCb(从三个亮度值转换为一个亮度值), 也即 YUV(亮度,饱和度)的过程。常见的 24 位深度彩色图像 RGB888 中的每

    2024年01月25日
    浏览(34)
  • RGB彩色图、Depth深度图

    💦彩色图,深度图——》信息缺乏。如,颜色相近导致位置信息丢失 💦深度图——》相近深度的物体,因为颜色或纹理的丢失,导致难区分 深度图并不可以直接使用, 因为深度图只能反映出了物体在三维空间中一个方向上的信息,即拍摄场景中各个点到相机的距离。这个

    2024年02月02日
    浏览(29)
  • opencv 05 彩色RGB像素值操作

    RGB 模式的彩色图像在读入 OpenCV 内进行处理时,会按照行方向依次读取该 RGB 图像的 B 通道、G 通道、R 通道的像素点,并将像素点以行为单位存储在 ndarray 的列中。例如, 有一幅大小为 R 行×C 列的原始 RGB 图像,其在 OpenCV 内以 BGR 模式的三维数组形式存储, 如图 2-7 所示 可

    2024年02月16日
    浏览(30)
  • RGB空间中的彩色图像分割原理及其python实现

    ⭐️ 为尊重原创性 !转载请注明出处:©️ Sylvan Ding’s Blog 本文论述了基于欧式距离和曼哈顿距离的彩色图像分割算法,并用python实现了各个算法。之后将二者的优势结合,提出了改进后的曼哈顿距离算法:基于 加权曼哈顿距离 的彩色图像分割算法,在分割效果和速度上超

    2023年04月22日
    浏览(37)
  • 【深度学习】在虚拟机Ubuntu中安装Anaconda+pycharm+跑通YOLOv8项目源代码+训练自己的数据集

    因为一些特殊的原因,需要从之前CPU的win跑代码转移到GPU的虚拟机Ubuntu里面去跑,故在此记录一下安装软件和搭建环境的一些步骤,码一下以便以后查看。 因为虚拟机提前安装了英伟达驱动,在此就不赘述驱动程序的安装了。 ps: 如果在终端输入 显示以下即为驱动程序已安

    2024年02月21日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包