bodokaiser / piwise

Pixel-wise segmentation on VOC2012 dataset using pytorch.
BSD 3-Clause "New" or "Revised" License
383 stars 86 forks source link

Blank output maps! #8

Open saeedizadi opened 7 years ago

saeedizadi commented 7 years ago

Hi there,

I spent a week working on your code, and contributing to it! But, all I got is the blank prediction maps after convergences! I just found that you've had the same problem with your implementation! Thus, I'm wondering if there is any update on this issue! On the hands, I've got another Theano implementation of UNet which produces the claimed results very well. So, I tried to make the training procedure the same for both implementations (e.g. fixed data, fixed hyper-parameters and so on), but again blank maps with PyTorch!!

BTW, there appeared to be some mistakes with your implementation of UNet, specifically in concatenation. Even after correcting them, the problem exists.

bodokaiser commented 7 years ago

Hi,

yes see this issue.

You can also check out semseg as stated in the README.

I cannot say why there is so bad convergence with my implementation(s) - if I would know I would fix it believe me. That said different researchers tried their luck and did not find the problem - though I don't want to preclude that it could be something really simple (i.e. wrong sign on the loss).

As this is not really my research area - I initially just wrote it together to cross check something else - there is low probability that I will find a solution to this in the near future. I also lack on hardware resources at the moment.

I would be really happy if someone would find the mistake or just PR a complete rewritten u-net, however I am aware that also other people are limited on time.

So to cut a long story short: checkout semseg and/or double check my u-unet implementation if you find something (on u-net or the loss).

Good luck!

saeedizadi commented 7 years ago

Hi, That's so weird! so so weird!! Although there are some problems with your UNet implementation, but I found that the blank issue does not arise from UNet, or generally model since I used the implementations by others while using the rest of your code, and the problem exists!!

I'm going to spend some time on the code. Will update you on this

Thanks Saeed

saeedizadi commented 7 years ago

I finally found the problem!! For the last set of convolutions, that is 128-> 64 -> 64 -> 1, the activation function should not be used! The activation function causes the values to vanish!

I just removed the nn.ReLU() modules on top of these convolution layers and now everything works like a charm!

Saeed

bodokaiser commented 7 years ago

Great work!

Can you submit your changes?

Bodo

Am 26.07.2017 um 04:58 schrieb Saeed Izadi notifications@github.com:

I finally found the problem!! For the last set of convolutions, that is 128-> 64 -> 64 -> 1, the activation function should not be used! The activation function causes the values to vanish!

I just removed the nn.ReLU() modules on top of these convolution layers and now everything works like a charm!

Saeed

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

saeedizadi commented 7 years ago

Sure, I will do a pull request

bodokaiser commented 7 years ago

@saeedizadi I am now working on a different project which utilizes the u-net architecture and found some solutions:

More changes which may improve performance:

saeedizadi commented 7 years ago

@bodokaiser thank you for your information :)

ProNoobLi commented 6 years ago

Hi, Saeedizadi

I seems like I got the similar problem with yours. What's the meaning of your: blank output maps? My forward result will be into one label at every iteration, like: all pixels have the same prediction label.

saeedizadi commented 6 years ago

Hi JiayuanSternLi By blank image, I meant an image in which all pixel labels are 0 or very small values, e.g. 0.01 in the range of [0,1].