
    3j,                       % S SK Jr  S SKJr  S SKJrJr  S SKrS SKJ	s  J
r  S SKJ	r	  S SKJr  S/rSrS	\S
'   SS jr " S S\	R$                  5      r " S S\	R(                  5      r " S S\	R(                  5      r " S S\	R$                  5      r " S S\	R$                  5      r " S S\	R(                  5      r " S S\	R$                  5      rg)    )annotations)OrderedDict)ClassVarOptionalN)nn)KORNIA_CHECKDexiNedz=http://cmp.felk.cvut.cz/~mishkdmy/models/DexiNed_BIPED_10.pthstrurlc                   [        U [        R                  5      (       a  [        R                  R                  R                  U R                  SS9  U R                  R                  R                  S   [        R                  " S/5      :X  a2  [        R                  R                  R                  U R                  SS9  U R                  b3  [        R                  R                  R                  U R                  5        [        U [        R                  5      (       a  [        R                  R                  R                  U R                  SS9  U R                  R                  R                  S   [        R                  " S/5      :X  a2  [        R                  R                  R                  U R                  SS9  U R                  b4  [        R                  R                  R                  U R                  5        ggg)	zInitialize weights.g      ?)gain   g        )meanNg?)std)
isinstancer   Conv2dtorchinitxavier_normal_weightdatashapeSizenormal_biaszeros_ConvTranspose2d)ms    O/home/wildlama/miniconda3/lib/python3.13/site-packages/kornia/models/dexined.pyweight_initr    $   sB   !RYY$$QXXC$888==q!UZZ_4HHMM!!!((!566HHMM  ( !R''(($$QXXC$8 88==q!UZZ_4HHMM!!!((!466HHMM  (  )    c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )CoFusion<   c                t  > [         TU ]  5         [        R                  " USSSSS9U l        [        R                  " SSSSSS9U l        [        R                  " SUSSSS9U l        [        R                  " 5       U l        [        R                  " SS5      U l
        [        R                  " SS5      U l        g )N@      r   kernel_sizestridepadding   )super__init__r   r   conv1conv2conv3ReLUrelu	GroupNormnorm_layer1norm_layer2)selfin_chout_ch	__class__s      r   r.   CoFusion.__init__=   s    YYuba1M
YYr21QJ
YYr6qAN
GGI	<<2.<<2.r!   c                <   U R                  U R                  U R                  U5      5      5      nU R                  U R                  U R	                  U5      5      5      n[
        R                  " U R                  U5      SS9nX-  R                  S5      S S 2S S4   $ )Nr   dim.)	r3   r5   r/   r6   r0   Fsoftmaxr1   sum)r7   xattns      r   forwardCoFusion.forwardF   s|    yy))$**Q-89yy))$**T*:;<yyD)q1 q!1dC<00r!   )r/   r0   r1   r5   r6   r3   )r8   intr9   rF   returnNonerB   torch.TensorrG   rJ   __name__
__module____qualname____firstlineno__r.   rD   __static_attributes____classcell__r:   s   @r   r#   r#   <   s    /1 1r!   r#   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )_DenseLayerP   c                H  > [         TU ]  [        S[        R                  " SS94S[        R
                  " XSSSSS94S	[        R                  " U5      4S
[        R                  " SS94S[        R
                  " X"SSSS94S[        R                  " U5      4/5      5        g )Nrelu1Tinplacer/   r'   r      )r)   r*   r+   r   norm1relu2r0   )r)   r*   r   norm2)r-   r.   r   r   r2   r   BatchNorm2d)r7   input_featuresout_featuresr:   s      r   r.   _DenseLayer.__init__Q   s    bggd34biiRS\]ghostubnn\:;bggd34biiPQZ[bfghbnn\:;		
r!   c                L    US   US   p2UnU  H  nU" U5      nM     SXC-   -  U/$ )Nr   r   g      ? )r7   rB   x1x2x3mods         r   rD   _DenseLayer.forward_   s:    1qtBCRB rw$$r!   rc   )r_   rF   r`   rF   rG   rH   rB   list[torch.Tensor]rG   rj   rK   rR   s   @r   rT   rT   P   s    
% %r!   rT   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )_DenseBlockg   c                   > [         TU ]  5         [        U5       H(  n[        X#5      nU R	                  SUS-    3U5        UnM*     g )N
denselayerr   )r-   r.   rangerT   
add_module)r7   
num_layersr_   r`   ilayerr:   s         r   r.   _DenseBlock.__init__h   sE    z"A=EOOj!a%	2E:)N #r!   c                ,    UnU  H  nU" U5      nM     U$ Nrc   )r7   rB   x_outrg   s       r   rD   _DenseBlock.forwardo   s    CJE r!   rc   )rr   rF   r_   rF   r`   rF   rG   rH   ri   rK   rR   s   @r   rl   rl   g   s    * r!   rl   c                  J   ^  \ rS rSrSU 4S jjrSS jrS	S jrS
S jrSrU =r	$ )UpConvBlockv   c                   > [         TU ]  5         SU l        SU l        U R	                  X5      n[        US LS5        [        R                  " U6 U l        g )NrZ      zlayers cannot be none)	r-   r.   	up_factorconstant_featuresmake_deconv_layersr   r   
Sequentialfeatures)r7   in_featuresup_scalelayersr:   s       r   r.   UpConvBlock.__init__w   sM    !#((?V4')@Av.r!   c                t   [         R                  " / 5      n/ SQn[        U5       H  nSU-  nXB   nU R                  XR5      nUR	                  [         R
                  " XS5      5        UR	                  [         R                  " SS95        UR	                  [         R                  " XUSUS95        UnM     U$ )N)r   r   r   r'      rZ   r   TrX   )r*   r+   )r   
ModuleListrp   compute_out_featuresappendr   r2   r   )	r7   r   r   r   all_padsrs   r)   padr`   s	            r   r   UpConvBlock.make_deconv_layers   s    r""xAX+K$C44QALMM"))KqABMM"''$/0MM",,\]^hklm&K ! r!   c                .    XS-
  :X  a  S$ U R                   $ )Nr   )r   )r7   idxr   s      r   r    UpConvBlock.compute_out_features   s    a<'qCT-C-CCr!   c                R    U R                  U5      n[        R                  " X2SS9nU$ )Nbilinear)mode)r   r?   interpolate)r7   rB   	out_shapeouts       r   rD   UpConvBlock.forward   s%    mmAmmC<
r!   )r   r   r   )r   rF   r   rF   rG   rH   )r   rF   r   rF   rG   znn.ModuleList)r   rF   r   rF   rG   rF   )rB   rJ   r   z	list[int]rG   rJ   )
rL   rM   rN   rO   r.   r   r   rD   rP   rQ   rR   s   @r   r{   r{   v   s    /D r!   r{   c                  :   ^  \ rS rSrSSU 4S jjjrSS jrSrU =r$ )SingleConvBlock   c                   > [         TU ]  5         X@l        [        R                  " XSUSS9U l        [        R                  " U5      U l        g )Nr   T)r*   r   )r-   r.   use_bnr   r   convr^   bn)r7   r   r`   r*   use_bsr:   s        r   r.   SingleConvBlock.__init__   s:    IIk6PTU	...r!   c                l    U R                  U5      nU R                  (       a  U R                  U5      nU$ rw   )r   r   r   )r7   rB   s     r   rD   SingleConvBlock.forward   s(    IIaL;;
Ar!   )r   r   r   )T)
r   rF   r`   rF   r*   rF   r   boolrG   rH   rI   rK   rR   s   @r   r   r      s    / / r!   r   c                  L   ^  \ rS rSr   S           SU 4S jjjrSrU =r$ )DoubleConvBlock   c                  > [         TU ]  5         Uc  UnU R                  S[        R                  " XSSUS95        U R                  S[        R
                  " U5      5        U R                  S[        R                  " SS95        U R                  S	[        R                  " X#SSS
95        U R                  S[        R
                  " U5      5        U(       a%  U R                  S[        R                  " SS95        g g )Nr/   r'   r   )r+   r*   bn1rW   TrX   r0   )r+   bn2r\   )r-   r.   rq   r   r   r^   r2   )r7   r   mid_featuresr`   r*   use_actr:   s         r   r.   DoubleConvBlock.__init__   s     	'L;aQR[a!bcr~~l;<!67<qRS!TUr~~l;<OOGRWWT%:; r!   rc   )Nr   T)r   rF   r   rF   r`   zOptional[int]r*   rF   r   r   rG   rH   )rL   rM   rN   rO   r.   rP   rQ   rR   s   @r   r   r      sR    
 '+<< < $	<
 < < 
< <r!   r   c                  t   ^  \ rS rSr% Sr/ SQrS\S'   / SQrS\S'   SU 4S jjrSS	 jr	SS
 jr
SS jrSrU =r$ )r	      an  Definition of the DXtrem network from :cite:`xsoria2020dexined`.

Return:
    A list of tensor with the intermediate features which the last element
    is the edges map with shape :math:`(B,1,H,W)`.

Example:
    >>> img = torch.rand(1, 3, 320, 320)
    >>> net = DexiNed(pretrained=False)
    >>> out = net(img)
    >>> out.shape
    torch.Size([1, 1, 320, 320])

)r'   r   r   zClassVar[list[int]]ONNX_DEFAULT_INPUTSHAPE)r   r   r   r   ONNX_DEFAULT_OUTPUTSHAPEc                  > [         TU ]  5         [        SSSSS9U l        [        SSSS9U l        [        SSS	5      U l        [        SS	S
5      U l        [        SS
S
5      U l        [        SS
S	5      U l	        [        R                  " SSSS9U l        [        SSS5      U l        [        SS	S5      U l        [        S	S
S5      U l        [        S
S
S5      U l        [        S
S	S5      U l        [        SS	S5      U l        [        SS	S5      U l        [        S	S
S5      U l        [        S
S
S5      U l        [        S
S	S5      U l        [1        SS5      U l        [1        SS5      U l        [1        S	S5      U l        [1        S
S5      U l        [1        S
S5      U l        [1        S	S5      U l        [        SSSSS9U l        U(       a  U RA                  [B        5        g U RE                  [F        5        g )Nr'       r&   rZ   )r*      F)r      i   r   r(   r,      )r*   r   )$r-   r.   r   block_1block_2rl   dblock_3dblock_4dblock_5dblock_6r   	MaxPool2dmaxpoolr   side_1side_2side_3side_4side_5pre_dense_2pre_dense_3pre_dense_4pre_dense_5pre_dense_6r{   
up_block_1
up_block_2
up_block_3
up_block_4
up_block_5
up_block_6	block_catload_from_filer   applyr    )r7   
pretrainedr:   s     r   r.   DexiNed.__init__   s   &q"b;&r3>#AsC0#AsC0#AsC0#AsC0||!QG &b#q1%c32%c32%c32%c32 +3Q7*3Q7*3Q7*3Q7*3Q7 &b!,%c1-%c1-%c1-%c1-%c1-(AaF $JJ{#r!   c                    [         R                  R                  U[         R                  " S5      S9nU R	                  USS9  U R                  5         g )Ncpu)map_locationT)strict)r   hubload_state_dict_from_urldeviceload_state_dicteval)r7   	path_filepretrained_dicts      r   r   DexiNed.load_from_file   sD    ))<<YUZUaUabgUh<i_T:		r!   c                   U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nXS-   nU R	                  U5      nU R                  U5      nU R                  Xh/5      u  pU R                  U	5      nX-   nU R                  U5      nU R                  U5      nU R                  X-   5      nU R                  X/5      u  nn
U R                  U5      nUU-   nU R                  U5      nU R                  U5      nU R                  UU/5      u  nn
UU-   nU R                  U5      nU R                  UU/5      u  nn
UR                   SS  nU R#                  UU5      nU R%                  UU5      nU R'                  U	U5      nU R)                  UU5      nU R+                  UU5      nU R-                  UU5      nUUUUUU/n U $ )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )!r7   rB   r   block_1_sider   block_2_downblock_2_addblock_2_sideblock_3_pre_denseblock_3_block_3_downblock_3_addblock_3_sideblock_2_resize_halfblock_4_pre_denseblock_4block_4_downblock_4_addblock_4_sideblock_5_pre_denseblock_5block_5_addblock_6_pre_denseblock_6r   out_1out_2out_3out_4out_5out_6resultss!                                    r   get_featuresDexiNed.get_features   s   ,,q/{{7+ ,,w'||G,"1{{;/ !,,\:]]K#CD
||G,"1{{;/ #..|< ,,\-OP]]K#CD
||G,"\1{{;/ !,,\:]]K1B#CD
, !,,W5]]K1B#CD
 GGBCL	333333%ue<r!   c                t    U R                  U5      n[        R                  " USS9nU R                  U5      nU$ )Nr   r=   )r   r   catr   )r7   rB   r   r   s       r   rD   DexiNed.forward'  s8    $$Q' IIhA.	NN9-	r!   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   rG   rH   )r   r
   rG   rH   )rB   rJ   rG   rj   rI   )rL   rM   rN   rO   __doc__r   __annotations__r   r.   r   r   rD   rP   rQ   rR   s   @r   r	   r	      s>     4C0B4C1C%$N,\ r!   )r   z	nn.ModulerG   rH   )
__future__r   collectionsr   typingr   r   r   torch.nn.functionalr   
functionalr?   kornia.core.checkr   __all__r   r  r    Moduler#   r   rT   rl   r{   r   r   r	   rc   r!   r   <module>r     s   ( # # %     *+JS J)01ryy 1(%"-- %."-- ")) @bii <bmm <*ubii ur!   