Lesson 9 in-class

@harveryslash Here we are also getting back what we had before the convolution (as much as we can, not perfectly recoverable)

1 Like

I assume that if we run this solver for the deconv filter over multiple images, the error should go lower over time as we optimize the deconv over multiple input images. Is that correct?

Is it possible to reduce the size of the input ?
arr_lr = bcolz.open(dpath+‘trn_resized_72.bc’)[:]
arr_hr = bcolz.open(dpath+‘trn_resized_288.bc’)[:]

I have tried it to see the effect but got some mistakes.
If yes how to ?

@Surya501 Yes!

Why deconvolutional output size must be specified:

http://stackoverflow.com/questions/39018767/deconvolution2d-layer-in-keras

While given the size of a convolution kernel and its stride, it is straightforward to compute the output shape of the convolution layer (assuming no padding it's (input - kernel) // stride + 1), but the reverse is not true. In fact, there can be more than one possible input shapes that matches a given output shape of the convolution layer (this is because integer division isn't invertible). This means that for a deconvolution layer, the output shape cannot be directly determined simply from the input shape (which is implicitly known), kernel size and stride - this is why we need to know the output shape when we initialize the layer. Of course, because of the way the deconvolution layer is defined, for some input shapes you'll get holes in its output which are undefined, and if we forbid these cases then we actually can deduce the output shape.

2 Likes

The 127.5 Lambda function at the end of the upsampling network is to normalize the output image?

1 Like

Why use VGG for loss? If we do then wouldn’t we get good results only for the 1000 classes in Imagenet? Can we use pixel to pixel loss instead?

@thejaswi.hr pixel to pixel loss creates blurry outputs

2 Likes

If we’re only using up to block2_conv2, could we pop all layers afterwards and save some computation?

We don’t care about the results after that, correct?

3 Likes

Can you explain the size of targ? It’s the first dimension of the high res * 128? How come?

Can we somehow use the pre-computed weights?

Wait but would popping the unused layers really save anything? I thought he is already only getting the layers he wants with vgg_content = Model(vgg_inp, vgg.get_layer('block2_conv2').output)

1 Like

Intuitively, what features is this model actually learning?

I feel like, if we had some kind of VGG-like model that was trained extremely well in a particular domain of images, then in theory this could do extremely well for low res images in that domain?

Just a random idea I got.
Like we did a doodle regeneration, using the model’s photographs’ weights and then trying to optimize the weights. Is it possible to create a regular image to how would you look if you were a model?!

Style transfer your face with Brad Pitts?

1 Like

Exactly, that’s what I was referring to. Something like that?!

What does it mean to have “stride 1/2” here?

1 Like

@cody that is a deconvolution

I don’t understand the stride = 1/2 either, what does that mean, really?

1 Like