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

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

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

---------Start

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

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

CSDN数据集免费下载

实现效果:

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


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

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

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



官方数据集格式,data文件夹,Synapse文件夹,test_vol_h5文件夹,train_npz文件夹手动创建!

转化数据集的代码如下,会将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)#保存npznp.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文件中。


data\Synapse\train_npz文件夹中存放的是训练集样本,按照同样的方式生成测试集样本,存放在data\Synapse\test_vol_h5文件夹中。

我的训练集203个样本,测试集3个样本。npz文件生成完成之后,找到train.txt和test_vol.txt,手动将文件里面的内容清空,split_data.py这个文件直接无视。自己写一个函数读取train_npz中所有的文件名称,然后将文件名称写入train.txt文件,一个名称一行,如下图所示。同理可完成test_vol.txt文件制作。


至此,数据集制作完毕!!!代码会先去train.txt文件中读取训练样本的名称,然后根据名称再去train_npz文件夹下读取npz文件。所以每一步都很重要,必须正确!

3. 下载预训练权重

官方下载地址

CSDN下载地址[推荐]

进入网站后,点击imagenet21k文件夹。

下载这个权重文件即可。

手动创建如下多个文件夹,存放刚刚下载完毕的权重,注意名称跟我的保持一致!

至此,预训练权重已下载完毕。

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.shapeif 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,我这里设置有误!类别数可根据你的任务定!


图片大小设置,越大越耗显存。


6. 修改trainer.py文件

设置trainer.py文件中的DataLoader函数中的num_workers=0

至此,所有代码修改完毕!

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

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

  1. SwinUnet官方代码训练自己数据集(单通道灰度图像的分割)

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

  2. HImage转换为Bitmap的终极解决方案(C#)彩色三通道图像

    HImage转换为Bitmap的终极解决方案(C#)彩色三通道图像 时隔一年多,终于把这个问题解决掉了.现在回头看,这个问题其实并不复杂,当初处理不了,完全是因为缺乏经验,多看多写,可能就会在处理其他 ...

  3. 使用pytorch版faster-rcnn训练自己数据集

    使用pytorch版faster-rcnn训练自己数据集 引言 faster-rcnn pytorch代码下载 训练自己数据集 接下来工作 参考文献 引言 最近在复现目标检测代码(师兄强烈推荐FPN, ...

  4. 视频教程-DeepLabv3+图像语义分割实战:训练自己的数据集-计算机视觉

    DeepLabv3+图像语义分割实战:训练自己的数据集 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 ...

  5. 汇总 | 深度学习中图像语义分割基准数据集详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 汇总图像语义分割那些质量最好的数据集与常用benchmark数据集 ...

  6. Pytorch:图像语义分割-FCN, U-Net, SegNet, 预训练网络

    Pytorch: 图像语义分割-FCN, U-Net, SegNet, 预训练网络 Copyright: Jingmin Wei, Pattern Recognition and Intelligen ...

  7. yolov5篇---官方代码docker部署训练

    yolov5训练自己的数据集(docker) yolov5官方代码: 选择 tag v5.0 https://github.com/ultralytics/yolov5 训练方式可参照另一篇博客 ht ...

  8. U2Net、U2NetP分割模型训练---自定义dataset、训练代码训练自己的数据集

    前言 博客很久没有更新了,今天就来更新一篇博客吧,哈哈: 最近在做图像分割相关的任务,因此,写这么一篇博客来简单实现一下分割是怎么做的,内容简单,枯燥,需要耐心看,哈哈: 博客的内容相对简单,比较适合 ...

  9. 革命性提升-宇宙最强的NLP预训练BERT模型(附官方代码)

    编辑 忆臻 公众号 | 机器学习算法与自然语言处理 yizhennotes 1.  Bert官方源码公开 终于是千呼万唤始出来,Google AI 发表于10月中旬的论文: <BERT: Pre ...

最新文章

  1. String和int 转换
  2. 分享Kali Linux 2016.2第45周VMware虚拟机
  3. 欧洲的数据中心与美国的数据中心如何区分?
  4. 阿里技术:基于Kafka+Flink+Redis的电商大屏实时计算案例
  5. mysql操作 begin 命令_MySQL基础操作
  6. Java SSM 项目实战 day02 功能介绍,SSM整合,数据库和IDEA的maven工程搭建,产品信息查询和添加
  7. 【Oracle】交差并补
  8. 第三阶段应用层——1.9 数码相册—在LCD上显示BMP图片
  9. 【校招 --阶段一 操作系统基础】进程地址空间
  10. attribute和property的区别 (转载)
  11. GTA5最新线上小助手
  12. 大数据的预测实力,这15个有趣的数据集,你可能闻所未闻
  13. CSS基础之 背景属性设置
  14. storm和vgj vgj_Team VGJ发布公告解散 两年征程划上句号
  15. Springboot与国际化(i18n)
  16. AntV G2 饼图
  17. mysql属于dql语句的是_4.MySql中的SQL语句(三):DQL
  18. (三)Druid数据库连接池如何回收线程源码分析和高级参数优化
  19. 重装系统后的QQ聊天记录恢复方法与教程
  20. Python:Opencv开发手册

热门文章

  1. 【脚本工具】QQ个人数据管理方法与脚本
  2. SitePoint播客#126:蛋黄在我们身上
  3. 生物信息学习--nr/nt 数据库(总+子)构建
  4. 汉诺塔自动解题动画中的iOS开发技巧
  5. 【安全资讯】incaseformat蠕虫病毒大爆发!20s删除用户文件
  6. ONSPlayer玩RPGMV没声音的解决方法
  7. ArcMAP实现矢量数据平移
  8. 设计模式之 Vistor 访问者模式:Swift 实现
  9. 【MySQL】MySQL的四种事务隔离级别
  10. 解开Kafka神秘的面纱(二):Kafka的高效读写与消息安全