0


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

文章目录


前言

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

一、deeplabV3+

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

二、数据准备

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

三、修改代码

1.根目录下的

  1. mypath.py

文件
在这里插入图片描述
2.

  1. dataloaders\datasets

创建自己的数据集文件

  1. hat.py

复制这一路径下的

  1. pascal.py

文件
在这里插入图片描述
3.

  1. dataloaders/utils.py

在这里插入图片描述
在这里插入图片描述
4.

  1. dataloaders/__init__.py

在这里插入图片描述
在这里插入图片描述
5.

  1. train.py

在这里插入图片描述

四、开始训练

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

五、测试

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

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

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


本文转载自: https://blog.csdn.net/Lightismore/article/details/125419821
版权归原作者 浅念念52 所有, 如有侵权,请联系我们删除。

“搭建自己的语义分割平台deeplabV3+”的评论:

还没有评论