wasidennis / AdaptSegNet

Learning to Adapt Structured Output Space for Semantic Segmentation, CVPR 2018 (spotlight)
847 stars 203 forks source link

loss values are not changed due to normalization of the input image #109

Closed crazy-zxx closed 9 months ago

crazy-zxx commented 9 months ago

I tried to apply this code to a small object semantic segmentation task with only two categories, but encountered some problems.

My loss function values (loss_adv1, loss_adv2 , loss_D1 , loss_D2 ) are almost always 0.693 .

iter =    0/250000, loss_seg1 = 0.625 loss_seg2 = 0.570 loss_adv1 = 0.695, loss_adv2 = 0.689 loss_D1 = 0.693 loss_D2 = 0.693
iter =    1/250000, loss_seg1 = 0.327 loss_seg2 = 0.462 loss_adv1 = 0.610, loss_adv2 = 0.785 loss_D1 = 0.697 loss_D2 = 0.697
iter =    2/250000, loss_seg1 = 0.503 loss_seg2 = 0.581 loss_adv1 = 0.686, loss_adv2 = 0.708 loss_D1 = 0.693 loss_D2 = 0.693
iter =    3/250000, loss_seg1 = 0.544 loss_seg2 = 0.604 loss_adv1 = 0.724, loss_adv2 = 0.674 loss_D1 = 0.694 loss_D2 = 0.693
iter =    4/250000, loss_seg1 = 0.541 loss_seg2 = 0.625 loss_adv1 = 0.704, loss_adv2 = 0.678 loss_D1 = 0.693 loss_D2 = 0.693
iter =    5/250000, loss_seg1 = 0.347 loss_seg2 = 0.492 loss_adv1 = 0.672, loss_adv2 = 0.694 loss_D1 = 0.693 loss_D2 = 0.693
.....

The above problem occurs when I normalize the image to the range [0.1]. When I get the output below without normalizing the image, it seems the problem is solved.

iter =    0/500000, loss_seg1 = 0.745 loss_seg2 = 0.515 loss_adv1 = 0.690, loss_adv2 = 0.697 loss_D1 = 0.693 loss_D2 = 0.693
iter =    1/500000, loss_seg1 = 0.764 loss_seg2 = 0.526 loss_adv1 = 0.709, loss_adv2 = 0.680 loss_D1 = 0.692 loss_D2 = 0.692
iter =    2/500000, loss_seg1 = 0.735 loss_seg2 = 0.519 loss_adv1 = 0.676, loss_adv2 = 0.703 loss_D1 = 0.692 loss_D2 = 0.691
iter =    3/500000, loss_seg1 = 0.705 loss_seg2 = 0.513 loss_adv1 = 0.693, loss_adv2 = 0.699 loss_D1 = 0.693 loss_D2 = 0.691
iter =    4/500000, loss_seg1 = 0.692 loss_seg2 = 0.505 loss_adv1 = 0.714, loss_adv2 = 0.676 loss_D1 = 0.690 loss_D2 = 0.689
iter =    5/500000, loss_seg1 = 0.689 loss_seg2 = 0.500 loss_adv1 = 0.707, loss_adv2 = 0.700 loss_D1 = 0.693 loss_D2 = 0.687
iter =    6/500000, loss_seg1 = 0.638 loss_seg2 = 0.494 loss_adv1 = 0.678, loss_adv2 = 0.705 loss_D1 = 0.689 loss_D2 = 0.684
iter =    7/500000, loss_seg1 = 0.611 loss_seg2 = 0.501 loss_adv1 = 0.684, loss_adv2 = 0.678 loss_D1 = 0.684 loss_D2 = 0.680
iter =    8/500000, loss_seg1 = 0.610 loss_seg2 = 0.493 loss_adv1 = 0.718, loss_adv2 = 0.750 loss_D1 = 0.685 loss_D2 = 0.679
iter =    9/500000, loss_seg1 = 0.586 loss_seg2 = 0.481 loss_adv1 = 0.730, loss_adv2 = 0.627 loss_D1 = 0.691 loss_D2 = 0.675
iter =   10/500000, loss_seg1 = 0.580 loss_seg2 = 0.479 loss_adv1 = 0.697, loss_adv2 = 0.811 loss_D1 = 0.681 loss_D2 = 0.653
iter =   11/500000, loss_seg1 = 0.510 loss_seg2 = 0.473 loss_adv1 = 0.701, loss_adv2 = 0.754 loss_D1 = 0.676 loss_D2 = 0.646
iter =   12/500000, loss_seg1 = 0.488 loss_seg2 = 0.468 loss_adv1 = 0.696, loss_adv2 = 0.650 loss_D1 = 0.664 loss_D2 = 0.633
iter =   13/500000, loss_seg1 = 0.480 loss_seg2 = 0.474 loss_adv1 = 0.755, loss_adv2 = 0.955 loss_D1 = 0.649 loss_D2 = 0.618
iter =   14/500000, loss_seg1 = 0.456 loss_seg2 = 0.465 loss_adv1 = 0.752, loss_adv2 = 0.707 loss_D1 = 0.650 loss_D2 = 0.587
iter =   15/500000, loss_seg1 = 0.438 loss_seg2 = 0.464 loss_adv1 = 0.732, loss_adv2 = 0.805 loss_D1 = 0.687 loss_D2 = 0.560
iter =   16/500000, loss_seg1 = 0.406 loss_seg2 = 0.440 loss_adv1 = 0.542, loss_adv2 = 1.086 loss_D1 = 0.703 loss_D2 = 0.518
...

This seems to be due to the normalization I'm using on the input image? So that means I shouldn't process the input image? Can you help me ? Thanks.