搭建自己的语义分割平台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))

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

  • 59
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 99
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 99
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅念念52

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值