deeplabv3+源码之慢慢解析 第二章datasets文件夹(1)voc.py--voc_cmap函数和download_extract函数

news2024/11/27 14:32:45

系列文章目录(更新中)

第一章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个类]
总结

文章目录

  • 系列文章目录(更新中)
    • 前期准备和说明
    • 总体目录
    • __init__.py
    • voc.py导入
    • DATASET_YEAR_DICT字典
    • voc_cmap函数
    • download_extract函数


前期准备和说明

提示:源码众多,此次选这个版本pytorch版

  1. 已经搞明白了第一章各个函数的意图。
  2. 本章讲述的是数据预处理相关的代码。
  3. 每次只说一个大函数或大类(如果函数和类足够小,就讲多个),尽量足够简单。

总体目录

在这里插入图片描述

提示:本章讲解的是总体结构如下datasets文件夹下的内容。

  1. data文件夹下存放的是下载后解压的数据,总体上readme.md说的挺详细的,在第一章的get_dataset函数中有介绍和截图,可以参阅。
  2. 从本章起,init.py不做单独介绍(作用是将文件夹变为一个Python模块),在每章的第一节作为一个部分简要介绍。Python中的基础薄弱的,init.py的作用看此链接。

init.py

#从两个文件模块导入了两个类,后文有详细说明
from .voc import VOCSegmentation
from .cityscapes import Cityscapes

voc.py导入

#都是基本操作
import os
import sys
import tarfile
import collections
import torch.utils.data as data
import shutil
import numpy as np

from PIL import Image
from torchvision.datasets.utils import download_url, check_integrity

  1. 导入部分,都是常用包,不理解的单独搜索即可。
  2. voc.py中一共由4个部分组成:1个字典DATASET_YEAR_DICT ,2个函数voc_cmap函数和download_extract函数,1个类VOCSegmentation,本节说除了类的其他3个部分。

DATASET_YEAR_DICT字典

字典部分就是列举了数据集每个年份的下载链接url,文件名filename,校验码md5,和对应的目录路径base_dir。

DATASET_YEAR_DICT = {
    '2012': {
        'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar',
        'filename': 'VOCtrainval_11-May-2012.tar',
        'md5': '6cd6e144f989b92b3379bac3b3de84fd',
        'base_dir': 'VOCdevkit/VOC2012'
    },
    '2011': {
        'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2011/VOCtrainval_25-May-2011.tar',
        'filename': 'VOCtrainval_25-May-2011.tar',
        'md5': '6c3384ef61512963050cb5d687e5bf1e',
        'base_dir': 'TrainVal/VOCdevkit/VOC2011'
    },
    '2010': {
        'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2010/VOCtrainval_03-May-2010.tar',
        'filename': 'VOCtrainval_03-May-2010.tar',
        'md5': 'da459979d0c395079b5c75ee67908abb',
        'base_dir': 'VOCdevkit/VOC2010'
    },
    '2009': {
        'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2009/VOCtrainval_11-May-2009.tar',
        'filename': 'VOCtrainval_11-May-2009.tar',
        'md5': '59065e4b188729180974ef6572f6a212',
        'base_dir': 'VOCdevkit/VOC2009'
    },
    '2008': {
        'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2008/VOCtrainval_14-Jul-2008.tar',
        'filename': 'VOCtrainval_11-May-2012.tar',
        'md5': '2629fa636546599198acfcfbfcf1904a',
        'base_dir': 'VOCdevkit/VOC2008'
    },
    '2007': {
        'url': 'http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar',
        'filename': 'VOCtrainval_06-Nov-2007.tar',
        'md5': 'c52e279531787c972589f7e41ab4ae64',
        'base_dir': 'VOCdevkit/VOC2007'
    }
}

voc_cmap函数

提示:新手注意:这个函数是处理VOC数据集特有的,自己的数据集不一定要使用,对比cityscape数据集就没有。此处结果大小返回有256个,只用到前21个对应VOC数据集的21个标注类,其他的为未标注。后附补充链接。

