【DDRNet】DDRNet项目使用单GPU、自己的数据集训练、得到测试图像

这篇具有很好参考价值的文章主要介绍了【DDRNet】DDRNet项目使用单GPU、自己的数据集训练、得到测试图像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近需要对一些细胞图像进行分割,需要比较几个模型之间的优劣,于是找到了DDRNet。

DDRNet项目来源:https://github.com/chenjun2hao/DDRNet.pytorch

1.前言

电脑环境配置:win11+NVIDIA GeForce RTX 3060 Laptop+CUDA11.7

如果想用他的数据集cityscapes和他的预训练模型,可以根据上面的项目来源中的指示来做,下载好像都要科学上网。

预训练模型选择这个:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

cityscapes数据下载:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

2.数据集准备

2.1自己数据准备

        我的原始数据集是512*512的彩色细胞图像,DDRNet所需要的语义标签图像是8位的灰度图,其中像素点的灰度值即为语义标签的值:

        原图如下,我选择了四个标签值【0,1,2,3】分别代表【背景图案,好细胞,坏细胞,细胞边缘】,转化成label后灰度值即为【0,1,2,3】:

     

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

          上图转化为label之后图像如下:看起来漆黑一片,其实不完全是黑色的。。。

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

       

获得了image和label之后,在DDRNet工程项目的data文件夹下创建新的文件夹,我命名为drug,同时在list下创建文件夹drug。将image和label放入文件夹下,同时编辑list下的映射文件,最终data文件夹格式如下:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

       

 创建list的相对路径映射文件代码如下:

import os
def op_file():
    # train
    train_image_root = 'image/train/'
    train_label_root = 'label/train/'
    train_image_path = 'data/drug/image/train'
    train_label_path = 'data/drug/label/train'

    trainImageList = os.listdir(train_image_path)
    trainLabelList = os.listdir(train_label_path)

    train_image_list = []
    for image in trainImageList:
        train_image_list.append(train_image_root + image)

    train_label_list = []
    for label in trainLabelList:
        train_label_list.append(train_label_root + label)

    train_list_path = 'data/list/drug/train.lst'
    file = open(train_list_path, 'w').close()
    with open(train_list_path, 'w', encoding='utf-8') as f:
        for i1,i2 in zip(train_image_list, train_label_list):
            print(i1, i2)
            f.write(i1 + "   " + i2 + "\n")
    f.close()

    # test
    test_image_root = 'image/test/'
    test_label_root = 'label/test/'
    test_image_path = 'data/drug/image/test'

    testImageList = os.listdir(test_image_path)

    test_image_list = []
    for image in testImageList:
        test_image_list.append(test_image_root + image)

    test_list_path = 'data/list/drug/test.lst'
    file = open(test_list_path, 'w').close()
    with open(test_list_path, 'w', encoding='utf-8') as f:
        for i1 in test_image_list:
            f.write(i1 + "\n")
    f.close()

    # val
    val_image_root = 'image/val/'
    val_label_root = 'label/val/'
    val_image_path = 'data/drug/image/val'
    val_label_path = 'data/drug/label/val'

    valImageList = os.listdir(val_image_path)
    valLabelList = os.listdir(val_label_path)

    val_image_list = []
    for image in valImageList:
        val_image_list.append(val_image_root + image)

    val_label_list = []
    for label in valLabelList:
        val_label_list.append(val_label_root + label)

    val_list_path = 'data/list/drug/val.lst'
    file = open(val_list_path, 'w').close()
    with open(val_list_path, 'w', encoding='utf-8') as f:
        for (i1,i2) in zip(val_image_list, val_label_list):
            f.write(i1 + "   " + i2 + "\n")
    f.close()

    # trainval
    trainval_list_path = 'data/list/drug/trainval.lst'
    file = open(trainval_list_path, 'w').close()
    with open(trainval_list_path, 'w', encoding='utf-8') as f:
        for (i1,i2) in zip(train_image_list, train_label_list):
            f.write(i1 + "   " + i2 + "\n")
    f.close()

    with open(trainval_list_path, 'a', encoding='utf-8') as f:
        for (i1,i2) in zip(val_image_list, val_label_list):
            f.write(i1 + "   " + i2 + "\n")
    f.close()

