【图像分割_数据集】mask可视化(标签文件png全黑怎么办)

先上效果:

1、python给图像加上mask,并提取mask区域
在这里插入图片描述

2、语义分割之图片和 mask 的可视化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nETDo11K-1651327753502)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220430213341934.png)]

一、python给图像加上mask,并提取mask区域

python给图像加上mask,并提取mask区域_xnholiday的博客-CSDN博客_mask python

import os
import cv2
import numpy as np


def add_mask2image_binary(images_path, masks_path, masked_path):
    # Add binary masks to images
    for img_item in os.listdir(images_path):
        print(img_item)
        img_path = os.path.join(images_path, img_item)
        img = cv2.imread(img_path)
        mask_path = os.path.join(masks_path, img_item[:-4] + '.png')  # mask是.png格式的,image是.jpg格式的
        mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE)  # 将彩色mask以二值图像形式读取
        masked = cv2.add(img, np.zeros(np.shape(img), dtype=np.uint8), mask=mask)  # 将image的相素值和mask像素值相加得到结果
        cv2.imwrite(os.path.join(masked_path, img_item), masked)


# 注意使用全局路径,且无中文
images_path = r'/home/root/work/JPEGImages/'
masks_path = r'/home/root/work/Annotations/'
masked_path = r'/home/root/work/masked/'
add_mask2image_binary(images_path, masks_path, masked_path)

【效果展示】:

原数据:

  • JPEGImages
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tm7buvmx-1651327753502)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220430205615573.png)]
  • Annotations
    请添加图片描述

提取mask后:
请添加图片描述

二、语义分割之图片和 mask 的可视化

语义分割之图片和 mask 的可视化 - AI备忘录 (aiuai.cn)

PS:原图片会出现一些色变

1、处理单张图片

import cv2
import numpy as np
import matplotlib.pyplot as plt

imgfile = 'JPEGImages/00001.jpg'
pngfile = 'Annotations/00001.png'

img = cv2.imread(imgfile, 1)
mask = cv2.imread(pngfile, 0)

contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0, 0, 255), 1)

img = img[:, :, ::-1]
img[..., 2] = np.where(mask == 1, 255, img[..., 2])

plt.imshow(img)
plt.show()
# cv2.imwrite("visual/00001.jpg", img)

效果展示:
在这里插入图片描述

2、批量处理

import cv2
import numpy as np
import os


def get_path(images_path, masks_path, visualized_path):
    for filename in os.listdir(images_path):
        img_path = os.path.join(images_path, filename)
        mask_path = os.path.join(masks_path, filename[:-4] + '.png')
        img = cv2.imread(img_path, 1)
        mask = cv2.imread(mask_path, 0)
        contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        cv2.drawContours(img, contours, -1, (0, 0, 255), 1)
        img = img[:, :, ::-1]
        img[..., 2] = np.where(mask == 1, 255, img[..., 2])
        cv2.imwrite(os.path.join(visualized_path, filename), img)
        print("{} saved".format(filename))
    print("finish")


images_path = 'JPEGImages/'
masks_path = 'Annotations/'
visualized_path = 'visual/'
get_path(images_path, masks_path, visualized_path)

