• 搭建自己的语义分割平台deeplabV3+



    前言

    在上一篇主要了解了语义分割,实例分割,全景分割的区别,以及labelme标注的数据进行转换,这边文章主要是通过deeplabV3+ 构建自己的语义分割平台

    一、deeplabV3+

    在这里插入图片描述
    上图所示,是deeplabV3+的主体框架,简单来说就是编码,解码的过程。将输入的图片通过DCNN深度卷积神经网络,获得两个有效的特征层(浅层)(深层)对深层特征层进行ASPP(利用不同膨胀率的膨胀卷积进行特征提取,然后对特征进行堆叠,通过1X1卷积调整通道数,得到最终的特征)将高语义的特征信息经过上采样与浅层特征进行特征融合,在进行3X3的卷积,然后通过1*1卷积进行通道数的调整,调整成num_class(分类数)进行上采样使得最终输出层,宽高与输入图片一样,得到每一个像素点的每一个种类。

    二、数据准备

    1.我们首先要对数据进行一些处理
    在这里插入图片描述
    JPEGImages 存放的是图片
    在这里插入图片描述
    SegmentationClass 存放的是mask掩码图像
    在这里插入图片描述
    ImageSets 存放是一些txt文件
    在这里插入图片描述

    三、修改代码

    1.根目录下的mypath.py文件
    在这里插入图片描述
    2.dataloaders\datasets创建自己的数据集文件hat.py
    复制这一路径下的pascal.py文件
    在这里插入图片描述
    3.dataloaders/utils.py
    在这里插入图片描述
    在这里插入图片描述
    4.dataloaders/__init__.py
    在这里插入图片描述
    在这里插入图片描述
    5.train.py
    在这里插入图片描述

    四、开始训练

    一些主要的参数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    然后就可以直接训练了:
    在这里插入图片描述
    也可以搭载服务器进行训练,可以看我之前的文章。

    五、测试

    训练完成之后,就可以进行测试了,下面直接看代码。

    import torch
    from modeling.deeplab_v3_50_modify_256 import deeplab_v3_50
    import glob
    import cv2
    import os
    from modeling.deeplab import *
    
    from PIL import Image
    from torchvision import transforms
    from dataloaders.utils import  *
    from utils.saver import save_colored_mask
    num_class=3
    
    path = 'test_image'
    out_path='out_image'
    
    test_images = glob.glob(os.path.join(path,"*.jpg"))
    
    composed_transforms = transforms.Compose([transforms.ToTensor()])
    totensor = transforms.ToTensor()
    
    model=DeepLab(num_classes=num_class,backbone='drn')
    model.load_state_dict(torch.load(r'D:\xiangmu\deeplaV3_run\run_hat\hat\deeplab-drn\model_best.pth.tar')['state_dict'])
    model.eval()
    
    def Normalize(img,mean,std):
        img = np.array(img).astype(np.float32)
        img /= 255.0
        img -= mean
        img /=std
        return img
    
    
    for test_image in test_images:
        name=os.path.basename(test_image)
        name=name.replace('jpg','png')
    
    
        img = Image.open(test_image)
        img_norm = Normalize(img,mean=(0.485, 0.456, 0.406),std=(0.229, 0.224, 0.225))
        img_resize = cv2.resize(img_norm,(513,513))
        compose = composed_transforms(img_resize).unsqueeze(0)
        out = model(compose)
        pred=torch.argmax(out,1)[0].numpy()
        H,W=img_norm.shape[0],img_norm.shape[1]
        pred_orgin=cv2.resize(pred,(W,H),interpolation=cv2.INTER_NEAREST)
        out_file=os.path.join(out_path,name)
        save_colored_mask(pred_orgin,out_file)
        print('save {} 测试完成'.format(out_file))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    测试的结果:
    在这里插入图片描述

  • 相关阅读:
    网站页面模仿学习
    web前端网页设计期末课程大作业:旅游网页主题网站设计——三亚旅游网页设计(6个页面) HTML+CSS+JavaScript
    RHCE——十七、文本搜索工具-grep、正则表达式
    【金三银四】Java基础知识面试题(2021最新版)
    物理机服务器应该注意的事
    “元宇宙”最权威的解释来了!全国科技名词委研讨会达成共识
    C语言常识
    降低半导体金属线电阻的沉积和蚀刻技术
    Linux和UNIX的关系及区别
    Tomcat应用没有严格的域名限制漏洞修复
  • 原文地址:https://blog.csdn.net/Lightismore/article/details/125419821