-
Notifications
You must be signed in to change notification settings - Fork 951
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Checkerboard artifact free sub-pixel convolution #862
Comments
Using it to train a network now, it seems to work well. Thanks for the heads up! |
Great! What I actually meant with "would you like to give this a try" was "would you like to try turning this into a pull request for Lasagne"? :) If my implementation seems to do the right thing, it would mostly be a matter of finding a suitable name, documenting it, and adding tests. See http://lasagne.readthedocs.io/en/latest/user/development.html#how-to-contribute for help. Let me know if you're up to it! |
I can give it a shot next week. |
@f0k: This is an amazing extension that you just implemented! I've just read the paper and it seems to improve image generation a lot. Could you please explain how to exactly initialize the sub kernels? I don't understand how to "...initialize W0 and then copy the weights to the rest of the sub kernels...", as they explain in the paper. Can I just take a Glorot/Xavier initialized sub kernel and copy this initialization to all the other sub kernels? |
You basically initialize weights for smaller convolution kernels (scaled down by the stride, this is what they refer to as subkernels), and then upscale the kernels to their intended size by nearest neighbor interpolation (= by replicating the pixel values). This ensures the transposed convolution initially behaves like a small convolution followed by nearest neighbor upscaling, and then refines the weights from there. |
@lhegen tensorflow implementation is here: https://github.com/kostyaev/ICNR |
Would be great to implement the initialization scheme proposed in https://arxiv.org/abs/1707.02937 and recommend it in the
TransposedConv2DLayer
. Could be a "meta-initializer" that can be used to wrap any of the existing initializers (wrappingGlorotUniform
by default). Should tackle #858 on the way (i.e., ensure the gain is chosen correctly -- I think this would come for free).The implementation would be something like:
The name is taken from the paper, a less cryptic one would be preferred.
@stephenlombardi: Since you're experimenting with convolutional autoencoders, would you like to give this a try?
The text was updated successfully, but these errors were encountered: