3 Nb@sddlZddljZddljjZddlZddlmZddl m Z ej dddgdddddfZ ej ddd gdddddfZ Gd d d ejZGd d d ejZdS)N) ModelBuilder)check_and_warn_input_rangeg ףp= ?gv/?gCl?gZd;O?gy&1?g?csBeZdZd fdd ZddZdddZdd d Zd d ZZS)PerceptualLossTcstt|j||_t|_t|_tj j ddj }g}x|j D] }d|_ q>WxN|jD]B}|jjdkrjqVqV|jjdkr|jtjddddqV|j|qVWtj||_dS) NT) pretrainedF Sequential MaxPool2dr) kernel_sizestridepadding)superr__init__normalize_inputs IMAGENET_MEANmean_ IMAGENET_STDstd_ torchvisionmodelsvgg19features parameters requires_gradmodules __class____name__appendnn AvgPool2drvgg)selfrrvgg_avg_poolingweightsmodule)rJ/home/ec2-user/SageMaker/lama/saicinpainting/training/losses/perceptual.pyr s   zPerceptualLoss.__init__cCs ||jj|j|jj|jS)N)rtodevicer)r xr$r$r%do_normalize_inputs&sz"PerceptualLoss.do_normalize_inputsNc Cst|dddg}|jr.|j|}|j|}n|}|}x|jddD]}||}||}|jjdkrFtj||dd}|dk rtj||j d dd d d } |d| }|j t t dt |j d }|j|qFW|S)Nrz'PerceptualLoss target in partial_lossesReLUnone) reductionrbilinearF)sizemode align_corners)dim)rrr)rrrFmse_loss interpolateshapemeantuplerangelenr) r inputtargetmasklossesfeatures_inputZfeatures_targetlayerlosscur_maskr$r$r%partial_losses)s&     zPerceptualLoss.partial_lossescCs"|j|||d}tj|jddS)N)r?r)r3)rEtorchstacksum)r r=r>r?r@r$r$r%forwardHszPerceptualLoss.forwardcCs2t|ddd|jr |j|}n|}|j|}|S)Nrr*z+PerceptualLoss input in get_global_features)rrr)r)r r=rAr$r$r%get_global_featuresLs   z"PerceptualLoss.get_global_features)T)N)N) r __module__ __qualname__r r)rErIrJ __classcell__r$r$)rr%rs   rcs&eZdZd fdd ZddZZS) ResNetPLr*Nresnet50dilatedTcsRtjtj||dd|d|_|jjx|jjD]}|jdq6W||_dS)N ppm_deepsupi) weights_path arch_encoder arch_decoderfc_dim segmentationF) r r r get_encoderimplevalrrequires_grad_weight)r rZrQrRrUw)rr$r%r Ys   zResNetPL.__init__cCst|tj|tj|}|tj|tj|}|j|dd}|j|dd}tjddt||Dj|j}|S)NT)return_feature_mapscSsg|]\}}tj||qSr$)r5r6).0Zcur_predZ cur_targetr$r$r% nsz$ResNetPL.forward..) rr&rrWrFrGziprHrZ)r predr>Z pred_featsZ target_featsresultr$r$r%rIgs zResNetPL.forward)r*NrOT)rrKrLr rIrMr$r$)rr%rNXs rN)rFtorch.nnrtorch.nn.functional functionalr5r models.ade20krsaicinpainting.utilsr FloatTensorrrModulerrNr$r$r$r%s      J