Invertible Conv1x1的可逆性,相当于encoder decoder share同一个可逆矩阵,这部分代码通过使用一个reverse参数来控制是原始矩阵还是逆矩阵,一个用于encoder一个用于decoder。思考一下我们之前Decoder用的upsampling(无参数,效果差,依赖UNet Skip Connection接入新信息)和deconv(有参数,独立学习,效果没有更好且浪费参数),是有优势的。OpenAI给的代码中同事出现了一个Shuffle,那个是对Channel的Permutation。Shuffle所带来的矩阵,也是旋转矩阵,参数只有C个,Invertible 1x1参数有C^2个更灵活。分组Invertible具有C^2/num_group个参数,CortexLabs的同事在研发,灵活性介于二者之间。
Affine coupling跟Pixelshuffler(superresolution中使用)互为反操作,两者16年都发了论文,https://arxiv.org/pdf/1605.08803.pdf中第五页描述了所谓CheckerBoard+Channelwise masking,而PixelShuffler从Pytorch官网https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/pixelshuffle.py可以追溯到论文https://arxiv.org/abs/1609.05158,前一篇主要是说encoder不丢东西,后一篇又是针对superresolution的decoder结构说恢复信息。都不是啥新东西。
综合1,2可以发现,我们经常用的Conv3x3降维,Deconv3x3升维,被解构了。
ActNorm很可能适合单个小问题(如人脸)而不是大问题(如imagenet11k)。BatchNorm是针对B这个方向的统计,因此B太小时训练直接挂。因为人脸的布局相对来说较为稳定,因此ActNorm是针对BHW三维统计,也不会出现图中出现gaussian mixture的情况(对Gaussian统计mean std有意义,对Gaussian Mixture统计就没什么意义了)在这种问题上,妈妈再也不怕我B=1了。进一步推演,如果要规避对Gaussian Mixture进行统计,只能用平行于图像(Segmentation的OHEM)或者平行于Channel的乘法Attention(Squeeze and Excitation)处理。
学属性集的embedding地方相当于加个有监督。跟分类互斥不一样,属性集往往不互斥。你如何保证每个属性被学习的时候都是balance的?Glow给的一份Infer的伪代码让我直接想起了Arie Ling二作的文章 https://arxiv.org/pdf/1805.03642.pdf。
领取专属 10元无门槛券
私享最新 技术干货