CycleGAN(四)inference过程与model定义

本文详细介绍了CycleGAN模型的推理过程,包括模型调用位置、前馈运算原理、实验结果解释以及模型结构等内容。通过实际案例说明了模型如何实现不同类别间的图像转换。

背景:我们需要搞懂cycleGAN如何对已有图片进行inference

目录

一、嵌套位置

1.1 调用位置

1.2 inference调用的函数

二、前馈运算

2.1 forward

2.2 实验结果及解释

三、模型

3.1 模型定义

3.2 定义loss

3.3 模型结构


一、嵌套位置

1.1 调用位置

test.py之中,很容易看到调用inference的部分

    for i, data in enumerate(dataset):
        if i >= opt.num_test:  # only apply our model to opt.num_test images.
            break
        model.set_input(data)  # unpack data from data loader
        model.test()           # run inference
        visuals = model.get_current_visuals()  # get image results
        img_path = model.get_image_paths()     # get image paths

1.2 inference调用的函数

二、前馈运算

2.1 forward

    def forward(self):
        """Run forward pass; called by both functions <optimize_parameters> and <test>."""
        self.fake_B = self.netG_A(self.real_A)  # G_A(A)
        self.rec_A = self.netG_B(self.fake_B)   # G_B(G_A(A))
        self.fake_A = self.netG_B(self.real_B)  # G_B(B)
        self.rec_B = self.netG_A(self.fake_A)   # G_A(G_B(B))

 

  • real_A输入netG_A 生成 fake_B
  • fake_B输入netG_B生成fake_A
  • real_B输入netG_B生成fake_A
  • fake_A输入netG_A生成rec_B
  • 即fake就是根据real通过生成器G生成的
  • rec就是re-cycle,就是A通过两次生成器返回的A

2.2 实验结果及解释

这也给实验结果一定的解释:

  • 训练时模型是从trainA是正常布料,trainB是棉布料,测试时testA是正常,testB是撕裂布料
  • 即训练: 正常——棉   ,模型是从正常布料到棉布料的迁移
  • 测试:正常——破裂

   

分别是realA,fakeA,recA

   

分别是realB,fakeB,recB

三、模型

3.1 模型定义

base_model.py与cycle_gan_model.py之中定义了模型,loss等各种信息。

3.2 定义loss

具体参见:

CycleGAN(五)loss理解及更改与实验

初始化时定义了几种loss的名称,后面定义了backward_D_basic和backward_G

3.3 模型结构

    def forward(self):
        """Run forward pass; called by both functions <optimize_parameters> and <test>."""
        self.fake_B = self.netG_A(self.real_A)  # G_A(A)
        self.rec_A = self.netG_B(self.fake_B)   # G_B(G_A(A))
        self.fake_A = self.netG_B(self.real_B)  # G_B(B)
        self.rec_B = self.netG_A(self.fake_A)   # G_A(G_B(B))

### 关于 Cycle 的定义应用 在编程和数据结构领域,“cycle”通常指代循环或者周期性的行为。以下是关于“cycle”的一些核心概念及其应用场景: #### 1. **Cycle in Programming** 在程序设计中,`cycle` 可能指的是某种重复执行的操作或过程。例如,在 ARM 汇编语言编程中,指令的执行可能涉及多个阶段,这些阶段可以被看作是一个 `cycle` 或者流水线的一部分[^1]。 对于大多数现代处理器架构而言,一个完整的操作可能会分解成若干个子任务,每个子任务在一个特定的时间间隔内完成。这种时间间隔被称为时钟周期(clock cycle)。因此,理解 `cycle` 对优化性能至关重要。 #### 2. **Cycle in Data Structures** 在数据结构中,特别是图论方面,`cycle` 表示一种特殊的路径形式——即从某个节点出发并最终返回到该节点的一条闭合路径。如果存在这样的路径,则称此图为有环图(cyclic graph),反之则称为无环图(acyclic graph)。 检测图中的环是一种常见的算法需求,可以通过深度优先搜索(DFS)或其他方法实现。下面展示了一个简单的 Python 实现来判断是否存在环: ```python def has_cycle(graph, node, visited, rec_stack): visited[node] = True rec_stack[node] = True for neighbor in graph.get(node, []): if not visited[neighbor]: if has_cycle(graph, neighbor, visited, rec_stack): return True elif rec_stack[neighbor]: return True rec_stack[node] = False return False def detect_cycle(graph, num_nodes): visited = [False] * (num_nodes + 1) rec_stack = [False] * (num_nodes + 1) for node in range(1, num_nodes + 1): if not visited[node]: if has_cycle(graph, node, visited, rec_stack): return True return False ``` 上述代码片段展示了如何通过递归调用来识别给定图中存在的任何潜在环路[^3]。 #### 3. **Big Data Contexts** 当讨论大数据处理框架时,`cycle` 还可表示整个工作流的一个迭代部分。比如 Hadoop MapReduce 中的任务调度机制就涉及到多次读取输入文件、映射转换以及后续规约计算的过程;每一个这样独立运行的小单元都可以视为一次作业生命周期内的单次运转或者说 “cycle”。此外,在实时分析场景下,持续监控流入的数据源同样遵循类似的模式—不断采集新批次的信息加以解析评估直至满足终止条件为止[^2]。 --- ### 总结 综上所述,无论是在低级硬件层面还是高级抽象模型里头,“cycle” 都扮演着极其重要的角色。它既可以代表物理意义上的定时脉冲信号驱动下的动作序列,也可以象征逻辑上的反复运算流程或者是拓扑关系里的闭环现象等等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祥瑞Coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值