if __name__ == '__main__':
    op_file()

2.2 和自己数据相关的工程代码修改

在lib/datasets下创建Drug.py,复制同级目录下的cityscapes.py,在此基础上修改:

1.文件中的所有和cityscapes都改成drug

2.修改mean和std,这个应该是需要根据原图来进行计算。计算方法https://blog.csdn.net/dcrmg/article/details/102467434

3.修改label_mapping和class_weight

label_mapping需要啥改啥,我就四个标签0,1,2,3...初始权重class_weight需要通过计算得到,计算方法有很多种

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

4.在_init_.py中导入drug.py

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

5.打开experiments/cityscapes下的ddrnet23_slim.yaml进行修改:

DATASET是你在data下创建的存放image和label的文件夹,NUM_CLASSES是标签数

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

        根据你的图片大小进行修改,BASE_SIZE我不知道咋搞,但是我改了512没什么问题,就512了,hhhhhh...

        如果你的GPU显存不够的话把BATCH_SIZE_PRE_GPU改小吧,我的3060笔记本才6GB的显存

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

 

test同理:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

6.打开./lib/models/ddrnet_23_slim.py,DualResNet_imagenet函数中的num_classes默认设置成了19,需要修改成自己的:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

 至此为止,如果你和原文一样有两块GPU的话(原文两块3080),能用DDP的分布式训练的话,应该就能跑了。但很显然,我没有这个条件,还需继续进行修改。

 3.修改为单GPU

把train和eval中所有和并行训练的代码注释掉

1.train.py

main()中,注释掉:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

else中的并行训练没注释掉,反正也跑不进去

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

2.eval.py中的并行测试注释掉:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

3.ddrnet23_slim.py中

GPUS也可以不用动,反正不并行训练应该也用不上

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

修改为单GPU好像就这些地方了,可能会漏了一些地方,因为修修改改太多了,有点忘记了,总而言之,把全部和并行训练有关的代码注释掉。

4.训练数据

做好上述工作就可以进行训练了,如果你用的不是ddrnet23_slim.yaml,又直接python trian.py的,需要修改train.py中的parse_args()中的默认配置文件。我使用385张图像训练结果如下:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

        miou才0.51,之前用600张的结果能达到0.63

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

5.测试数据 

5.1 得到测试结果

        现在我们获得一个训练好的模型(用自己的数据),这个模型保存在output文件夹中的best.pth.

        修改best.pth为385train.pth,并修改ddrnet23_slim.py中的预训练模型配置,修改为自己的路径(好像不改也没影响,忘记了,不确定)。

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

         修改eval.py,由于配置文件中的TEST.MODEL_FILE被注释掉了,需要修改者eval.py中的代码:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

         或者修改配置文件:

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

         

        如果你不需要输出图像,至此就可以进行测试了,但我需要得到分割后的图像,需要继续修改

5.2 得到测试分割图像

        eval中是设置了不保存图像的,我们需要修改成保存图像,将sv_pred设置为True

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

        这样还不够,他的testval中的save_pred()多写了一个参数,直接删掉img。

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

         

        这样你就可以得到分割后的图像了,项目会自动生成一个test_resluts的文件夹,保存了你的分割结果

5.3 测试结果

        

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch

        分割图像结果从广度上来看还行,细节上还有些错误,不过我这个数据集用在这个模型上的结果中是相当好。

ddrnet num_classes,语义分割,深度学习,人工智能,计算机视觉,pytorch文章来源地址https://www.toymoban.com/news/detail-670564.html

