3 Nb@s<ddlZddljZddlZddlmZGdddejZdS)N)DepthWiseSeperableConvcs&eZdZd fdd Zdd ZZS) MultidilatedConvsumTFc  stjg} ||_|dks$t||dkrTd|_|r|dksHtgtfddtdDg|_nЇfd dtd Djtg}dgdd}fd dtD}x^tdD]N}xHtD]<}|t t||||||7}||||7<qWqW||_t |ksLt|_ nd |_g|_ |dkr|rdkstg}n,fd dtd D}|jt|||_ d|_ nd |_ g|_ | rtntj}| }xtD]}t|tr||}n||}| j||j ||j ||f||d| |dkr|r| dj| d_| dj| d_|d9}qWtj| |_| |_|jrt t}tj||jdtj|dS)Ncat_outrcat_incat_bothTrcs$g|]fddtDqS)csg|]}|dqS)r).0j)iout_dimsr R/home/ec2-user/SageMaker/lama/saicinpainting/training/modules/multidilated_conv.py sz8MultidilatedConv.__init__...)range)r ) dilation_numr)r rrsz-MultidilatedConv.__init__..csg|]}d|dqS)rr )r r )out_dimr rrsrcsg|]}|dqS)rr )r r )rr rrsFcsg|]}d|dqS)rrr )r r )in_dimr rr)s)paddingdilationrin_channels_permute)rrrr )rr rr)rr rr)super__init__ equal_dimAssertionErrorrrrindexappendlistlenrin_dimsrrnnConv2d isinstanceintweightbias ModuleListconvsshuffle_in_channelsrandomshuffleregister_buffertorchtensor)selfrr kernel_sizerZ comb_moderZshared_weightsrZ min_dilationr+Z use_depthwisekwargsr*rstartslengthsr r r"Z conv_typerZ cur_paddingr) __class__)rrrrrrsh  &"     &   zMultidilatedConv.__init__c Cs|jr|dd|jf}g}|jr|jr>|jt|jdd}nBg}d}x4|jD]*}|j|dd|||f||7}qNW|}x8t |jD]*\}}|jr||}n|}|j||qW|j rt j |dddd|j f} nt|} | S)Nr)dimr)r+rrrchunkr!r*r"r enumeraterr/catrr) r1xoutsnew_xstartr7r convinputoutr r rforwardIs*   zMultidilatedConv.forward)rrTFrrFF)__name__ __module__ __qualname__rrB __classcell__r r )r6rrsAr)r/torch.nnr#r,2saicinpainting.training.modules.depthwise_sep_convrModulerr r r rs