3 Nb @s4ddlZddlZddljjZGdddejjZdS)NcsLeZdZdZdfdd ZddZdd Zd d Zdd d ZddZ Z S)SSIMzmSSIM. Modified from: https://github.com/Po-Hsun-Su/pytorch-ssim/blob/master/pytorch_ssim/__init__.py Tcs6tj||_||_d|_|jd|j||jdS)Nwindow)super__init__ window_size size_averagechannelregister_buffer_create_window)selfrr ) __class__F/home/ec2-user/SageMaker/lama/saicinpainting/evaluation/losses/ssim.pyr s  z SSIM.__init__cCst|jdkst|jd}||jkrF|jjj|jjkrF|j}n$|j|j |}|j |}||_||_|j ||||j ||j S)Nr) lenshapeAssertionErrorsizer rdatatyper rtype_as_ssimr )r img1img2r rrrrforwards   z SSIM.forwardcs*tjfddtD}||jS)Ncs4g|],}tj|dd tddqS))npexpfloat).0x)sigmarrr &sz"SSIM._gaussian..)torchTensorrangesum)r rr#gaussr)r#rr _gaussian$szSSIM._gaussiancCsD|j|djd}|j|jjjdjd}|j|d||jS)Ng?rr)r* unsqueezemmtr expand contiguous)r rr Z _1D_windowZ _2D_windowrrrr *szSSIM._create_windowcCstj|||d|d}tj|||d|d}|jd} |jd} ||} tj||||d|d| } tj||||d|d| } tj||||d|d| }d}d}d| |d||| | || | |}|r|jS|jdjdjdS)Nr)paddinggroupsg{Gz?gQ?rg-C6?gH}M?)Fconv2dpowmean)r rrrrr r mu1mu2Zmu1_sqZmu2_sqZmu1_mu2Z sigma1_sqZ sigma2_sqZsigma12C1C2Zssim_maprrrr/s$  z SSIM._ssimcCsdS)Nr)r state_dictprefixlocal_metadatastrict missing_keysunexpected_keys error_msgsrrr_load_from_state_dictIszSSIM._load_from_state_dict)rT)T) __name__ __module__ __qualname____doc__rrr*r rrA __classcell__rr)rrrs r) numpyrr%torch.nn.functionalnn functionalr2Modulerrrrrs