def voc_cmap(N=256, normalized=False):
    def bitget(byteval, idx):
        return ((byteval & (1 << idx)) != 0)   #后补链接。1<<idx,把1左移idx位,相当于1乘以2^idx。byteval与2^idx按位进行与操作(全1为1,其他的都是0),看结果不等于0则返回True,等于0则返回False.

    dtype = 'float32' if normalized else 'uint8'
    cmap = np.zeros((N, 3), dtype=dtype)
    for i in range(N):       #N=256,即0-255
        r = g = b = 0
        c = i
        for j in range(8):
            r = r | (bitget(c, 0) << 7-j)  #单纯的计算,如第一个循环bitget(0, 0)=False,False<<7得到0,0|0得到0。经过8次循环得到一个r的数值。
            g = g | (bitget(c, 1) << 7-j)   #同上过程,经过8次循环得到一个g的数值。
            b = b | (bitget(c, 2) << 7-j)   #同上过程,经过8次循环得到一个b的数值。
            c = c >> 3                 #右移3位,即除以8.

        cmap[i] = np.array([r, g, b])  #经过256次循环得到一个cmap数组。这个数组的值是固定的,需要的话,可以单独输出看一下。但其中只有前21个对应VOC数据集的21个颜色(即21个类)。

    cmap = cmap/255 if normalized else cmap
    return cmap

download_extract函数

提示:此函数位于文件末尾,就是数据的下载校验和解压缩。

def download_extract(url, root, filename, md5):               #按url下载,MD5校验
    download_url(url, root, filename, md5)     #download_url来自torchvision.datasets.utils,导入的最后一行。
    with tarfile.open(os.path.join(root, filename), "r") as tar:   #tar文件解压缩
        tar.extractall(path=root)

Tips

  1. 补python中的左移<<和右移>>运算

  2. 补VOC数据集21个类,21种颜色说明。

  3. 下一节是VOC数据集最重要的VOCSegmentation类。

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

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

相关文章

JS UMD规范实现