在这里插入图片描述

  • 17
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
### 回答1: 要训练自己的数据集,我们首先需要下载Mask R-CNN模型的代码和预训练的权重。我们可以从GitHub上的Mask R-CNN项目获得代码。将代码克隆到本地后,我们可以安装所需的依赖库。 接下来,我们需要准备我们自己的数据集数据集应包含图像和相应的实例分割标注。标注可以是标记每个实例的掩码或边界框。确保标注与图像具有相同的文件名,并将它们保存在单独的文件。 一旦准备好数据集,我们需要将它们进行预处理,以便能够与Mask R-CNN模型兼容。为此,我们可以编写一个数据加载器,该加载器将图像和标注转换为模型可以处理的格式。 在准备好数据集和数据加载器后,我们可以开始训练模型。通过运行训练脚本,我们可以指定训练数据集的路径、模型的配置以及需要的其他参数。模型将针对给定的数据集进行迭代,逐步学习实例分割任务。 训练过程可能需要一定时间,具体取决于数据集的大小和复杂性。我们可以利用GPU加速来加快训练速度。 一旦训练完成,我们可以使用自己的数据集进行图像实例分割。导入训练好的模型权重,我们可以提供测试图像并获得模型对实例的分割结果。 总之,训练自己的数据集以进行图像实例分割需要下载Mask R-CNN代码和预训练权重。然后,准备和预处理数据集,并编写数据加载器。使用训练脚本进行模型训练,并在训练完成后使用自己的数据集进行图像实例分割。 ### 回答2: 要训练自己的数据集,首先需要下载并设置合适的数据集。可以从各种资源寻找与自己目标相关的图像数据集,并确保数据集包含正确的标注信息,例如每个图像的实例分割掩模。 接下来,我们需要安装并配置Mask R-CNN的开发环境。可以通过使用Python包管理工具pip来安装所需依赖,并下载Mask R-CNN代码库。然后,根据具体的数据集,需要进行一些配置调整,例如修改配置文件相关的参数设置,如类别数目、训练和验证数据集的路径等等。 接下来,将数据集准备成模型可接受的格式。一般来说,我们需要将数据集划分为训练集和验证集,并提供每个图像的标注信息。可以使用一些处理工具来将数据集进行预处理,将图像转换为模型可接受的格式,并将标注信息保存为对应的掩模图像。 接下来,我们可以开始训练模型了。通过运行相应的训练脚本,可以开始构建并训练Mask R-CNN模型。训练过程会根据指定的配置和数据集进行迭代更新,直到模型收敛或达到预设的迭代次数。可以根据具体的训练状态和需求来监控训练过程,并根据需要进行调整和优化。 最后,一旦训练完成,我们可以使用训练好的模型对新的图像进行实例分割。可以通过加载训练好的权重文件来恢复模型,并使用模型对输入图像进行预测和推断,得到每个实例的分割结果。可以将结果保存为掩模图像或直接可视化展示。 在整个训练过程,需要注意数据集的质量,合理调整模型的参数和配置,并进行适当的训练和验证策略,以获得更好的实例分割效果。 ### 回答3: Mask R-CNN 是一种用于图像实例分割的深度学习模型,它结合了目标检测和语义分割的特点。在实际应用,我们需要将模型训练在自己的数据集上,以便能够准确地对我们感兴趣的目标进行实例分割。 首先,我们需要准备自己的数据集。这包括收集具有实例标注的图像,并将它们分成训练集和验证集。实例标注是指为每个图像的目标对象绘制边界框和遮罩,以指示目标的位置和形状。 接下来,我们需要下载并配置Mask R-CNN的代码库。这可以通过在GitHub上找到Mask R-CNN的实现并进行下载。下载完成后,我们需要根据自己的数据集修改代码的配置文件,以适应我们的数据集和实验需求。 然后,我们可以开始训练自己的数据集。通过运行训练脚本,并指定数据集路径、模型配置和训练参数,我们可以开始训练模型。训练过程需要一定的时间和计算资源,具体时间取决于数据集的规模和硬件条件。 在训练过程,模型会逐渐学习到目标的外观和形状特征,并生成准确的边界框和遮罩。可以通过查看训练过程的损失值和验证指标来监控模型的训练情况,并根据需要进行调整和优化。 最后,当模型训练完成后,我们可以使用它对新的图像进行实例分割。通过加载训练好的权重,并用模型进行预测,我们可以得到每个目标对象的边界框和遮罩。这些结果可以进一步用于目标跟踪、图像分析等应用。 综上所述,训练自己的数据集可以帮助我们将Mask R-CNN模型应用到我们关心的领域,并进行准确的图像实例分割。这需要准备数据集、下载代码库、修改配置文件、进行模型训练和应用预测等步骤。通过这一过程,我们可以获得针对自己数据集的个性化实例分割模型,以满足我们具体的需求。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DLNovice

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

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

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

打赏作者

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

抵扣说明:

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

余额充值