图像分割中常用数据集及处理思路(含代码)

这篇具有很好参考价值的文章主要介绍了图像分割中常用数据集及处理思路(含代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常用数据集

1.1 CityScapes

道路场景 包含30个类别 2975张训练,500张验证,1525张测试 一共5000张
侧重于城市街景场景的语义理解,适用于多种视觉任务,数据来自50多个城市,多个季节,白天良好天气条件
手动挑选帧,多种背景
5000例精准标准,20000例粗糙标准
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

sota

常规分割
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习
实时分割
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

1.2 CamVid

是第一个具有语义标签的视频集合,包含元数据,该数据库共包含32个分类
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

sota

常规分割算法
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习
实时分割算法
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

1.3 ADE20K

ADE20k由27000多幅图像组成,跨越3000多个对象类别,数据集的当前版本包含:
27574张图片(25574张用于训练,2000张用于验证),跨越365个不同场景

sota

ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

1.4 PASCAL VOC 2012

该数据集包含20个对象类别,此数据集中的每个图像都有像素级分割注释,边界框注释和对象注释,该数据集已被广泛用于目标检测、语义分割和分类任务
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

sota

ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

1.5 COCO-Stuff

该数据集用于场景理解任务(如语义分割、对象检测和图像字幕)的数据集,该数据集中有164k个图像,跨越172个类别
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

sota

ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

1.6 SUN RGBD

通过四款3D摄像机采集图像和深度信息,这四款相机均含有色传感器 红外发射器 红外接收器 其中色彩传感器获取RGB信息,红外发射器和红外接收器获取深度信息。包含10335个房间场景的真实RGB-D图像,每个RGB图像都有相应的深度和分割图,标记对象类别多大700个,训练集和测试集分别包含5285和5050副图像
ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

1.7 NYUDv2

由来自各种室内场景的视频序列组成,由来自Microsoft kinect的RGB和深度相机记录,他的特点是:

  • 1449张密集标记的对齐RGB和深度图像
  • 464张来自3个城市的新场景
  • 407024新的未标记帧
  • 每个对象都标有一个类和一个实例号
    ade20k数据集,算法代码复现,计算机视觉,人工智能,深度学习

在这里给大家一套普适的代码,供大家参考,以下是代码:

首先导入我们需要的模块

import os
import torch
import torch.utils.data as data
from PIL import Image
import torchvision.transforms.functional as F
import torchvision.transforms as transforms
import albumentations as A
import numpy as np
import random

其中 albumentations是数据增强的库,在检测分割任务中,这个图像增强的库比其他的库速度要快,后面也会出一个关于数据增强的文章。文章来源地址https://www.toymoban.com/news/detail-689536.html

第二块比较鸡肋,可以直接省略这一步

class ExtRandomCrop(object):
    def __init__(self, size, pad_if_needed=True):
        self.size = size
        self.pad_if_needed = pad_if_needed

    @staticmethod
    def get_params(img, output_size):
        """Get parameters for ``crop`` for a random crop.
        Args:
            img (PIL Image): Image to be cropped.
            output_size (tuple): Expected output size of the crop.
        Returns:
            tuple: params (i, j, h, w) to be passed to ``crop`` for random crop.
        """
        w, h = img.size
        th, tw = output_size
        if w == tw and h == th:
            return 0, 0, h, w

        i = random.randint(0, h - th)
        j = random.randint(0, w - tw)
        return i, j, th, tw

    def crop(self, img, lbl):
        """
        Args:
            img (PIL Image): Image to be cropped.
            lbl (PIL Image): Label to be cropped.
        Returns:
            PIL Image: Cropped image.
            PIL Image: Cropped label.
        """
        assert img.size == lbl.size, 'size of img and lbl should be the same. %s, %s' % (
            img.size, lbl.size)

        # pad the width if needed
        if self.pad_if_needed and img.size[0] < self.size[1]:
            img = F.pad(img, padding=int((1 + self.size[1] - img.size[0]) / 2))
            lbl = F.pad(lbl, padding=int((1 + self.size[1] - lbl.size[0]) / 2))

        # pad the height if needed
        if self.pad_if_needed and img.size[1] < self.size[0]:
            img = F.pad(img, padding=int((1 + self.size[0] - img.size[1]) / 2))
            lbl = F.pad(lbl, padding=int((1 + self.size[0] - lbl.size[1]) / 2))

        i, j, h, w = self.get_params(img, self.size)

        return F.crop(img, i, j, h, w), F.crop(lbl, i, j, h, w)

这里以ADE20K为例吧,首先应该重写Dataset,这是用自己数据集的一种非常重要的步骤

class ADE20K(data.Dataset)

初始化函数

def __init__(self, root, mode='train', crop_size=(512, 512)):
        self.root = root
        self.crop_size = crop_size
        self.random_crop = ExtRandomCrop(self.crop_size, pad_if_needed=True)

        if mode == 'train':
            self.mode = mode + 'ing'
        elif mode == 'val':
            self.mode = mode + 'idation'

        self.images, self.mask = self.read_file(self.root, self.mode)
        self.crop_size = crop_size

读取文件的函数

def read_file(self, path, mode):
        image_path = os.path.join(path, "images", mode)
        mask_path = os.path.join(path, "annotations", mode)

        image_files_list = os.listdir(image_path)
        mask_files_list = os.listdir(mask_path)

        image_list = [os.path.join(image_path, img) for img in image_files_list]
        mask_list = [os.path.join(mask_path, mask) for mask in mask_files_list]

        image_list.sort()
        mask_list.sort()

        return image_list, mask_list

进行数据处理的函数

def transform(self, image, mask):
        image = np.array(image)
        mask = np.array(mask)

        trans = A.Compose([
            A.HorizontalFlip(p=0.5),
            A.VerticalFlip(p=0.5),
            A.OneOf([
                A.MotionBlur(p=0.5),  # 使用随机大小的内核将运动模糊应用于输入图像。
                A.MedianBlur(blur_limit=3, p=0.5),  # 中值滤波
                A.Blur(blur_limit=3, p=0.2),  # 使用随机大小的内核模糊输入图像。
            ], p=1),
            A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.5),
            # 随机应用仿射变换:平移,缩放和旋转输入
            A.RandomBrightnessContrast(p=0.5),  # 随机明亮对比度
        ])

        trans_results = trans(image=image, mask=mask)

        return trans_results