UMD实现范例 (function (root, factory) {if (typeof module object && typeof module.exports object) {console.log(是commonjs模块规范&#xff0c;nodejs环境);var depModule require(./umd-module-depended);module.exports factory(depModule);} else if (t…

ElasticSearch入门教程--集群搭建和版本比较

文章目录 一、ElasticSearch 集群二、Elasticsearch的核心概念2.1、分片&#xff08;Shards&#xff09;2.2、副本&#xff08;Replicas&#xff09;2.3、路由计算2.4、倒排索引 三、Kibana简介四、Spring Data ElasticSearch 一、ElasticSearch 集群 Elasticsearch 集群有一个…

python pytorch 纯算法实现前馈神经网络训练(数据集随机生成)-续

python pytorch 纯算法实现前馈神经网络训练&#xff08;数据集随机生成&#xff09;-续 上一次的代码博主看了&#xff0c;有两个小问题其实&#xff0c;一个是&#xff0c;SGD优化的时候&#xff0c;那个梯度应该初始化为0&#xff0c;还一个是我并没有用到随机生成batch。 …

Flowable边界事件-定时边界事件

定时边界事件 定时边界事件一、定义1. 图形标记2. 完整的流程图3. XML标记 二、测试用例2.1 定时边界事件xml文件2.2 定时边界事件测试用例 总结 定时边界事件 一、定义 时间达到设定的时间之后触发事件 由于定时边界事件和开始定时事件几乎差不多&#xff0c;四种情况我就不一…

14、双亲委托模型

双亲委托模型 先直接来看一幅图 双亲委派模型的好处&#xff1a; 主要是为了安全性&#xff0c;避免用户自己编写的类动态替换Java的一些核心类&#xff0c;比如 String。 同时也避免了类的重复加载&#xff0c;因为JVM中区分不同类&#xff0c;不仅仅是根据类名&#xff0c…

React 新版官方文档 (二) useState 用法详解

背景 本文默认读者对 useState 有最为基本的了解&#xff0c;比如知道他的写法应当是怎样的&#xff0c;下面着重介绍部分重要的、在开发过程中会踩的坑和一些特性&#xff0c;最后动手实现一个最基本的 useState 代码 useState ⭐️ 注意事项: 状态只在下次更新时异步变化&…

Shiro教程(一):入门概述与基本使用

Shiro 第一章&#xff1a;入门概述 1.1 Shiro是什么 Apache.Shiro是一个功能强大且易于使用的Java安全&#xff08;权限&#xff09;框架。Shiro可以完成&#xff1a;认证、授权、加密、会话管理、与Web集成、缓存等。借助Shiro可以快速轻松地保护任何应用程序——从最小的移…

用于3D渲染和平面设计应该怎么选择显卡?

首先了解快速解决3D渲染本地配置不足&#xff0c;节省硬件成本的方法&#xff1a; 本地电脑资源不足&#xff0c;在不增加额外的硬件成本投入的情况下&#xff0c;想要快速提升渲染速度&#xff0c;可使用渲云云渲染&#xff0c;且可批量渲染&#xff0c;批量出结果&#xff0…

centos7密码忘记恢复方法

首先启动系统看到如下界面&#xff1a; 然后按"e"键&#xff0c;看到下面的界面 然后使用"↓"按键移动光标&#xff0c; 移动到linux16 将上图中红色箭头指向的ro替换成下图中画红线的内容&#xff1a; ro替换成rw init/sysroot/bin/sh。 然后按CTRLX进入…

【ABAP】数据类型(五)「结构体概要」

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较…

Spring Cloud | No URLs will be polled as dynamic configuration sources.

添加config.properties文件就行了&#xff0c;内容为空的都可以 加上该文件再次运行

基于STM32设计的简易手机

一、项目介绍 基于STM32设计的简易手机可以作为智能手表的模型进行开发&#xff0c;方便老人和儿童佩戴。项目主要是为了解决老年人或儿童使用智能手表时可能遇到的困难&#xff0c;例如操作困难、功能复杂等问题。 在这个项目中&#xff0c;采用了STM32F103RCT6主控芯片和SI…

Effective Java(第三版)目录

本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库java.lang、java.util和java.io&#xff0c;以及子包java.util.concurrent和java.util.function等。本书也会时不时地讨论到其他的类库。 本书一共包含90个条目&#xff0c;每个条目讨论一条规则。这些规则…

驱动 day8 作业

1.在内核模块中启用定时器&#xff0c;定时1s,让led1 一秒亮、一秒灭 2.基于gpio子系统完成LED灯驱动的注册&#xff0c;应用程序测试 1.mychrdev_timer.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io…

Qt DAY5 Qt制作简易网络聊天室

服务器 widget.h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QVector>//向量&#xff0c;函数类模板 #include <QMessageBox>namespace Ui { class Widget; }class Wid…

STM32+FreeRTOS 使用SystemView监控系统

前言 本文以STM32F407ZET6 FreeRTOS V9.0作为演示&#xff0c;其它的Cortex M芯片同样可以参考此文&#xff0c;其他内核和RTOS理论上也支持&#xff0c;本文暂时不做研究。 所以开始阅读本文前&#xff0c;需要一块能运行FreeRTOS的Cortex M芯片&#xff0c;如果没有移植好…

发一下接口自动化测试框架(python3+requests+excel)

Git&#xff1a; https://github.com/lilinyu861/Interface-Test 环境配置&#xff1a; 开发工具&#xff1a;pycharm2018Excel 开发框架&#xff1a;python3requestsexcel 接口自动化测试框架介绍&#xff1a; 此接口测试框架&#xff0c;首先由用户设计原始的测试用例并为…

webpack笔记二

文章目录 背景拆分环境清除上次构建产物插件&#xff1a;clean-webpack-plugin合并配置文件插件&#xff1a;webpack-merge实时更新和预览效果&#xff1a;webpack-dev-server babel配置参考 背景 webpack笔记一 在前面的学习&#xff0c;完成了webpack的基本配置&#xff0c…

C++教程——const修饰指针、结构体、文件操作

const修饰指针 常量指针 指针常量 const既修饰指针&#xff0c;又修饰常量 指针与数组 结构体 通过指针访问结构体变量中的数据 结构体中const使用场景 文件操作 写文件 读文件 读取数据的方式 二进制读写文件 写文件 读文件