
<a id="n25-title"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-title)


# 没有配对照片，还能学会夏天变冬天吗？

王德泉 · Coding with AI · Lecture 04


<a id="n25-4538e7254437"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-4538e7254437)

现在手里有两组独立照片：夏景四张，冬景五张。数量、顺序和摆放都不代表配对。我们知道两组各是什么季节，却不知道哪张夏景应当转换成哪张冬景。这类数据减轻了逐图采集与对齐的要求，也留下一个缺口：目标域分布告诉我们冬景通常像什么，没有直接说明这栋房子的冬景是哪一张。


<a id="n25-f1265018b071"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-f1265018b071)

CycleGAN 增加两种互补检查。第一种看外观：夏景转成的候选要像冬景，反方向候选要像夏景。第二种看往返：先把 A 的夏景变成冬景候选，再变回夏景，应恢复最初的 A。这里比较的是每条循环的起点和终点；中间并没有一张指定的冬景照片供逐像素批改。


<a id="n25-cd725b671c6b"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-cd725b671c6b)

为什么还要做另一方向？只检查夏→冬→夏，主要约束的是从夏域出发的信息是否可恢复；从冬域出发也做冬→夏→冬，才能把相应的要求加在另一域的数据上。训练因此涉及两个转换器、两种域外观反馈以及双向循环。使用时若只要把一张夏景变成冬景，通常只走夏→冬这一条；训练中的检查部件不必全部留在单次使用路径里。


[课程图解] 两条循环各自回到本行起点，中间域外观没有给出逐图语义答案。；图中标签与关系：回得来，房子就一定对了吗？ A 夏 · 起点 A 冬 · 跨域候选 A 夏 · 重建 冬景外观？ 与本行起点比重建 B 冬 · 起点 B 夏 · 跨域候选 B 冬 · 重建 夏景外观？ 与本行起点比重建
两条循环各自回到本行起点，中间域外观没有给出逐图语义答案。


<a id="n25-2cde9a91808f"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-2cde9a91808f)

**“变回来连原图都一样了，中间怎么还能错？”** 往返成功说明保留了足以恢复起点的信息，却没有单独证明中间图保持了房屋身份。想象一个翻译者把甲的名字换成乙，另一个翻译者懂这套暗号，再把乙换回甲：回得来，但中途说的对象变了。


<a id="n25-4febf41959f4"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-4febf41959f4)

网络结构、数据中的不对称性及其他约束，可能帮助真实任务得到有用结果；不能由一个逻辑缺口推出方法完全无效。反过来，不能把实践中的好样例提升为“循环必然确定语义对应”的保证。课堂季节图只说明检查的职责，并非实际训练的 CycleGAN 输出。


<a id="n25-0030f4ac8585"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-0030f4ac8585)

下一页把这个疑问变成可逐项检查的反例：三栋房子组成一个有限世界，让域外观和往返都通过，却故意把每栋房子配错。


<a id="n25-states"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-states)


## 画面怎样推进


<a id="n25-b0"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-b0)

两组独立照片只提供域信息，没有逐图对应答案。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N25.html?step=b0)


<a id="n25-b1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-b1)

夏到冬的候选接受冬景外观检查，回程接受与本行夏景起点的重建比较。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N25.html?step=b1)


<a id="n25-b2"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-b2)

反向循环对冬域起点施加同类检查；两种回环都正确仍不保证跨域身份对应。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N25.html?step=b2)


<a id="n25-materials"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-materials)


## 继续阅读与实验


<a id="n25-learning-unit-001"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-learning-unit-001)


## 为什么夏→冬→夏还要再配一条反向循环？


<a id="n25-learning-unit-002"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-learning-unit-002)

记G把夏景变为冬景，F把冬景变为夏景。F(G(x))≈x检验从夏域出发能否恢复原图；G(F(y))≈y则把同样要求加到冬域输入。每条循环知道起点，并据此批改终点，中间没有一张唯一指定的另一季照片。


<a id="n25-learning-unit-003"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-learning-unit-003)

两种域判别器检查中间图像是否像目标季节；循环检查信息能否恢复。二者结合比只要求“看起来像冬天”更强，却仍没有指定同一栋房屋的跨季对应。使用时若只需夏转冬，一般只走G，训练检查部件无需全部参与出图。


<a id="n25-learning-unit-004"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-learning-unit-004)

接着读：[两种域反馈](https://codingai-lec04.pages.dev/lecture.html#ch04-cyclegan-setup)与[双向循环究竟比较什么](https://codingai-lec04.pages.dev/lecture.html#ch04-two-cycles)。


<a id="n25-chapter-reading"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-chapter-reading)


### [CLS 04 · 对抗反馈与图像翻译](https://codingai-lec04.pages.dev/lecture.html#ch04)

按连续正文理解这条方法的训练信号、使用过程与算例；数学与实践在相关问题旁展开。

先看：第4章，从对象和问题开始


<a id="n25-lab08-practice"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-lab08-practice)


### [LAB 08 · 生成器与判别器的真实反馈](https://codingai-lec04.pages.dev/course/notebooks/f16324b960a446e2aa03168c17e9fc0b.html)

固定生成起点比较训练前中后；改变 D:G 更新比，分别读近模式比例与模式覆盖。

先看：先看保存结果与读图解释


<a id="n25-lab03-practice"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-lab03-practice)


### [LAB 03 · CycleGAN：可逆不等于语义正确](https://codingai-lec04.pages.dev/course/notebooks/caf19cffbd744fafb371912863a03e30.html)

先读本册保存结果，再按实现顺序核对一个算例；最后只改一个变量。

先看：先看保存结果与读图解释


<a id="n25-material-1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-material-1)


### [Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks](https://junyanz.github.io/CycleGAN/CycleGAN.pdf)

沿双生成器和双循环阅读，分别找域外观与起点重建各自在比较什么。

先看：第3节、图2


<a id="n25-material-2"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N25.html#n25-material-2)


### [LAB 03｜可逆不等于语义正确](https://deepnote.com/project/6f83a923-d155-47be-be58-680db701ff7f/notebook/caf19cffbd744fafb371912863a03e30)

先预测：边际匹配、循环正确与语义正确是否等价，再看有限形状世界的精确枚举。

先看：“三个判断分开计算”