然后就是getitem和len了

def __len__(self):
        return len(self.images)

    def __getitem__(self, index):
        image = Image.open(self.images[index]).convert('RGB')
        mask = Image.open(self.mask[index])

        image, mask = self.random_crop.crop(image, mask)
        mask = np.array(mask)

        if self.mode == "train":
            trans_results = self.transform(image, mask)
            image = trans_results['image']
            mask = trans_results['mask']

        transform_img = transforms.Compose(
            [
                transforms.ToTensor(),
                transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
            ]
        )

        image = transform_img(image)
        mask = torch.from_numpy(mask)

        return image, mask

这里再给大家一个用哈希映射的方式处理标签的方法,这里可能速度会更快,用于那些已经上过色的标签:

class LabelProcessor:
    def __init__(self, file_path):

        self.colormap = self.read_color_map(file_path)
        self.cm2lbl = self.encode_label_pix(self.colormap)

    @staticmethod
    def read_color_map(file_path):
        pd_label_color = pd.read_csv(file_path, sep=',')
        colormap = []
        for i in range(len(pd_label_color.index)):
            tmp = pd_label_color.iloc[i]
            color = [tmp['r'], tmp['g'], tmp['b']]
            colormap.append(color)
        return colormap

    @staticmethod
    def encode_label_pix(colormap):
        cm2lbl = np.zeros(256 ** 3)
        for i, cm in enumerate(colormap):
            cm2lbl[(cm[0] * 256 + cm[1]) * 256 + cm[2]] = i
        return cm2lbl

    def encode_label_img(self, img):
        data = np.array(img, dtype='int32')
        idx = (data[:, :, 0] * 256 + data[:, :, 1]) * 256 + data[:, :, 2]
        return np.array(self.cm2lbl[idx], dtype='int64')

