pix2pixHD代码---数据集处理

news/2024/10/30 21:30:01/

在train文件中:其中dataset是dataloader的方法,而dataloader等于CreateDataLoader。
在这里插入图片描述
所以我们跳到CreateDataLoader:
在这里插入图片描述
在CreateDataLoader中返回的是dataset_loader,是来自于CustomDatasetDataLoader。切调用了initialize。因为CustomDatasetDataLoader是一个类,所以initialize是调用了类里的方法。
我们到CustomDatasetDataLoader中:
在这里插入图片描述
首先我们定义了name方法,调用的时候返回:‘CustomDatasetDataLoader’。接着定义了initialize:
首先定义了数据集dataset:
在这里插入图片描述

dataset来自于AlignedDataset,且调用了initialize方法:
在这里插入图片描述
AlignedDataset继承了BaseDataset,BaseDataset是一个抽象类,方法需要被AlignedDataset重写:
在这里插入图片描述
在AlignedDataset中我们加载数据集,就是len,getitem,ini三要素。
在这里插入图片描述
首先根据标签的通道判断输入的是否是label。如果不是label,self.opt.label_nc == 0,dir_A=‘_A’,否则dir_A=‘_label’。然后获得dir_A的路径。
在这里插入图片描述
根据make_dataset函数将train_label的图片放在一个列表中:
在这里插入图片描述
train_img,train_instance也是同理。
在这里插入图片描述
接着在getitem中随机输入一个索引,根据索引去列表A里面取值,取出的路径通过image打开,打开后是Image格式。然后输入到get_params函数中。
在这里插入图片描述
首先获得图片的大小,接着判断裁剪的方式,默认是不裁剪,缩放到1024x512(read me有讲):
在这里插入图片描述
接着原始图片是2048x1024,(x,y)=rand((2048-512),(1024-512)),返回一个字典,'flip’对应的True或者False。
在这里插入图片描述
根据标签通道进行transfromer变换:
在这里插入图片描述

def get_transform(opt, params, method=Image.BICUBIC, normalize=True):transform_list = []if 'resize' in opt.resize_or_crop:osize = [opt.loadSize, opt.loadSize]transform_list.append(transforms.Scale(osize, method))   elif 'scale_width' in opt.resize_or_crop:transform_list.append(transforms.Lambda(lambda img: __scale_width(img, opt.loadSize, method)))if 'crop' in opt.resize_or_crop:transform_list.append(transforms.Lambda(lambda img: __crop(img, params['crop_pos'], opt.fineSize)))if opt.resize_or_crop == 'none':base = float(2 ** opt.n_downsample_global)if opt.netG == 'local':base *= (2 ** opt.n_local_enhancers)transform_list.append(transforms.Lambda(lambda img: __make_power_2(img, base, method)))if opt.isTrain and not opt.no_flip:transform_list.append(transforms.Lambda(lambda img: __flip(img, params['flip'])))transform_list += [transforms.ToTensor()]if normalize:transform_list += [transforms.Normalize((0.5, 0.5, 0.5),(0.5, 0.5, 0.5))]return transforms.Compose(transform_list)

首先定义一个空列表,根据条件往里面添加:
首先添加__scale_width操作:transforms.Lambda将__scale_width封装到transform中
在这里插入图片描述
在这里插入图片描述
三个参数,图像尺寸,target_w=1024,method=bicubic。
首先ow=2048,oh=1024,w=1024,h=(1024*1024/2048)=512,然后将img插值到(1024,512)。剩下的变换可以根据情况添加。
最后转化为tensor并归一化用compose串起来。
在这里插入图片描述
经过一系列变换后乘以255,标签乘以255转化为灰度图。
对image进行相同的变化,但是不乘以255.如果使用实例图片,和标签进行相同的操作。
最后用一个字典储存下来:
在这里插入图片描述
这样CreateDataset结束,输出的dataset传入到dataloader中。通过调用CustomDatasetDataLoader.load_data即可获得进过dataloader之后的值。
在这里插入图片描述
最后回到train中:
在这里插入图片描述


http://www.ppmy.cn/news/78456.html

相关文章

python 文件操作 , 异常处理 , 模块和包

文件操作 1.写数据 # open(name, mode) # name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。 # mode:设置打开文件的模式(访问模式):只读、写入、追加等。 #1.打开文件---通道建立--申请资源 # w 模式会清空之前的内…

你收藏了那些实用工具类网站?

今天来给大家分享几个众多网友们推荐的,宝藏工具类网站 uIGradients https://uigradients.com/#Flickr 专业的渐变色配色工具网站,配色什么的非常全,也可以按照自己的想法来选择搭配,还能直接获得对应渐变配色的CSS代码&#xff…

Linux内核源码分析-进程调度(五)-组调度

出现的背景 总结来说是希望不同分组的任务在高负载下能分配可控比例的CPU资源。为什么会有这个需求呢,假设多用户计算机系统每个用户的所有任务划分到一个分组中,A用户90个任务,而B用户只有10个任务(这100个任务假设都是优先级一…

JDK8以后接口的新特性

JDK8以前,接口内只能定义抽象方法; JDK8,接口内允许定义默认方法、静态方法; JDK9,接口内允许定义私有方法 default:默认方法 public interface Essay01 {/*** 在接口内定义默认方法*/public default v…

SSM编程---Day 01

目录 一、Maven简介 (一)软件开发中的阶段 (二)Maven能做什么 (三)没有使用maven怎么管理依赖 (四)什么是maven (五)maven中的概念 二、Maven的核心概…

移动应用架构解析:用户界面层、业务逻辑层、数据访问层

移动应用的成功离不开一个良好的架构设计,在移动应用开发过程中,合理的层次结构对于应用的可维护性、可扩展性和可测试性至关重要。 移动应用的常见层次结构包括用户界面层、业务逻辑层、数据访问层,但是随着跨平台开发框架的不断发展&#…

媒体传输协议的演进与未来

音视频应用近年来呈现出迅猛的发展趋势,成为互联网流量的主要载体,其玩法丰富,形态多样,众多繁杂的媒体传输协议也应运而生。LiveVideoStackCon 2022北京站邀请到快手传输算法负责人周超,结合快手在媒体传输上的优化与…

算法分析基础

问题:如何比较不同算法的性能? 分析算法的运行时间 算法分析的原则 归纳基本操作 如:运算、赋值、比较 统一机器性能 假设基本操作代价均为1 统一机器性能后,算法运行时间依赖于问题输入规模与实例 相同输入规模&#xff0c…