ControlNet
ControlNet可以添加的控制条件类型
Canny Edge, Hough lines, User scrobbles, Human Keypoints, Segmentation maps, shape normals ,depth.
多个条件可以叠加,将controlnet的结果相加即可。
ControlNet的结构
会将SD的Unet的Encoder和Middle做trainable copy,并且条件输入时和输出时会过一个Zero-initialized conv。然后在Skip connection时,与原网络的部分相加后,与Decoder的concat。
Zero-conv的结构?为什么要零初始化?
Zero-conv是w和b初始化为0的1*1卷积层。使用零初始化的目的是:在训练初期时,trainable copy不会对原始模型产生有害的噪声。
ControlNet推理时的条件控制
CFG resolution weighting:使用CFG推理时,会同时计算cond和uncond。如果同时将conditioning image加到uncond和cond,会完全忽视CFG guidance;如果只加到cond,将会使得guidance太强。
提出的方法是:将conditioning image只加到cond,但是每次在skip connectionn加的时候会根据分辨率添加一个权重w=64/h,h为分辨率大小。通过这样,可以减轻guidance的强度。
T2I-Adapter
T2I-Adapter可以添加的控制条件类型
Sketch map, Semantic segmentation map, Keypoints , color , depth maps
T2I-Adapter的模型结构,以及它作用的位置
Adapter结构由四个特征提取block和三个downsample block组成,输入分辨率为512 * 512。初始时,将condition map使用pixel unshuffle降采样到64 * 64。然后在每一层scale会输出一个feature,对应SD encoder中的分辨率大小。这四个feature会分别加到SD的UNet encoder的中间feature上。
起作用的位置是Unet的encoder层,会在每个scale与中间feature相加。
T2I-Adapter的多条件控制
无需额外训练,只需要将多个条件的feature加权相加即可。
T2I-Adapter的采样策略
实验中发现,将time embedding输入adapter对guidance能力有帮助,但如果每个去噪步都加guidance会过于繁琐。
文中最后发现,在去噪的中后阶段guidance几乎不起作用,大部分内容都是在早期起作用。因此在训练时,当采集的t是中后期的t,则忽略guidance;如果是早期的,则正常加guidance。推理使用DDIM采样时,也采用non-uniform sampling。即增大t落在早期阶段的概率(这里采用了cubic function)