pix2pix GAN

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#设置tensorflow的日志级别
from tensorflow.python.platform import build_info

import tensorflow as tf
import os
# 用于处理文件系统路径的面向对象的库。pathlib 提供了 Path 类,
#该类表示文件系统路径,并提供了很多方法来操作这些路径。
import pathlib
import time
import datetime
from matplotlib import pyplot as plt
from IPython import display

# 列出所有物理GPU设备  
gpus = tf.config.list_physical_devices('GPU')  
if gpus:  
    # 如果有GPU,设置GPU资源使用率  
    try:  
        # 允许GPU内存按需增长  
        for gpu in gpus:  
            tf.config.experimental.set_memory_growth(gpu, True)  
        # 设置可见的GPU设备(这里实际上不需要,因为已经通过内存增长设置了每个GPU)  
        # tf.config.set_visible_devices(gpus, 'GPU')  
        print("GPU可用并已设置内存增长模式。")  
    except RuntimeError as e:  
        # 虚拟设备未就绪时可能无法设置GPU  
        print(f"设置GPU时发生错误: {e}")  
else:  
    # 如果没有GPU  
    print("没有检测到GPU设备。")

dataset_name = "facades"
path_to_zip  = pathlib.Path('./datasets')
PATH = path_to_zip/dataset_name

list(PATH.iterdir())

sample_image = tf.io.read_file(str(PATH/'train/1.jpg'))# 样本图片,还是二进制

sample_image = tf.io.decode_jpeg(sample_image)
print(sample_image.shape) #高256,宽512彩色图片,因为包含两个子图

plt.figure()
plt.imshow(sample_image)

# 您需要将真实的建筑立面图像与建筑标签图像分开,所有这些图像的大小都是 256 x 256
# 定义加载图像文件并输出两个图像张量的函数
def load(image_file):
  # 读取图片文件,并且解码转换成uint8
  image = tf.io.read_file(image_file)
  image = tf.io.decode_jpeg(image)
  w = tf.shape(image)[1]
  w = w // 2
  input_image = image[:, w:, :]#标签图片
  real_image = image[:, :w, :]#真实图片
  #把两个图片转换成 float32 tensors
  input_image = tf.cast(input_image, tf.float32)
  real_image = tf.cast(real_image, tf.float32)
  return input_image, real_image

# 绘制输入图像(建筑标签图像)和真实(建筑立面照片)图像的样本
#调用定义的load方法加载图片并且预处理
inp, re = load(str(PATH / 'train/100.jpg'))
print(inp.shape,re.shape)
plt.figure()
plt.imshow(inp / 255.0)#归一化
plt.figure()
plt.imshow(re / 255.0)

# 定义几个具有以下功能的函数:
# 将每个 256 x 256 图像调整为更大的高度和宽度,286 x 286。
# 将其随机裁剪回 256 x 256。
# 随机水平翻转图像,即从左到右(随机镜像)。
#将图像归一化到 [-1, 1] 范围。

#缓冲池大小
BUFFER_SIZE = 400
#批次大小
BATCH_SIZE = 1
# 图片宽高
IMG_WIDTH = 256
IMG_HEIGHT = 256

# 最近邻插值是一种简单的插值方法,它选择离目标点最近的像素值作为插值结果。
# 这种方法计算速度快,但可能在图像缩放时引入锯齿状的边缘。如果你需要更平
# 滑的缩放效果,可以考虑使用其他插值方法,如双线性插值(tf.image.ResizeMethod.BILINEAR)
# 或双三次插值(tf.image.ResizeMethod.BICUBIC),改变大小肯定涉及填充放大区域

