
    9i0                     2   S SK Jr  S SKrS SKJs  Jr  \R                  r/ SQrSSSSSS.rSS	 jr	SS
 jr
 " S S\R                  5      r " S S\R                  5      r " S S\R                  5      rSS jrSS jrSS jrSS jrSS jrSS jrSS jrg)    N)ResNetresnet18resnet34resnet50	resnet101	resnet152z9https://download.pytorch.org/models/resnet18-5c106cde.pthz9https://download.pytorch.org/models/resnet34-333f7ec4.pthz9https://download.pytorch.org/models/resnet50-19c8e357.pthz:https://download.pytorch.org/models/resnet101-5d3b4d8f.pthz:https://download.pytorch.org/models/resnet152-b121ed2d.pth)r   r   r   r   r   c                     [         R                  R                  U R                  U5        [	        U S5      (       a+  [         R                  R                  U R
                  U5        g g )Nbias)nninit	constant_weighthasattrr
   )moduleconstantr
   s      ^/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/easyocr/DBNet/backbones/resnet.pyconstant_initr      sD    GGfmmX.vv
&++t,     c           	      2    [         R                  " XSUSSS9$ )z3x3 convolution with padding      Fkernel_sizestridepaddingr
   )r   Conv2d)	in_planes
out_planesr   s      r   conv3x3r      s    99Y&U, ,r   c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )
BasicBlock   r   c           	        > [         [        U ]  5         US LU l        [	        XU5      U l        [        U5      U l        [        R                  " SS9U l
        SU l        U R                  (       a)  UR                  SS5      nUR                  SS5      U l        U R                  (       a  W(       a  [        R                  " X"SSSS9U l        OfUR                  S	S5      nU R                  (       d  S
SKJn  Un	Sn
O
S
SKJn  Un	Sn
[        R                  " UXz-  SSS9U l        U	" UUSSUSS9U l        [        U5      U l        X@l        X0l        g )NTinplaceFfallback_on_stride	modulatedr   r   )r   r   r
   deformable_groups   
DeformConv   ModulatedDeformConv   r   r   )r   r   r(   r
   )superr!   __init__with_dcnr   conv1BatchNorm2dbn1r   ReLUreluwith_modulated_dcngetr   conv2assets.ops.dcnr+   r.   conv2_offsetbn2
downsampler   selfinplanesplanesr   r?   dcnr&   r(   r+   conv_opoffset_channelsr.   	__class__s               r   r2   BasicBlock.__init__"   s.   j$(*4Xv6
v&GGD)	"'==!$)=u!E&)ggk5&AD#}} 26q+,5:DJ !$(;Q ?**7$"$ A-"$ "		!3	!D
 !"3DJ v&$r   c                 L   UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  (       d  U R	                  U5      nOU R
                  (       aT  U R                  U5      nUS S 2S S2S S 2S S 24   nUS S 2SS 2S S 2S S 24   R                  5       nU R	                  X5U5      nO"U R                  U5      nU R	                  X55      nU R                  U5      nU R                  b  U R                  U5      nX2-  nU R                  U5      nU$ Nr,   i)
r4   r6   r8   r3   r;   r9   r=   sigmoidr>   r?   rA   xresidualoutoffset_maskoffsetmasks          r   forwardBasicBlock.forwardL   s    jjmhhsmiin }}**S/C$$++C0K CRCA.Fq"#q!|,446D**S$/C&&s+F**S)Chhsm??&q)Hiin
r   )
r6   r>   r4   r;   r=   r?   r8   r   r3   r9   r   NN	__name__
__module____qualname____firstlineno__	expansionr2   rS   __static_attributes____classcell__rG   s   @r   r!   r!      s    I(T r   r!   c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )
Bottlenecki      c           
      :  > [         [        U ]  5         US LU l        [        R
                  " XSSS9U l        [        U5      U l        SnSU l	        U R                  (       a)  UR                  SS5      nUR                  SS5      U l	        U R                  (       a  U(       a  [        R
                  " X"SUSSS9U l        OfUR                  SS5      nU R                  (       d  S	S
KJn  Un	Sn
O
S	SKJn  Un	Sn
[        R
                  " X'U
-  SSS9U l        U	" X"SSUUSS9U l        [        U5      U l        [        R
                  " X"S-  SSS9U l        [        US-  5      U l        [        R&                  " SS9U l        X@l        X0l        XPl        US LU l        g )Nr   F)r   r
   r&   r'   r   r   r(   r)   r*   r,   r-   r/   r0   )r   r   r   r(   r
   rb   Tr$   )r1   r`   r2   r3   r   r   r4   r5   r6   r9   r:   r;   r<   r+   r.   r=   r>   conv3bn3r7   r8   r?   r   rD   r@   s               r   r2   Bottleneck.__init__l   sq   j$(*4YYxQUK
v&""'==!$)=u!E&)ggk5&AD#}} 26q*0!%IDJ !$(;Q ?**7$"$ A-"$ "		O;!D !Aq"3%ADJ v&YYvzquM
vz*GGD)	$4r   c                    UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  (       d  U R	                  U5      nOU R
                  (       aT  U R                  U5      nUS S 2S S2S S 2S S 24   nUS S 2SS 2S S 2S S 24   R                  5       nU R	                  X5U5      nO"U R                  U5      nU R	                  X55      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  b  U R                  U5      nX2-  nU R                  U5      nU$ rJ   )r4   r6   r8   r3   r;   r9   r=   rK   r>   rd   re   r?   rL   s          r   rS   Bottleneck.forward   s#   jjmhhsmiin }}**S/C$$++C0K CRCA.Fq"#q!|,446D**S$/C&&s+F**S)Chhsmiinjjohhsm??&q)Hiin
r   )r6   r>   re   r4   r;   r=   rd   rD   r?   r8   r   r3   r9   rU   rV   r^   s   @r   r`   r`   i   s    I'(R r   r`   c                   @   ^  \ rS rSr  SU 4S jjrSS jrS rSrU =r$ )r      c           	        > X@l         XPl        SU l        [        [        U ]  5         [        R                  " SSSSSSS9U l        [        S5      U l
        [        R                  " SS9U l        [        R                  " SSS	S
9U l        U R                  USUS   5      U l        U R                  USUS	   SUS9U l        U R                  USUS   SUS9U l        U R                  USUS   SUS9U l        [        R(                  " SS	S9U l        [        R,                  " SUR.                  -  U5      U l        [        R                  " SSS	S	S	S
9U l        U R5                  5        H  n[7        U[        R                  5      (       ak  UR8                  S   UR8                  S	   -  UR:                  -  nUR<                  R>                  RA                  S[B        RD                  " SU-  5      5        M  [7        U[        5      (       d  M  UR<                  R>                  RG                  S	5        URH                  R>                  RK                  5         M     U R                   bm  U R5                  5        HX  n[7        U[L        5      (       d  [7        U[N        5      (       d  M/  [Q        US5      (       d  MB  [S        URT                  S5        MZ     g g )N@   r      r)   Fr   Tr$   r   )r   r   r   r      )r   rD      i   )r   i   g       @r=   )+rD   stage_with_dcnrB   r1   r   r2   r   r   r4   r5   r6   r7   r8   	MaxPool2dmaxpool_make_layerlayer1layer2layer3layer4	AvgPool2davgpoolLinearr[   fcsmoothmodules
isinstancer   out_channelsr   datanormal_mathsqrtfill_r
   zero_r`   r!   r   r   r=   )	rA   blocklayersnum_classesrD   rp   mnrG   s	           r   r2   ResNet.__init__   s6   ,fd$&YYq"!Aq$)+
r?GGD)	||!QG&&ub&)<&&3q	! ' 6&&3q	! ' 6&&3q	! ' 6||Aa0))C%//1;?iicqANA!RYY''MM!$q}}Q'77!..H%%a26):;A{++##A&!!#   88\\^a,,
1j0I0Iq.11%anna8 $  r   c           
         S nUS:w  d  U R                   X!R                  -  :w  aX  [        R                  " [        R                  " U R                   X!R                  -  SUSS9[        X!R                  -  5      5      n/ nUR                  U" U R                   UXFUS95        X!R                  -  U l         [        SU5       H#  nUR                  U" U R                   X%S95        M%     [        R                  " U6 $ )Nr   F)r   r   r
   )rD   )rB   r[   r   
Sequentialr   r5   appendrange)	rA   r   rC   blocksr   rD   r?   r   is	            r   rs   ResNet._make_layer   s    
Q;$--6OO+CC		$--//)A&'UDF__45J eDMM6"C9 	:0q&!AMM%v?@ " }}f%%r   c                    U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nX#XE4$ )N)r4   r6   r8   rr   rt   ru   rv   rw   )rA   rM   x2x3x4x5s         r   rS   ResNet.forward   st    JJqMHHQKIIaLLLO[[^[[_[[_[[_r~r   )ry   r6   r4   rD   r{   rB   rt   ru   rv   rw   rr   r8   r|   rp   )i  N)FFFF)r   N)	rW   rX   rY   rZ   r2   rs   rS   r\   r]   r^   s   @r   r   r      s    26*F"9H&$ r   r   c                     [        [        / SQ40 UD6nU (       a+  UR                  [        R                  " [
        S   5      SS9  U$ )lConstructs a ResNet-18 model.
Args:
    pretrained (bool): If True, returns a model pre-trained on ImageNet
r)   r)   r)   r)   r   Fstrictr   r!   load_state_dict	model_zooload_url
model_urls
pretrainedkwargsmodels      r   r   r      H    
 :|6v6Ei00z"$,1 	 	3Lr   c           	          [        [        / SQ4[        SSSS9/ SQS.UD6nU (       a+  UR                  [        R
                  " [        S   5      SS	9  U$ )
r   r   Tr   Fr'   r(   r&   FTTTrD   rp   r   r   )r   r!   dictr   r   r   r   r   s      r   deformable_resnet18r     sp    
 :| Ht.//46 $=	H AG	HE
 i00z"$,1 	 	3Lr   c                     [        [        / SQ40 UD6nU (       a+  UR                  [        R                  " [
        S   5      SS9  U$ )zlConstructs a ResNet-34 model.
Args:
    pretrained (bool): If True, returns a model pre-trained on ImageNet
r   rb      r   r   Fr   r   r   s      r   r   r     r   r   c                     [        [        / SQ40 UD6nU (       a+  UR                  [        R                  " [
        S   5      SS9  U$ )zlConstructs a ResNet-50 model.
Args:
    pretrained (bool): If True, returns a model pre-trained on ImageNet
r   r   Fr   r   r`   r   r   r   r   r   s      r   r   r   "  r   r   c           	          [        [        / SQ4[        SSSS9/ SQS.UD6nU (       a+  UR                  [        R
                  " [        S   5      SS	9  U$ )
zConstructs a ResNet-50 model with deformable conv.
Args:
    pretrained (bool): If True, returns a model pre-trained on ImageNet
r   Tr   Fr   r   r   r   r   )r   r`   r   r   r   r   r   r   s      r   deformable_resnet50r   .  sk    
 :| d.//46 #<	
 E i00z"$,1 	 	3Lr   c                     [        [        / SQ40 UD6nU (       a+  UR                  [        R                  " [
        S   5      SS9  U$ )zmConstructs a ResNet-101 model.
Args:
    pretrained (bool): If True, returns a model pre-trained on ImageNet
)r   rb      r   r   Fr   r   r   s      r   r   r   ?  H    
 :}77Ei00{#%-2 	 	4Lr   c                     [        [        / SQ40 UD6nU (       a+  UR                  [        R                  " [
        S   5      SS9  U$ )zmConstructs a ResNet-152 model.
Args:
    pretrained (bool): If True, returns a model pre-trained on ImageNet
)r      $   r   r   Fr   r   r   s      r   r   r   K  r   r   )r   )r   )T)torch.nnr   r   torch.utils.model_zooutilsr   r5   __all__r   r   r   Moduler!   r`   r   r   r   r   r   r   r   r    r   r   <module>r      s      ) )nn
 LKKMM
-,G GTJ JZBRYY BJ	 		"		r   