MMSegmentation笔记03:下载数据集并可视化观察

1. 下载数据集

数据集链接

下载好之后将其解压放在工程根目录下

2. 数据集可视化观察

"""
==========================================
@author: Seaton
@Time: 2023/8/15:15:46
@IDE: PyCharm
@Summary:可视化探索西瓜语义分割数据集
==========================================
"""
import os

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

import matplotlib.pyplot as plt


# 指定单张图像路径
img_path = 'Watermelon87_Semantic_Seg_Mask/img_dir/train/04_35-2.jpg'
mask_path = 'Watermelon87_Semantic_Seg_Mask/ann_dir/train/04_35-2.png'

img = cv2.imread(img_path)
mask = cv2.imread(mask_path)
# 找一张图输出大小看看
print(f'原图大小:{img.shape}; mask大小:{mask.shape}')

# 输出分割标注所有类别
print(np.unique(mask))

# 每个类别的 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)

# 取mask第一个通道
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.5  # 透明度越大,可视化效果越接近原图
label_viz = cv2.addWeighted(img, opacity, viz_mask_bgr, 1 - opacity, 0)
plt.imshow(label_viz[:, :, ::-1])
plt.show()

# 批量可视化
# 指定图像和标注路径
PATH_IMAGE = 'Watermelon87_Semantic_Seg_Mask/img_dir/train'
PATH_MASKS = 'Watermelon87_Semantic_Seg_Mask/ann_dir/train'
# n 行 n 列可视化
n = 5
fig, axes = plt.subplots(nrows=n, ncols=n, sharex=True, figsize=(12, 12))

for i, file_name in enumerate(os.listdir(PATH_IMAGE)[:n ** 2]):  # 前25个
    # 载入图像和标注
    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()

这里我注释掉了89行,如果想保存结果文件到本地的话就新建一个文件夹叫output即可。

### 回答1: mmsegmentation特征可视化是指通过可视化技术,将mmsegmentation模型中提取的特征图进行可视化展示,以便更好地理解模型的工作原理和特征提取能力。通过特征可视化,可以直观地观察到模型在不同层次、不同尺度下提取的特征图,从而更好地理解模型的特征提取能力和表达能力。同时,特征可视化也可以帮助我们发现模型中存在的问题,如过拟合、欠拟合等,从而进一步优化模型的性能。 ### 回答2: mmsegmentation是一个基于PyTorch的深度学习框架,用于语义分割的研究和开发。它包含了很多经典和先进的语义分割模型,如UNet、DeepLabV3和PSPNet等,能够帮助我们快速构建一个语义分割模型。而特征可视化是深度学习中常用的一种方法,用来观察和理解模型学习到的特征。 特征可视化是将网络中的某些层或某些特征映射可视化成图片或热度图的过程。在语义分割任务中,特征可视化可以帮助我们观察网络的学习过程,理解模型学习到的特征,在调试和改进模型时起到很大的作用。我们可以通过mmsegmentation提供的可视化工具来实现特征可视化。 以UNet模型为例,mmsegmentation提供了可视化工具,用于显示UNet模型的中间层特征。首先,我们需要使用UNet模型对一些图像进行推断,然后从模型的中间层中选取一些特征进行可视化mmsegmentation提供了两种可视化方法:可视化图像和可视化热度图。 可视化图像方法是将选定的中间层特征通过反卷积操作转化为图像,输出的是一张与原图大小相同的图像。我们可以通过观察可视化图像来判断网络学到的特征是否与原图像的语义相关。 可视化热度图方法是将选定的中间层特征通过卷积核加权操作,将其映射到原图像上。输出的是一张与原图大小相同的热度图。我们可以通过观察可视化热度图来判断网络学到的特征在原图像中的位置和区域。 需要注意的是,特征可视化不是一个完美的方法,有时我们可能会看到一些奇怪的特征,这是因为深度学习模型非常复杂,特征空间非常大,所以我们可能无法理解和解释一些特征。不过,特征可视化仍然是一个非常有用的方法,能够帮助我们更好地理解模型的学习过程和特征表示,从而指导我们进行模型的调试和改进。 ### 回答3: MMsegmentation是深度学习中常用的一种图像分割算法,该算法可以将一张图像分割成具有语义信息的小块,从而帮助我们更好地理解图像的内容。而特征可视化则是指将模型中的特征可视化出来,以帮助我们更好地理解模型的工作原理和学习过程。 在MMsegmentation中,特征可视化的主要目的是解释模型的行为,找到模型中对于不同类别的重要特征,并检查模型是否学习到正确的特征和语义信息。同时,特征可视化也可以用于调试模型和对比不同模型之间的性能差异。 为了进行特征可视化,首先需要在模型的前向传递过程中获取中间的特征图,然后将这些特征图进行可视化。常用的方法包括使用Grad-CAM、CAM、Guided BP等算法,这些算法可以通过实现反向传播过程中的特定操作来计算出每个像素点对于分类结果的相对重要性,并对特征图进行可视化。 通过特征可视化,我们可以观察到模型在处理不同图像时所重视的特征,进而了解模型是如何判断不同类别的图像的。同时,我们还可以通过对比不同模型中的特征图来发现它们之间的区别和差异,以此选择出最合适的模型。 总之,特征可视化MMsegmentation中具有重要意义,可以帮助我们更好地理解模型的学习过程和行为,同时也能够提高模型的性能和调试效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值