#改变图片大小
def resize(input_image, real_image, height, width):
  input_image = tf.image.resize(input_image, [height, width],
                                method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
  real_image = tf.image.resize(real_image, [height, width],
                               method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
  return input_image, real_image

#定义随机裁剪的方法
# 如果 input_image 和 real_image 在除了批次大小维度之外的其他维度上有不同的形状,tf.stack 函数会抛出错误。
# 因此,在使用 tf.stack 之前,确保你要堆叠的张量在除了堆叠轴之外的所有维度上都有相同的形状是很重要的。
def random_crop(input_image, real_image):
  #先按样本轴堆叠
  stacked_image = tf.stack([input_image, real_image], axis=0)
# 随机裁剪是数据增强(data augmentation)的一种常见技术,它可以帮助模型在训练时看到输入数据的不同变体,从而提高模型的泛化能力。
# 因为裁剪是随机的,所以每次调用 tf.image.random_crop 时,都可能得到不同的裁剪结果。
  cropped_image = tf.image.random_crop(
      stacked_image, size=[2, IMG_HEIGHT, IMG_WIDTH, 3])
  return cropped_image[0], cropped_image[1]

# 标准化图片到 [-1, 1]
def normalize(input_image, real_image):
  input_image = (input_image / 127.5) - 1
  real_image = (real_image / 127.5) - 1
  return input_image, real_image

#转换为tensorflow计算图函数,random_jitter被装饰为TensorFlow的计算图函数,
# 但是否带梯度取决于函数内部的操作。如果函数内部只包含可微分的TensorFlow操作,
# 那么它

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

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

相关文章

Vue2 —— 学习(一)

(二)简单案例 1.实现过程 容器设置 Vue 实例设置 2.实现结果 3.注意事项 (三)Vue 插件 ​编辑三、Vue 模板语法 (一)插值语法 {{ }}: (二)指令语法 v- 四、…

如何更新Code::blocks的MinGW

前言 LVGL V9版本更新了很多新特性,其中windows平台部分也进行了优化,如果你是用的是Code::blocks体验LVGL那么在编译时会不通过;因为如果你使用的是 Code::blocks 20.03并且使用内置的MinGW,那么就会因为MinGW版本过低遇到下面所…

babyAGI(8)-babyCoder5主程序逻辑

前期代码都以阅读完毕,接下来我们来看主程序逻辑,建议大家好好看看流程图,有个流程的影响 1. 创建任务 下面一段代码主要用来创建任务以及打印相关信息,调用了四个agents code_tasks_initializer_agent 初始化任务code_tasks_…

信息系统项目管理师——第18章项目绩效域管理(二)

项目工作绩效域 预期目标 高效且有数的项目绩效 2.适合项目和环境的项目过程 3.干系人适当的沟通和参与 4.对实物资源进行了有效管理 5.对采购进行了有效管理 6.有效处理了变更 7.通过持续学习和过程改进提高了团队能力 绩效要点 1.项目过程 2.项目制约因素 3.专注于工作过…

React - 连连看小游戏

简介 小时候经常玩连连看小游戏。在游戏中,当找到2个相同的元素就可以消除元素。 本文会借助react实现连连看小游戏。 实现效果 实现难点 1.item 生成 1. 每一个图片都是一个item,items数组的大小为size*size。 item对象包括grid布局的位置,…

【爬虫开发】爬虫从0到1全知识md笔记第4篇:Selenium课程概要,selenium的介绍【附代码文档】

爬虫开发从0到1全知识教程完整教程(附代码资料)主要内容讲述:爬虫课程概要,爬虫基础爬虫概述,,http协议复习。requests模块,requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…

入门用Hive构建数据仓库

在当今数据爆炸的时代,构建高效的数据仓库是企业实现数据驱动决策的关键。Apache Hive 是一个基于 Hadoop 的数据仓库工具,可以轻松地进行数据存储、查询和分析。本文将介绍什么是 Hive、为什么选择 Hive 构建数据仓库、如何搭建 Hive 环境以及如何在 Hi…

分解因数

描述 给出一个正整数 a&#xff0c;要求分解成若干个正整数的乘积&#xff0c;即 aa1a2a3…an&#xff0c;并且 1<a1≤a2≤a3≤…≤an&#xff0c;问这样的分解的方案种数有多少。注意到aa 也是一种分解。 输入描述 第 1 行是测试数据的组数 n(1≤n≤10)&#xff0c;后面…

AcWing 4199. 公约数(数学-约数)

给定两个正整数 a a a 和 b b b。 你需要回答 q q q 个询问。 每个询问给定两个整数 l , r l,r l,r&#xff0c;你需要找到最大的整数 x x x&#xff0c;满足&#xff1a; x x x 是 a a a 和 b b b 的公约数。 l ≤ x ≤ r l≤x≤r l≤x≤r。 输入格式 第一行包含两个…

【PaletX】ui组件使用

表单 当表单不是以component和template形式时&#xff0c;不需要patchValue重新赋值 srcObj用于赋值表单初始值 表单校验 优先级&#xff1a;输入过程中的校验 > 焦点离开后的校验 > 点击确定按钮后的校验 适用场景&#xff1a; 输入过程中的校验&#xff1a;焦点进入…

类与对象(一)

目录 一、类的引入和定义 二、类的访问限定符及封装 1&#xff09;访问限定符 2&#xff09;封装 三、类的作用域和实例化 1&#xff09;类的作用域 2&#xff09;实例化 四、类的大小 1&#xff09;类的大小计算方式 2&#xff09;特殊的类的大小 五、this指针 1&…

C++设计模式:观察者模式(三)

1、定义与动机 观察者模式定义&#xff1a;定义对象间的一种1对多&#xff08;变化&#xff09;的依赖关系&#xff0c;以便当一个对象&#xff08;Subject&#xff09;的状态发生比改变时&#xff0c;所有依赖于它的对象都得到通知并且自动更新 再软件构建过程中&#xff0c…

回溯算法|332.重新安排行程 51. N皇后 37. 解数独

332.重新安排行程 力扣题目链接 class Solution { private: // unordered_map<出发机场, map<到达机场, 航班次数>> targets unordered_map<string, map<string, int>> targets; bool backtracking(int ticketNum, vector<string>& result…

蓝桥杯刷题-06-砍树-图遍历DFS⭐⭐⭐⭐

给定一棵由 n 个结点组成的树以及 m 个不重复的无序数对 (a1, b1), (a2, b2), . . . , (am, bm)&#xff0c;其中 ai 互不相同&#xff0c;bi 互不相同&#xff0c;ai ≠ bj(1 ≤ i, j ≤ m)。 小明想知道是否能够选择一条树上的边砍断&#xff0c;使得对于每个 (ai , bi) 满足…

小程序如何设置余额充值和消费功能

小程序中设置余额充值和消费功能非常重要的&#xff0c;通过让客户在小程序中进行余额充值&#xff0c;不仅可以提高用户粘性&#xff0c;还可以促进消费&#xff0c;增加用户忠诚度。以下是如何在小程序中设置余额充值和消费功能的步骤&#xff1a; 1. **设计充值入口**&…

代码随想录-14day:二叉树3

一、二叉树最大深度 最大深度&#xff1a;根节点到最远叶子节点的最长路径上的节点数。 可以使用迭代法和递归法&#xff0c;以递归法为例&#xff1a;还是以递归三要素为基准&#xff0c;进行解决。 int maxDepth(struct TreeNode* root) {// struct TreeNode** NodeList …

【力扣】242. 有效的字母异位词

242. 有效的字母异位词 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出…

使用js的正则表达式匹配字符串里的url,并对url进行修改后替换原来的url

如果要匹配URL并且对其进行一定的修改后替换原来的URL&#xff0c;你需要一个函数&#xff0c;这个函数可以匹配URL&#xff0c;然后对匹配到的URL进行所需要的修改。下面是一个例子&#xff0c;展示了如何实现这样的功能&#xff1a; function replaceAndModifyUrls(text, mo…

2024.3.22力扣每日一题——网格图中最少访问的格子数

2024.3.22 题目来源我的题解方法一 传统的深度优先遍历 超时方法二 优先队列 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2617 我的题解 方法一 传统的深度优先遍历 超时 直接从(0,0)开始深度优先遍历&#xff0c;直到遍历到(m-1,n-1)截止。 优化成记忆化搜索仍然无…

PyTorch搭建Autoformer实现长序列时间序列预测

目录 I. 前言II. AutoformerIII. 代码3.1 Encoder输入3.1.1 Token Embedding3.1.2 Temporal Embedding 3.2 Decoder输入3.3 Encoder与Decoder3.3.1 初始化3.3.2 Encoder3.3.3 Decoder IV. 实验 I. 前言 前面已经写了很多关于时间序列预测的文章&#xff1a; 深入理解PyTorch中…