到了这里,关于图像分割中常用数据集及处理思路(含代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【车辆行人检测和跟踪数据集及代码汇总】

    1.1 车辆检测数据集和训练权重 YOLO系列算法 汽车 检测数据集 数据集标签:VOC和YOLO格式,类别名为: car 数据集一 数据集二 数据集三 数据集四 数据集五 数据集六 数据集七 YOLO系列算法 自行车 检测数据集 数据集标签:VOC和YOLO格式 数据集一 数据集二 数据集三 数据集四 数据

    2024年02月04日
    浏览(54)
  • 数字图像处理常用算法的原理和代码实现详解

      本专栏详细地分析了常用图像处理算法的数学原理、实现步骤。配有matlab或C++实现代码,并对代码进行了详细的注释。最后,对算法的效果进行了测试。相信通过这个专栏,你可以对这些算法的原理及实现有深入的理解!   如有疑问,欢迎在评论区留言讨论! Canny边缘

    2024年01月16日
    浏览(45)
  • 【3D 图像分割】基于 Pytorch 的 3D 图像分割6(数据预处理之LIDC-IDRI 标签 xml 标签转储及标记次数统计 )

    由于之前哔站作者整理的 LUNA16 数据处理方式过于的繁琐,于是,本文就对 LUNA16 数据做一个新的整理,最终得到的数据和形式是差不多的。但是,主要不同的是代码逻辑比较的简单,便于理解。 对于 LUNA16 数据集的学习,可以去参考这里:【3D 图像分类】基于 Pytorch 的 3D 立

    2024年02月04日
    浏览(52)
  • 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

    1 理解阈值分割的依据及确定阈值的方法; 2 掌握常用的边缘检测算子的使用方法,加深对不同算子优缺点的理解; 3 能够自行评价各主要算子在无噪声条件下和噪声条件下的分割性能; 1. 直方图法 测试图像:coins.png 原理:观察该图像的直方图,手动选取谷底点作为阈值对

    2024年02月05日
    浏览(61)
  • TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

    官方代码:https://github.com/Beckschen/TransUNet 目的:训练5个类别的汽车部件分割任务(测试在另一篇博客中) CSDN数据集免费下载 实现效果: 1. github下载代码,并解压。 项目里的文件可能跟你下载的不一样,不急后面会讲到! 2. 配置数据集(尽最大努力还原官方数据集的格式)

    2024年02月04日
    浏览(42)
  • 008-关于FPGA/ZYNQ直接处理图像传感器数据输出的若干笔记(裸板采集思路)

    最近也是未来需要考虑做的一件事情是,如何通过FPGA/ZYNQ去做显微镜图像观测下的图像采集传输与后续的处理。目前显微镜观测领域通常是以PC端连接工业相机接口,这个接口可以是USB3.0,可以是网口,也可以是其它传输方式。常常通过工业相机输出的为视频流数据,厂商会

    2024年01月23日
    浏览(58)
  • 图像处理技术:数字图像分割 ------ 图像分割、边界分割(边缘检测)、区域分割

    是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分 成若干个互不相交的区域,使得这些特征在同一区域内表现出一致 性或相似性,而在不同区域间表现出明显的不同 分割出来的区域应该同时满足:  (1)分割出来的图像区域的均匀性和连通性。 • 均匀性是指该

    2024年02月04日
    浏览(48)
  • Matlab|图像处理04|图像分割-阈值分割方法

    一、人工阈值分割方法threshold_test1.m 1、分析修改阈值对分割结果的影响 分析:取直方图中第一个谷底的灰度值作为阈值,图像分割效果较好。当阈值改变时,分割后的图像有部分信息丢失,本图中当阈值减小时分割后的图像黑色部分较多,当阈值增大时分割后的图像白色部

    2024年02月11日
    浏览(52)
  • 数字图像处理:图像分割——边缘检测与区域分割

    1.图像分割:根据图像的某些局部特征(灰度级、纹理、彩色或统计特征等)的相似性和互斥性,将图像分割成若干子区域,在每个子区域内部具有相似(相同或相近)特性,而相邻子区域的特性互斥。所以图像分割是利用图像局部特征的相似性和互斥性。 2.图像分割方法分

    2024年02月05日
    浏览(44)
  • 图像分割的常用算法

    图像分割是指将一幅图像划分成多个子区域或像素集合的过程,其中每个子区域或像素集合具有一定的统计特征或语义信息。图像分割是图像处理中的基础任务,其应用涵盖了医学影像、计算机视觉、机器人技术等多个领域。常用的图像分割算法包括: 1. 基于阈值的分割算法

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包