到了这里,关于【DDRNet】DDRNet项目使用单GPU、自己的数据集训练、得到测试图像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 深度学习:使用nanodet训练自己制作的数据集并测试模型,通俗易懂,适合小白

    关于目标检测的模型有很多, nanodet 模型小且轻量化,适合移植部署到硬件设备上,非常推荐学习这个模型。经过我自己踩了无数坑后总结了此教程,助学刚接触nanodet,想要快速上手的学者,教程很详细,学者耐心看。 我提供了一个已经调试好的源码包,后面的教程也都是

    2024年02月15日
    浏览(44)
  • 深度学习:使用UNet做图像语义分割,训练自己制作的数据集并推理测试(详细图文教程)

    语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。我总结了使用UNet网络做图像语义分割的方法,教程很详

    2024年01月18日
    浏览(47)
  • TransUnet官方代码测试自己的数据集(已训练完毕)

    首先参考上一篇的训练过程,这是测试过程,需要用到训练过程的权重。 1. TransUnet训练完毕之后,会生成权重文件(默认保存位置如下),snapshot_path为保存权重的路径。 权重文件 2. 修改test.py文件 调整数据集路径。 训练和测试时的图像设置相同大小,并设置主干模型的名称

    2024年02月01日
    浏览(40)
  • 【swinUnet官方代码测试自己的数据集(已训练完毕)】

    首先参考上一篇的训练过程,因为测试需要用到训练获得的权重。 1、检查相关文件 1.1 检查test_vol.txt的内容是否是测试用的npz文件名称 测试集的npz文件 1.2 检查模型权重文件 2、修改部分代码 2.1 修改dataset_synapse.py 2.2 修改test.py代码 修改相关参数和文件路径 is_savenii:是否保

    2024年02月02日
    浏览(71)
  • 项目环境配置、不知晓问题自己搜索后得到的解答

    目录 Anolis OS龙蜥操作系统 Kernel Selection 4.18.0(RHCK) Compatible with RHEL (kernel-4.18.0) 4.19.91(ANCK) Support Anolis OS verified platform (kernel-4.19.91) 这两个内核选择哪个比较好呢? 我的C盘有些满,我该如何删除一些我需要的东西,并且我该如何判别? Anolis OS 8 安装指南 · 语雀 安装过程大家可

    2024年02月03日
    浏览(28)
  • 使用MMDetection训练自己的数据集

    本文主要阐述如何使用 mmdetection 训练自己的数据,包括配置文件的修改,训练时的数据增强,加载预训练权重以及绘制损失函数图等。这里承接上一篇文章,默认已经准备好了 COCO 格式数据集且已安装 mmdetection ,环境也已经配置完成。 这里说明一下,因为 mmdetection 更新至

    2024年02月06日
    浏览(58)
  • 使用SwinUnet训练自己的数据集

    参考博文: https://blog.csdn.net/qq_37652891/article/details/123932772 遥感图像多类别语义分割,总共分为7类(包括背景) image: label_rgb label(这里并不是全黑,其中的类别取值为 0,1,2,3,4,5,6 ),此后的训练使用的也是这样的数据 数据地址 百度云: https://pan.baidu.com/s/1zZHnZfBgVWxs6T

    2024年02月04日
    浏览(49)
  • SwinIR Transformer训练教程(使用自己的数据集)

    SwinIR Transformer图像超分辨率重建训练教程 文章:https://arxiv.org/abs/2108.

    2024年02月13日
    浏览(36)
  • 使用pyskl的stgcn++训练自己的数据集

    https://github.com/kennymckormick/pyskl 包含多种动作分类的模型,感谢大佬 训练过程主要参考项目中的 examples/extract_diving48_skeleton/diving48_example.ipynb 但是我一开始不知道这个文件,从网上查不到太多的资料,走了不少弯路,这里就把我训练的过程分享一下。 这里使用的是Weizmann数据

    2024年02月03日
    浏览(35)
  • 使用YOLOv8训练自己的【目标检测】数据集

    随着深度学习技术在计算机视觉领域的广泛应用,行人检测和车辆检测等任务已成为热门研究领域。然而,实际应用中,可用的预训练模型可能并不适用于所有应用场景。 例如,虽然预先训练的模型可以检测出行人,但它无法区分“好人”和“坏人”,因为它没有接受相关的

    2024年04月10日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包