3 Nbr*r?rrrr)ms8     zResnetBlock5x5.build_conv_blockcCs*|}|jdk r|j|}||j|}|S)N)r%r-r*)rrr@rArrrrs   zResnetBlock5x5.forward)r!r"Nr"r") r r rr+rBrr)rrrr)rrrC\s   %rCcs:eZdZejddffdd Zd ddZdd ZZS) MultidilatedResnetBlockTFcs$tj|j|||||||_dS)N)rrr)r*)rr(r/r>r0r1r2)rrrrs z MultidilatedResnetBlock.__init__r"c Cs\g}||||d|d|||g7}|r6|tjdg7}||||d|d||g7}tj|S)Nr6)r7 padding_modeg?)r+r<r=) rr(r/r>r0r1r2r$r*rrrr)s z(MultidilatedResnetBlock.build_conv_blockcCs||j|}|S)N)r*)rrrArrrrszMultidilatedResnetBlock.forward)r") r r rr+rBrr)rrrr)rrrFs rFcsVeZdZdddejdddejdejdejdddidiffd d Zd d ZZS) MultiDilatedGlobalGenerator@r6r3r! convtransposeTNic s|dks ttjt|}tjtdf|}t|}| dk rLt|| d}t| } | dk rht| | d} tjd|||ddd||| g}t }x^t |D]R}d|}||t |||t |||ddddd |t |||d| g7}qWd|}t |||}x`t |D]T}|dk rJ||krJ|t |||ftj d d |g7}|t|||| |d g7}qWx4t |D](}d||}|t| ||| | |7}qrW|tjdtj||dddg7}|r|jt|d krd n|tj||_dS)Nr multidilated)affiner6)r7r8rDr")r7strider8T)activation_layerinline)r/r>r1r0tanh)AssertionErrorrrr functoolsrrr+r9rrangeminr rBrFrr,appendrr=model)rinput_nc output_ncngfn_downsamplingn_blocksr0r/r# deconv_kindr1 up_norm_layerrL up_activation add_out_act max_featuresmultidilation_kwargs ffc_positions ffc_kwargsr>resnet_conv_layerrWidentityimultfeats_num_bottleneck)rrrrsN        z$MultiDilatedGlobalGenerator.__init__cCs |j|S)N)rW)rinputrrrrsz#MultiDilatedGlobalGenerator.forward) r r rr+ BatchNorm2drBrrrrr)rrrHs 3rHcsZeZdZdddejdddejdejdejdddgd d d iffd d ZddZZS)ConfigGlobalGeneratorrIr6r3r!rJTNimultidilatedresnetblockrKr"c s|dks ttjt|}tjt|f|}t| dk rLt| dt| } | dk rht| | d} tjd||dddg}t }x^t |D]R}d|||t |t |dddddt |dg7}qWd|t |t |dkr*t d d |d d g}x.|D]&}fd d}|||q0Wx4t |D](}d|||t| | | |7}qdW|tjdtj|dddg7}|r|jt|d krdn|tj||_dS)Nr)rLr6rM)r7r8rDr")r7rNr8cSsdS)Nrrrrrsz0ConfigGlobalGenerator.__init__..T)r\ use_defaultc stdd|}|jsFtjt|jf|j}|j}|j}|jdk rF|j}xt |j D]}|dkrv|t |dg7}|dkr|t |dg7}|dkr|t |dg7}|dkrR|t |||d g7}qRWdS) NcSsdS)Nrrrrrrn$szMConfigGlobalGenerator.__init__..make_and_add_blocks..rm)r/r>r1r0Z resnetblock)r/r1r0r#Zresnetblock5x5Zresnetblockdwdil)r/r1r0r#r$r')r rorSrrresnet_conv_kindrbresnet_block_kindresnet_dilationrTr\rFr rC)rW block_specrerprqrrrg)r1rirhrZr0r/rrmake_and_add_blocks#s*    z;ConfigGlobalGenerator.__init__..make_and_add_blocksrQ)rRrrrrSrrr+r9rrTrUlenr rr,rVrr=rW)rrXrYrZr[r\r0r/r#r]r1r^rLr_r`raZmanual_block_specrqrprrrbr>rerWrfrgrsrt)r)r1rirhrZr0r/rrsN          zConfigGlobalGenerator.__init__cCs |j|S)N)rW)rrjrrrrEszConfigGlobalGenerator.forward) r r rr+rkrBrrrrr)rrrls Krlc Csng}xdt|D]X}|dkr<|jtf|dd|diq|dkrV|jtf|qtd|dqW|S)Nsimpler$rDr"multiz"dilation_block_kind could not be "")rTrVr rF ValueError)dilated_blocks_ndilation_block_kinddilated_block_kwargsblocksrgrrrmake_dil_blocksIs"r~csbeZdZdddejddejdejdejdddddd d did dd iffd d ZddZZS)GlobalGeneratorrIr6 r3r!TNriFr"rvc" s|dks ttjt|}t|}| dk r:t|| d}t| } | dk rVt| | d} |dk rhtj|}tj d|||ddd||| g}t }x^t |D]R}d|}||t |||t |||ddddd|t |||d| g7}qWd|}t |||}t ||| |d }|d kr*||d <n |d krJtjtd f||d<|dk rn|dkrn|t|||7}xt |D]}||dkr|dk r|dkr|t|||7}|dk r||krx8t ||D](} |t|||ftjdd|g7}qW|r|}!nd}!|t||| |||!||dg7}qxW| dk rT| dkrT|t| ||7}xpt |D]d}d||}|tjt |||t |t||dddddd| t |t||d| g7}q^W|tj dtj||dddg7}|r|jt|dkrdn|tj||_dS)Nr)rLr6rM)r7r8rDr")r7rNr8)r(r/r1r0rvr#rwrKr>T)rOrP)r/r1r0r#r&r$r')r7rNr8output_paddingrQ)rRrrrrr collectionsCounterr+r9rrTrUdictrSr~r rBr ConvTranspose2dintr,rVrr=rW)"rrXrYrZr[r\r0r/r#r1r^rLr_rzZdilated_blocks_n_startZdilated_blocks_n_middler`raZis_resblock_depthwisercrdr$r'r{rbr>rWrfrgrhrir|_Zresblock_groups)rrrrVsz           "    zGlobalGenerator.__init__cCs |j|S)N)rW)rrjrrrrszGlobalGenerator.forward) r r rr+rkrBrrrrr)rrrUs   UrcseZdZfddZZS)GlobalGeneratorGatedcs0tdtjtjd}|j|tj||dS)NZ gated_bn_relu)r#r1r0)rr+rupdaterr)rargskwargsZ real_kwargs)rrrrs   zGlobalGeneratorGated.__init__)r r rrrrr)rrrsrcs.eZdZd fdd ZddZdd ZZS) GlobalGeneratorFromSuperChannelsbnr3Tc  stj||_t|}t|tjkr4|jtj k} n |tj k} |j |} | |_ tj dtj || ddd| d|| dtjdg} xZt|D]N} d| } | tj | d| | d| ddd| d|| d| tjdg7} qWd|} |d}|}|||}x2t|D]&} |}| |}| t|||d g7} qWx\t|D]P} |d}| |}i}| dkrnd | |di}| t|f||d |g7} qs.     >?=Z b s33