语义分割学习【Day 4】

西瓜数据集准备

数据集使用说明

https://github.com/TommyZihao/Train_Custom_Dataset/tree/main/%E8%AF%AD%E4%B9%89%E5%88%86%E5%89%B2/%E8%AF%AD%E4%B9%89%E5%88%86%E5%89%B2%E6%95%B0%E6%8D%AE%E9%9B%86

下载整理好之后的数据集

# 删除原有的数据集目录(如有)
rm -rf Watermelon87_Semantic_Seg_Mask.zip Watermelon87_Semantic_Seg_Mask

# 下载数据集压缩包
wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20230130-mmseg/dataset/watermelon/Watermelon87_Semantic_Seg_Mask.zip

# 解压
unzip Watermelon87_Semantic_Seg_Mask.zip >> /dev/null

# 删除压缩包
rm -rf Watermelon87_Semantic_Seg_Mask.zip

查看文件夹目录结构

pip install seedir emoji -i https://pypi.tuna.tsinghua.edu.cn/simple
import seedir as sd
sd.seedir('Watermelon87_Semantic_Seg_Mask', style='emoji', depthlimit=2)

西瓜数据集可视化

导入工具包

import os

import cv2
import numpy as np
from PIL import Image
from tqdm import tqdm

import matplotlib.pyplot as plt
%matplotlib inline

查看单张图像及其语义分割标注

# 指定单张图像路径
img_path = 'Watermelon87_Semantic_Seg_Mask/img_dir/train/045_sozai_l.jpg'
mask_path = 'Watermelon87_Semantic_Seg_Mask/ann_dir/train/045_sozai_l.png'
img = cv2.imread(img_path)
mask = cv2.imread(mask_path)
img.shape
mask.shape

输出结果

(300, 440, 3)
(300, 440, 3)

mask灰度图标注含义

np.unique(mask)

输出结果

array([0, 1, 2, 3, 4, 5], dtype=uint8)

类别名称类别语义标注类别灰度图像素值
/背景/0
red西瓜红瓤多段线(polygon)1
green西瓜外壳多段线(polygon)2
white西瓜白皮多段线(polygon)3
seed-black西瓜黑籽多段线(polygon)4
seed-white西瓜白籽多段线(polygon)5
plt.figure(figsize=(10, 6))
plt.imshow(mask*50)
plt.axis('off')
plt.show()

在这里插入图片描述

将语义分割标注叠加在原图上显示

# 每个类别的 BGR 配色
palette = [
    ['background', [127,127,127]],
    ['red', [0,0,200]],
    ['green', [0,200,0]],
    ['white', [144,238,144]],
    ['seed-black', [30,30,30]],
    ['seed-white', [8,189,251]]
]

palette_dict = {}
for idx, each in enumerate(palette):
    palette_dict[idx] = each[1]

print(palette_dict)

输出结果

{0: [127, 127, 127],
 1: [0, 0, 200],
 2: [0, 200, 0],
 3: [144, 238, 144],
 4: [30, 30, 30],
 5: [8, 189, 251]}
mask = mask[:,:,0]

# 将整数ID,映射为对应类别的颜色
viz_mask_bgr = np.zeros((mask.shape[0], mask.shape[1], 3))
for idx in palette_dict.keys():
    viz_mask_bgr[np.where(mask==idx)] = palette_dict[idx]
viz_mask_bgr = viz_mask_bgr.astype('uint8')

# 将语义分割标注图和原图叠加显示
opacity = 0.2 # 透明度越大,可视化效果越接近原图
label_viz = cv2.addWeighted(img, opacity, viz_mask_bgr, 1-opacity, 0)

plt.figure(figsize=(10, 6))
plt.imshow(label_viz[:,:,::-1])
plt.axis('off')
plt.show()

在这里插入图片描述

批量可视化图像和标注

# 指定图像和标注路径

# 训练集
PATH_IMAGE = 'Watermelon87_Semantic_Seg_Mask/img_dir/train'
PATH_MASKS = 'Watermelon87_Semantic_Seg_Mask/ann_dir/train'

# 测试集
# PATH_IMAGE = 'Watermelon87_Semantic_Seg_Mask/img_dir/val'
# PATH_MASKS = 'Watermelon87_Semantic_Seg_Mask/ann_dir/val'
# n 行 n 列可视化
n = 5

# 透明度越大,可视化效果越接近原图
opacity = 0.2 

fig, axes = plt.subplots(nrows=n, ncols=n, figsize=(16, 12))

for i, file_name in enumerate(os.listdir(PATH_IMAGE)[:n**2]):
    
    # 载入图像和标注
    img_path = os.path.join(PATH_IMAGE, file_name)
    mask_path = os.path.join(PATH_MASKS, file_name.split('.')[0]+'.png')
    img = cv2.imread(img_path)
    mask = cv2.imread(mask_path)
    mask = mask[:,:,0]

    # 将预测的整数ID,映射为对应类别的颜色
    viz_mask_bgr = np.zeros((mask.shape[0], mask.shape[1], 3))
    for idx in palette_dict.keys():
        viz_mask_bgr[np.where(mask==idx)] = palette_dict[idx]
    viz_mask_bgr = viz_mask_bgr.astype('uint8')

    # 将语义分割标注图和原图叠加显示
    label_viz = cv2.addWeighted(img, opacity, viz_mask_bgr, 1-opacity, 0)
    
    # 可视化
    axes[i//n, i%n].imshow(label_viz[:,:,::-1])
    axes[i//n, i%n].axis('off') # 关闭坐标轴显示
fig.suptitle('Image and Semantic Label', fontsize=30)
# plt.tight_layout()
plt.savefig('outputs/D-2.jpg')
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高分辨率遥感图像语义分割是指对高分辨率遥感图像进行像素级别的分类,将图像中的每个像素点分配到不同的语义类别中。在PaddlePaddle中,可以使用Wide-Context Transformer网络来进行高分辨率遥感图像语义分割任务。这个网络结构是基于Transformer的,通过引入宽上下文信息来提高语义分割的性能。\[1\] 具体的实现过程可以参考论文《Looking Outside the Window: Wide-Context Transformer for the Semantic Segmentation of High-Resolution Remote Sensing Images》中的方法。该方法首先将一张高分辨率遥感图像分割成多个小的224x224的图像块,其中两个图像块作为正例,其余的图像块作为负例。然后,通过特征提取网络对图像块进行特征提取。接着,使用RoIs参数来记录局部特征图的位置,以确保不同图像块的局部特征图在原始图像中相互对应。最后,使用经典的语义分割U型结构对特征进行编码和解码,并通过上采样得到最终的语义分割结果。\[2\]\[3\] 总结来说,高分辨率遥感图像语义分割在PaddlePaddle中可以使用Wide-Context Transformer网络进行实现,具体的实现方法可以参考相关论文中的描述。 #### 引用[.reference_title] - *1* *2* [[论文阅读]面向全局:用于高分辨率遥感图像语义分割的宽上下transforms](https://blog.csdn.net/W_zyth/article/details/127228017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于全局和局部对比自监督学习的高分辨率遥感图像语义分割day3 - 网络结构](https://blog.csdn.net/Gw2092330995/article/details/126390230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值