deeplabv3+源码之慢慢解析 第二章datasets文件夹(2)voc.py--VOCSegmentation类

news2024/11/18 5:48:34

系列文章目录

第一章deeplabv3+源码之慢慢解析 根目录(1)main.py–get_argparser函数
第一章deeplabv3+源码之慢慢解析 根目录(2)main.py–get_dataset函数
第一章deeplabv3+源码之慢慢解析 根目录(3)main.py–validate函数
第一章deeplabv3+源码之慢慢解析 根目录(4)main.py–main函数
第一章deeplabv3+源码之慢慢解析 根目录(5)predict.py–get_argparser函数和main函数

第二章deeplabv3+源码之慢慢解析 datasets文件夹(1)voc.py–voc_cmap函数和download_extract函数
第二章deeplabv3+源码之慢慢解析 datasets文件夹(2)voc.py–VOCSegmentation类
第二章deeplabv3+源码之慢慢解析 datasets文件夹(3)cityscapes.py–[Cityscapes类]
第二章deeplabv3+源码之慢慢解析 datasets文件夹(4)utils.py–6个小函数

第三章deeplabv3+源码之慢慢解析 metrics文件夹stream_metrics.py–[StreamSegMetrics类和AverageMeter类]
第四章deeplabv3+源码之慢慢解析 network文件夹(0)backbone文件夹(a)hrnetv2.py–[4个类,4个函数,1个主函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(0)backbone文件夹(b)mobilenetv2.py–[3个类,3个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(0)backbone文件夹©resnet.py–[2个类,12个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(0)backbone文件夹(d)xception.py–[3个类,1个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(1)_deeplab.py–[7个类和1个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(2)modeling.py–[15个函数]
第四章deeplabv3+源码之慢慢解析 network文件夹(3)utils.py–[2个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(1)ext_transforms.py.py–[17个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(2)loss.py–[1个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(3)scheduler.py–[1个类]
第五章deeplabv3+源码之慢慢解析 utils文件夹(4)utils.py–[1个类,4个函数]
第五章deeplabv3+源码之慢慢解析 utils文件夹(5)visualizer.py–[1个类]
总结

文章目录

  • 系列文章目录
    • 第二章datasets文件夹(2)voc.py--VOCSegmentation类
    • VOCSegmentation类


第二章datasets文件夹(2)voc.py–VOCSegmentation类

本篇介绍voc.py中的VOCSegmentation类,整个voc.py中最重要的部分。

VOCSegmentation类

提示:先看完上个部分所说的voc_cmap函数和download_extract函数,本段代码会使用这部分功能。

class VOCSegmentation(data.Dataset):
    """`Pascal VOC <http://host.robots.ox.ac.uk/pascal/VOC/>`_ Segmentation Dataset.
    Args:#原代码参数介绍比较详细
        root (string): Root directory of the VOC Dataset.
        year (string, optional): The dataset year, supports years 2007 to 2012.
        image_set (string, optional): Select the image_set to use, ``train``, ``trainval`` or ``val``
        download (bool, optional): If true, downloads the dataset from the internet and
            puts it in root directory. If dataset is already downloaded, it is not
            downloaded again.
        transform (callable, optional): A function/transform that  takes in an PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
    """
    cmap = voc_cmap()    #详见上一节的voc_cmap函数,返回VOC数据集的分类颜色列表,前21个是数据集标注的结果。
    def __init__(self,
                 root,
                 year='2012',
                 image_set='train',
                 download=False,
                 #download=True,
                 transform=None):   #构造方法,默认2012年数据,训练,不下载,不转换。

        is_aug=False          #是否使用扩充(增广Aug)数据
        if year=='2012_aug':
            is_aug = True
            year = '2012'
        
        self.root = os.path.expanduser(root)    #详见上文各个参数。另此段代码用到很多os.path的东西,后附补充链接。
        self.year = year
        self.url = DATASET_YEAR_DICT[year]['url']     #详见上一节DATASET_YEAR_DICT字典
        self.filename = DATASET_YEAR_DICT[year]['filename']
        self.md5 = DATASET_YEAR_DICT[year]['md5']
        self.transform = transform
        
        self.image_set = image_set
        base_dir = DATASET_YEAR_DICT[year]['base_dir']
        voc_root = os.path.join(self.root, base_dir)
        image_dir = os.path.join(voc_root, 'JPEGImages')

        if download:
            download_extract(self.url, self.root, self.filename, self.md5)   #上一节download_extract函数

        if not os.path.isdir(voc_root):      #如无路径,则表示数据集不存在,即没有下载过数据集,提示下载。
            raise RuntimeError('Dataset not found or corrupted.' +
                               ' You can use download=True to download it')
        
        if is_aug and image_set=='train':     #训练时选择扩充数据集
            mask_dir = os.path.join(voc_root, 'SegmentationClassAug')        #指定训练时使用的扩充标签图像文件夹的路径
            assert os.path.exists(mask_dir), "SegmentationClassAug not found, please refer to README.md and prepare it manually"     #断言提示
            split_f = os.path.join( self.root, 'train_aug.txt')#'./datasets/data/train_aug.txt'
        else:
            mask_dir = os.path.join(voc_root, 'SegmentationClass')  #即./datasets/data/VOCdevkit/VOC2012/SegmentationClass
            splits_dir = os.path.join(voc_root, 'ImageSets/Segmentation')   #即./datasets/data/VOCdevkit/VOC2012/ImageSets/Segmentation
            split_f = os.path.join(splits_dir, image_set.rstrip('\n') + '.txt')  #当image_set=='train'时,即./datasets/data/VOCdevkit/VOC2012/ImageSets/Segmentation/train.txt

        if not os.path.exists(split_f):  #当split_f不存在时,提示指定为文件夹内的三个txt文档之一。
            raise ValueError(
                'Wrong image_set entered! Please use image_set="train" '
                'or image_set="trainval" or image_set="val"')

        with open(os.path.join(split_f), "r") as f: 
            file_names = [x.strip() for x in f.readlines()]   #打开对应的split_f文档,读取对应的图片名(标签)
        
        self.images = [os.path.join(image_dir, x + ".jpg") for x in file_names]     #输入的图像
        self.masks = [os.path.join(mask_dir, x + ".png") for x in file_names]       #目标图像,分割任务里是标签masks
        assert (len(self.images) == len(self.masks))    #断言调试提示输入和输出数量相等

    def __getitem__(self, index):
        """
        Args:
            index (int): Index
        Returns:
            tuple: (image, target) where target is the image segmentation.
        """
        img = Image.open(self.images[index]).convert('RGB')   #输入图像转换
        target = Image.open(self.masks[index])               #打开对应的目标图像。这两行就是数据读入。
        if self.transform is not None:                        
            img, target = self.transform(img, target)         #做图像转化(如main代码中的数据增强)

        return img, target


    def __len__(self):    #返回列表的长度,即图片数量
        return len(self.images)

    @classmethod   #定义类方法,面向对象程序设计好好学哦
    def decode_target(cls, mask):
        """decode semantic mask to RGB image"""    #解码就是把mask转化为RGB图片
        return cls.cmap[mask]    #返回mask参数所对应的语义分割颜色(即具体的分类标签)。main.py代码中main函数第161,162行。

Tips

  1. 补充,感兴趣的话新手同学可以参考os.path的简单介绍。
  2. 补充一次前文的文件夹结构目录。

如VOC数据集的文件夹层级:
在这里插入图片描述在这里插入图片描述

  1. voc.py已全部梳理完。下一个节是cityscapes.py–Cityscapes类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQl数据库第八课-------SQL命令查询-------主要命脉

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————— 目录 查询数据 条件 逻辑运算符 模糊查询 范围查询 in 判断空 UNION 排序 聚合 分组&#xff1a;group by —————————…

安卓进度条:ProgressBar和Seekbar

一、ProgressBar进度条介绍 ProgressBar 是 Android 中的一个进度条控件&#xff0c;用于显示正在进行的任务的进度。它可以以水平或圆形的形式展示进度&#xff0c;并提供了多种样式和属性来满足不同的需求。 相关属性&#xff1a; android:progress&#xff1a;设置进度条的…

LangChain大型语言模型(LLM)应用开发(六):Agents

LangChain是一个基于大语言模型&#xff08;如ChatGPT&#xff09;用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

【Linux指令集】---zip指令(超详细)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 演示环境&#xff1…

DevOps系列文章 之 pipeline 流水线:企业微信群通知消息

部署流程 开发环境Jenkins的job进行编译-打包-build成镜像-推送到镜像私有仓库-部署开发环境-&#xff08;开发自测&#xff09;-自测通过-提测。 版本管理&#xff1a; 构建的过程&#xff1a; 开发环境通过验证&#xff0c;则点击“Yes”&#xff0c;没有则Abort。点击Yes后…

在Linux系统中,如何搭建DNS服务

如何搭建DNS服务 要在Linux系统上搭建DNS服务&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1.安装BIND软件包&#xff1a; sudo yum install bind bind-utils2.配置主DNS服务器&#xff1a; 打开/etc/named.conf文件&#xff0c;编辑DNS服务器的配置。根据你的域名和…

122、仿真-基于51单片机的电量监测电压电流和温度报警系统设计(Proteus仿真+程序+流程图+配套资料等)

方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ&#xff0c;在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…

自然语言处理(扩展学习1):Scheduled Sampling(计划采样)与2. Teacher forcing(教师强制)

自然语言处理&#xff08;扩展学习1&#xff09;&#xff1a;Scheduled Sampling(计划采样)与2. Teacher forcing&#xff08;教师强制&#xff09; 作者&#xff1a;安静到无声 个人主页 作者简介&#xff1a;人工智能和硬件设计博士生、CSDN与阿里云开发者博客专家&#xff0…

C/C++动态内存开辟(详解)

目录 一&#xff0c;mallloc 函数参数&#xff1a; 函数原理&#xff1a; 二&#xff0c;calloc 函数参数&#xff1a; 函数原理&#xff1a; 三&#xff0c;realloc 函数参数&#xff1a; 函数原理: 五&#xff0c;小结 2&#xff09;对开辟空间的越界访问 3&#x…

cnn分类图像cifar10

使用CNN模型来分类图像&#xff0c;数据集采用的cifar10&#xff0c;cifar10共有6万张&#xff0c;这些图像共分为10类。 命名的格式大概是这样的&#xff1a;0_19761.jpg&#xff0c;它的第一个数字表示的就是图像所属的类&#xff0c;分成清楚的就知道了&#xff0c;第0类就是…

Flutter:EasyLoading(loading加载、消息提示)

前言 官方虽然提供了内置的加载指示器和提示信息&#xff0c;但是功能比较简陋&#xff0c;这里推荐&#xff1a;flutter_easyloading CircularProgressIndicator CircularProgressIndicator()加粗样式 ScaffoldMessenger.of(context).showSnackBar(const SnackBar(// 提示…

MySQL(三)SQL优化、Buffer pool、Change buffer

MySQL系列文章 MySQL&#xff08;一&#xff09;基本架构、SQL语句操作、试图 MySQL&#xff08;二&#xff09;索引原理以及优化 MySQL&#xff08;三&#xff09;SQL优化、Buffer pool、Change buffer MySQL&#xff08;四&#xff09;事务原理及分析 MySQL&#xff08;五&a…

泛积木-低代码 搭建 增删改查

文章首发于 增删改查 。 这里我们以增删改查作为示例&#xff0c;演示下从页面创建到各个功能齐全。创建页面的时候&#xff0c;建议接口先写好&#xff0c;当然也可以一边联调一边写接口&#xff0c;当前对增删改查提供以下测试接口&#xff1a; 测试接口 /contactsList 列…

【数据结构】非线性结构之树结构(含堆)

前言 前面的三篇文章已经将线性结构讲述完毕了&#xff0c;下面的文章将会为大家将讲点新东西&#xff1a;非线性结构中的树结构。萌新对这里的知识点相对陌生&#xff0c;建议反复观看&#xff01;&#xff01; 关于线性结构的三篇文章放在下面&#xff1a; 线性表之顺序表 线…

数组与指针

博客内容&#xff1a;数组与指针 文章目录 一、 数组&#xff1f;指针&#xff1f;1.区别与联系大小赋值存储位置 二、指针数组、数组指针&#xff1f;二维数组和二级指针&数组名与数组的区别总结 一、 数组&#xff1f;指针&#xff1f; 数组 相同类型数据的集合 指针 指…

谷歌Bard更新:支持中文提问和语音朗读

ChatGPT不断更新功能&#xff0c;从GPT-3到3.5&#xff0c;再到GPT-4&#xff0c;甚至最新的plus版已经支持图像处理和图表生成&#xff0c;而谷歌Bard却自从推出后就一直很安静&#xff0c;没有什么大动作。眼见被ChatGPT、Claude甚至是文心一言抢去了风头&#xff0c;自然心有…

springcache的使用(小白也看得懂)

简介 SpringCache整合Redis可以使用Spring提供的Cacheable注解来实现对Redis的缓存操作。使用这种方式可以轻松地在应用程序中启用缓存&#xff0c;并且不需要手动编写访问Redis的代码。在配置文件中需要配置Redis的连接信息以及缓存管理器。使用这种方式可以做到轻松配置&…

C++报错:二进制“心<“没有找到接受“std:string“类型的右操作数的运算符(或没有可接受的转换)

1、问题&#xff1a;在进行二维数组的相关计算时报错&#xff1a; 二进制"心<"没有找到接受"std:string"类型的右操作数的运算符(或没有可接受的转换) 2、原因&#xff1a;没有加入头文件——String; 3、解决办法&#xff1a;加上头文件——String; 4、…

GNN学习笔记:A Gentle Introduction to Graph Neural Networks

原文地址&#xff1a; https://distill.pub/2021/gnn-intro/ 不同形式来源的图 Images as graphs 论文中提到将图像建模为一张拓扑图的方法是将图像的每一个像素看作图的一个结点&#xff0c;并将单个像素结点与其相邻的所有像素之间建立一条边。 每一个非边缘的像素结点具…

Linux下做性能分析4:怎么开始

战地分析 性能分析常常是一种战地分析&#xff0c;所以&#xff0c;在我们可以端起咖啡慢慢想怎么进行分析之前&#xff0c;我们要先说说我们在战地上的套路。 战地分析是说在实用环境中发现问题&#xff0c;我们真正需要进行性能分析的场合&#xff0c;通常都没有机会让你反…