带跳跃的生成器(U-Net)
图像到图像转换问题的一个定义(关键)特征是它们将高分辨率的输入网格映射到高分辨率的输出网格。 另外,对于我们考虑的问题,输入和输出的表面外观不同,但是两者都是相同基础结构的绘制。 因此,输入中的结构与输出中的结构大致对齐。 我们围绕这些考虑因素设计生成器网络架构。
针对该领域中的问题的许多先前解决方案[40、52、27、60、56]已经使用了编码器-解码器网络[24]。 在这样的网络中,输入要经过一系列层,这些层逐渐地降低采样率,直到达到瓶颈层为止,在这一点上,过程是相反的。 这样的网络要求所有信息流都经过包括瓶颈在内的所有层。 对于许多图像翻译问题,在输入和输出之间共享大量的底层信息,因此希望将这些信息直接穿梭网络。 例如,在图像彩色化的情况下,输入和输出共享突出边缘的位置。
为了给生成器提供一种绕过瓶颈的方法,以获取诸如此类的信息,我们添加了跳过连接,以遵循“ U-Net”的一般形状[47]。 具体来说,我们在第i层和第n层n-i之间添加跳过连接,其中n是总层数。 每个跳过连接仅将第i层的所有通道与第n - i层的通道连接在一起。
生成器也是一种迭代器
生成器也是一种迭代器,但是你只能对其迭代一次[1]。这是因为它们并没有把所有的值存在内存中,而是在运行时生成值。你通过遍历来使用它们,要么用一个“for”循环,要么将它们传递给任意可以进行迭代的函数和结构。大多数时候生成器是以函数来实现的。然而,它们并不返回一个值,而是yield(暂且译作“生出”)一个值。