deeplabv3+源码之慢慢解析26 第五章utils文件夹(1)ext_transforms.py--2个翻转类和ExtCompose类

news2024/12/26 9:30:42

系列文章目录(更新中)

`
第一章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文件夹(1)backbone文件夹(a1)hrnetv2.py–4个函数和可执行代码
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a2)hrnetv2.py–Bottleneck类和BasicBlock类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a3)hrnetv2.py–StageModule类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(a4)hrnetv2.py–[HRNet类]
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(b1)mobilenetv2.py–2个类和2个函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(b2)mobilenetv2.py–MobileNetV2类和mobilenet_v2函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(c1)resnet.py–2个基础函数,BasicBlock类和Bottleneck类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(c2)resnet.py–ResNet类和10个不同结构的调用函数
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(d1)xception.py–SeparableConv2d类和Block类
第四章deeplabv3+源码之慢慢解析 network文件夹(1)backbone文件夹(d2)xception.py–Xception类和xception函数
第四章deeplabv3+源码之慢慢解析 network文件夹(2)_deeplab.py–ASPP相关的4个类和1个函数
第四章deeplabv3+源码之慢慢解析 network文件夹(3)_deeplab.py–DeepLabV3类,DeepLabHeadV3Plus类和DeepLabHead类
第四章deeplabv3+源码之慢慢解析 network文件夹(4)modeling.py–5个私有函数(4个骨干网,1个模型载入)
第四章deeplabv3+源码之慢慢解析 network文件夹(5)modeling.py–12个调用函数
第四章deeplabv3+源码之慢慢解析 network文件夹(6)utils.py–_SimpleSegmentationModel类和IntermediateLayerGetter类

第五章deeplabv3+源码之慢慢解析 utils文件夹(1)ext_transforms.py.py–2个翻转类和ExtCompose类

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

文章目录

  • 系列文章目录(更新中)
    • 前期准备和说明
    • utils文件夹结构
    • \_\_init__.py
    • ext_transforms.py的导入部分
    • ext_transforms.py需要补充的内容
    • 水平随机翻转 ExtRandomHorizontalFlip类
    • 竖直随机翻转 ExtRandomVerticalFlip类
    • 功能组合 ExtCompose类


前期准备和说明

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

  1. 本章是收尾的章节,既然坚持看到这里,就慢慢把所有部分啃完,体现deeplab慢慢学系列的初心。
  2. 本章包含图片的转换(数据增强)、损失函数计算,图表可视化等内容。
  3. 内容有点杂,但相对前面的学习而言,比较简单。

utils文件夹结构

提示:utils文件夹结构如下。
在这里插入图片描述

  1. 先介绍以下整体结构和__init__.py。
  2. 然后按顺序,本章从ext_transforms.py开始。ext_transforms.py是本章最长的一个文件,但源代码中存在错误(缺东西,本节已补全),main.py对ext_transforms.py有使用,本代码的作用就是各种数据增强。

__init__.py

from .utils import *
from .visualizer import Visualizer #可视化功能
from .scheduler import PolyLR #图表
from .loss import FocalLoss #损失计算

ext_transforms.py的导入部分

#简简单单,都是基本功能
import collections
import torchvision
import torch
import torchvision.transforms.functional as F
import random 
import numbers
import numpy as np
from PIL import Image 
'''(本代码使用的是Pillow库)Pillow是基于PIL库的一个派生分支,它在 PIL 库的基础上增加了许多新的特性。
发展至今,已经成为比PIL本身更具活力的图像处理库。
Pillow 和 PIL 不能共存于同一个环境中,在安装 Pillow 前,需要先卸载 PIL。
Pillow 安装后,导入库的使用方式仍是import PIL,但实际上使用的是 Pillow 库,这里的 PIL 可以看做是 Pillow 库的简称。
'''

ext_transforms.py需要补充的内容


提示:此部分来自于网络上的补充,如果没有这个部分,源代码中的_pil_interpolation_to_str会报错未定义 。

# _pil_interpolation_to_str = {           #网上自补,使用时去掉注释。
#     Image.NEAREST: 'PIL.Image.NEAREST',  #最近相邻插值算法/最近邻法,速度快但精度低,明显可见的锯齿。
#     Image.BILINEAR: 'PIL.Image.BILINEAR', #两次线性插值算法/双线性内插法,平均周围像素颜色来添加像素的方法,该方法可生成中等品质的图像,消除了锯齿现象。
#     Image.BICUBIC: 'PIL.Image.BICUBIC', #两次立方插值算法/立方卷积法,计算精度很高,处理后图像像质损失较小。
#     Image.LANCZOS: 'PIL.Image.LANCZOS', #Lanczos算法,兰索斯窗口函数插值,通常用于多变量内插,例如用于调整大小或旋转一个数字图像。被其视为几个简单过滤器中的‘最佳折中方案’。Antialias比Bicubic的速度要快,但Bicubic的更清晰些。
#     Image.HAMMING: 'PIL.Image.HAMMING', #汉明窗口函数插值。汉明窗口,一种常用的数字信号处理技术,提高接收信号的分辨率。主要作用是在时域上对信号进行平滑加权,抑制信号的端点泄漏,以减小快速傅里叶变换过程中信号的泄漏现象,从而得到更精确的频域信息。
#     Image.BOX: 'PIL.Image.BOX',         #盒采样(Box sampling),盒采样通过将原始图像上的目标像素视为盒子,并对盒子内的所有像素进行采样,确保所有输入像素都对输出有贡献。这种算法的主要弱点是很难优化。
# }

水平随机翻转 ExtRandomHorizontalFlip类

class ExtRandomHorizontalFlip(object):  # 以随机概率水平翻转给定的图像
    """Horizontally flip the given PIL Image randomly with a given probability.
    Args:
        p (float): probability of the image being flipped. Default value is 0.5
    """

    def __init__(self, p=0.5):  #默认概率值0.5
        self.p = p

    def __call__(self, img, lbl):
        """
        Args:
            img (PIL Image): Image to be flipped.  #注,此处img为PIL Image,读入图片为(w,h)。其他多为(h,w),所以后续代码有转换。
        Returns:
            PIL Image: Randomly flipped image.
        """
        if random.random() < self.p:  #如果随机概率小于0.5则翻转。
            return F.hflip(img), F.hflip(lbl)
        return img, lbl

    def __repr__(self):     #Pyhon自我描述功能,object 类提供的 __repr__() 方法总是返回一个对象(类名 + obejct at + 内存地址),这个值并不能真正实现自我描述的功能,必须重写!
        return self.__class__.__name__ + '(p={})'.format(self.p)  #即输出“类+名字+(p=0.5)”此处self.p=0.5,因此是p=0.5。


竖直随机翻转 ExtRandomVerticalFlip类

class ExtRandomVerticalFlip(object): #随机垂直翻转。#除了翻转函数之外,都和水平翻转相同。
    """Vertically flip the given PIL Image randomly with a given probability.
    Args:
        p (float): probability of the image being flipped. Default value is 0.5
    """

    def __init__(self, p=0.5):
        self.p = p

    def __call__(self, img, lbl):
        """
        Args:
            img (PIL Image): Image to be flipped.
            lbl (PIL Image): Label to be flipped.
        Returns:
            PIL Image: Randomly flipped image.
            PIL Image: Randomly flipped label.
        """
        if random.random() < self.p:
            return F.vflip(img), F.vflip(lbl)  
        return img, lbl

    def __repr__(self):
        return self.__class__.__name__ + '(p={})'.format(self.p)

功能组合 ExtCompose类

class ExtCompose(object):  #多操作的组合,图像和标签都操作。
    """Composes several transforms together.
    Args:
        transforms (list of ``Transform`` objects): list of transforms to compose.
    Example:
        >>> transforms.Compose([
        >>>     transforms.CenterCrop(10),
        >>>     transforms.ToTensor(),
        >>> ])
    """

    def __init__(self, transforms):  #通过参数,输入多操作参数。
        self.transforms = transforms

    def __call__(self, img, lbl): #img是指输入图像数据。lbl就是label标签。
        for t in self.transforms:
            img, lbl = t(img, lbl)  #循环进行每一个操作。
        return img, lbl

    def __repr__(self):  #自我描述输出。
        format_string = self.__class__.__name__ + '('
        for t in self.transforms:
            format_string += '\n'
            format_string += '    {0}'.format(t)
        format_string += '\n)'
        return format_string

Tips

  1. 补充:PIL.Image.Nearest/Bilinear/Bicubic/Antialias。
  2. 补充:HAMMING Window汉明窗口。
  3. 补充:图像缩放插值算法。
  4. 补充:Python:__repr__(self) 方法。
  5. 补充:Pytorch的各种transforms转换函数。
  6. 下一个节介绍ext_transforms.py中的2个裁剪类和2个缩放类。

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

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

相关文章

Maven解析

目录 Maven的概念 Pom 项目坐标 仓库 Maven环境搭建 安装jdk 配置maven 配置本地仓库地址 配置阿里云 maven 镜像仓库&#xff0c;下载速度更快 在idea中配置maven ​编辑 pom中名词解释 Maven命令 Maven的概念 Maven 是 Apache 软件基金会的一个开源项目,是一个…

PySide6学习笔记--基础环境的安装配置

PySide6介绍 QT官方发布Qt6.0之后&#xff0c;紧接着于2020年12月10日发布了PySide 6&#xff0c;对应C版的Qt6。从PySide6开始&#xff0c;PySide的命名也会与Qt的大版本号保持一致。需要注意的是使用PySide6开发的程序在默认情况下&#xff0c;不兼容Windows7系统&#xff0c…

QT 使用图表

目录 1、概念 1.1 坐标轴-QAbstractAxis 1.2 系列-QAbstractSeries 1.3 图例-Legend 1.4 图表-QChart 1.5 视图-QChartView 2、 QT 折线图 2.1 Qt 折线图介绍 2.2 Qt 折线图实现 Qt 图表是专门用来数据可视化的控件 Qt 图表包含折线、饼图、棒图、散点图、范围图等。…

英文翻译照片怎么做?掌握这个方法轻松翻译

在现代社会中&#xff0c;英文已经成为了一种全球性的语言&#xff0c;因此&#xff0c;我们在阅读文章或者查看图片时&#xff0c;经常会遇到英文的内容。为了更好地理解这些英文内容&#xff0c;我们需要将其翻译成中文。在本文中&#xff0c;我将探讨图片中英文内容翻译的方…

mysql通过binlog日志恢复误删数据

1、先查看binlog功能是否开启 show variables like %log_bin%;log_bin为ON说明可以使用binlog恢复&#xff0c;如果为OFF说明没有开启binlog。 2、删除部分数据做测试 3、查找binlog文件位置 show variables like %datadir%;cd /var/lib/mysqlls -l删除数据时间是在文件154与…

2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

文章目录 React&#xff1a;构建用户界面的首选Vue&#xff1a;简单优雅的前端框架Angular&#xff1a;Google支持的全面框架Node.js&#xff1a;服务器端的JavaScript运行环境比较不同框架的优势与劣势React&#xff1a;Vue&#xff1a;Angular&#xff1a;Node.js&#xff1a…

数字档案长期保存EEP文件管理和四性检测系统工具

数字(电子)档案EEP封装包工具软件&#xff08;nhdeep&#xff09;&#xff0c;可以生成和导入长期保存标准格式的EEP封装文件&#xff0c;进行目录查看和条目信息查看&#xff0c;以及原文文件的查看。并提供对长期保存EEP封装文件的四性检测功&#xff0c;能保障封装文件质量。…

IP地址SSL证书

在许多企业用例中&#xff0c;公司需要SSL证书作为IP地址。公司使用IP地址通过Internet或Intranet访问各种类型的应用程序。根据组织策略&#xff0c;您希望使用SSL证书保护IP地址。 在本文中&#xff0c;我将向您解释获取IP地址SSL证书的过程&#xff0c;以及哪种类型的SSL证…

三菱PLC与变频器之间无线通讯

在工业现场由PLC远程控制变频器的应用非常常见&#xff0c;如果挖沟布线不便或者变频器在移动设备上&#xff0c;那么采用无线通讯就是最佳方案。 这里我们选用最常用的三菱 FX2N PLC和三菱变频器为例&#xff0c;并结合日系plc专用无线通讯终端DTD435M来说明PLC与变频器之间的…

MySQL 运维篇+单机多实例多版本部署初始化缺少sys库概述

说明&#xff1a;本文讲述MySQL在单机多实例多版本部署情况下初始化后缺少sys库问题方案&#xff1a;初始化数据库前建议暂时将其他实例的Default options&#xff08;/etc/my.cnf等&#xff09;重命名结论&#xff1a;初始化新实例时即使指定相关参数也有可能会受到默认参数的…

浙江某半导体厂房配电室电气节点无线测温方案

摘 要&#xff1a;半导体被誉为“制造业的大脑”&#xff0c;在关系国家安全和国民经济命脉的主要行业和关键领域占据支配地位&#xff0c;是国民经济的重要支柱。 随着数字技术的发展和数字经济在国民经济中所占比重越来越高&#xff0c;半导体产业的重要性还会进一步提升。安…

chat聊天对话智能机器人Model大模型Platform大平台Data大数据支持

解决工作生活中遇到的任何问题&#xff0c;情感陪护&#xff0c;闲聊扯淡&#xff0c;无所不能。 图像描述生成&#xff08;Image Caption&#xff09;是一个融合计算机视觉、自然语言处理和机器学习的综合问题&#xff0c;它类似于翻译一幅图片为一段描述文字。该任务对于人类…

SpringBoot + MyBatisPlus中乐观锁的实现 (精简demo)

乐观锁加注解Version后不需要手动进行加1操作。乐观锁是一种用于解决并发冲突的机制&#xff0c;在数据库中用于保护数据的一致性。Version注解是MyBatisPlus框架中的乐观锁注解&#xff0c;它会在更新数据时自动检查版本号是否一致&#xff0c;如果一致则进行更新操作&#xf…

混合App开发可以怎么玩?

随着越来越多的软件都是以saas或者云端的形式提供&#xff0c;因此&#xff0c;混合App的开发占比越来越大&#xff0c;大厂们纷纷都转向此类的开发。最近看到一些文章&#xff0c;混合App的开发&#xff0c;还能用计算机之父的那套理论--冯诺依曼结构来开开脑洞。 本篇文章&a…

多线程——学习笔记 1

目录 多线程的了解多线程并行和并发的区别Java程序运行原理多线程程序实现的方式1.继承Thread2.实现Runnable 多线程(实现Runnable的原理&#xff09;实现多线程两种方式的区别匿名内部类实现线程的两种方式获取线程名字和设置名字获取当前线程的对象——hread.currentThread()…

allegro env 文件路径

很多人说在cadence安装路径里修改env文件不生效&#xff0c;或者在安装目录里找不到env文件路径。 原因可能是 用户环境变量中的HOME路径修改导致的&#xff0c;allegro会抓取HOME变量定义的路径中的env文件。所以你如果要修改env文件&#xff0c;最好看看HOME路径&#xff0c…

窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器

上一篇文章《如何用窗口函数实现排名计算》中小编为大家介绍了窗口函数在排名计算场景中的应用&#xff0c;但实际上窗口函数除了可以进行单行计算&#xff0c;还可以在每行上打开一个指定大小的计算窗口&#xff0c;这个计算窗口可以由SQL中的语句具体指定&#xff0c;大到整个…

LTMC S/4HANA 2022 – 迁移您的数据

翻译一篇&#xff0c;估计很少人用过这个LTMC功能&#xff0c;更不用说&#xff0c;LTMOM了。一个还没开始用已经被弃用的事务代码&#xff1a; 在这篇博文中&#xff0c;我将解释如何在 S/4HANA 2022 版本中通过“迁移您的数据”应用程序逐步执行数据迁移。如您所知&#xff0…

UE4/5Niagara粒子特效之Niagara_Particles官方案例:2.4->3.2

之前的案例 UE4/5Niagara粒子特效之Niagara_Particles官方案例&#xff1a;1.1-&#xff1e;1.4_多方通行8的博客-CSDN博客 UE4/5Niagara粒子特效之Niagara_Particles官方案例&#xff1a;1.5-&#xff1e;2.3_多方通行8的博客-CSDN博客 2.4 Location Events 这次的项目和之…

VS2022解决Protobuf compiler version 23.4 doesn‘t match library version 4.23.4

在使用Visual Studio 2022MinGWCMake作为开发环境时&#xff0c;如果项目中使用了Protobuf&#xff0c;则在CMake运行时&#xff0c;可能会出现Protobuf compiler version 23.4 doesnt match library version 4.23.4的问题&#xff1a; 1> [CMake] CMake Warning at C:/Pro…