
    9i"                        S SK r S SKJr  S SKJs  Jr  SS/r\R                  \R                  \R                  4S jr
\R                  \R                  \R                  4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 jr " S S\R                  5      r " S S\R                  5      rSS jrSS jrg)    NMobileNetV3mobilenetv3c                 V    [         R                  " U" XSUSSS9U" U5      U" SS95      $ )N      FbiasTinplacenn
Sequential)inpoupstride
conv_layer
norm_layer
nlin_layers         c/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/easyocr/DBNet/backbones/mobilenetv3.pyconv_bnr   
   s2    ==3Q634      c                 V    [         R                  " U" XSSSSS9U" U5      U" SS95      $ )Nr   r   Fr   Tr
   r   )r   r   r   r   r   s        r   conv_1x1_bnr      s2    ==3Q15134  r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )Hswish   c                 6   > [         [        U ]  5         Xl        g N)superr   __init__r   selfr   	__class__s     r   r    Hswish.__init__   s    fd$&r   c                 R    U[         R                  " US-   U R                  S9-  S-  $ Ng      @r
   g      @Frelu6r   r"   xs     r   forwardHswish.forward   s%    1771r64<<882==r   r
   T__name__
__module____qualname____firstlineno__r    r,   __static_attributes____classcell__r#   s   @r   r   r      s    > >r   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )Hsigmoid#   c                 6   > [         [        U ]  5         Xl        g r   )r   r8   r    r   r!   s     r   r    Hsigmoid.__init__$   s    h&(r   c                 L    [         R                  " US-   U R                  S9S-  $ r&   r'   r*   s     r   r,   Hsigmoid.forward(   s     wwq2vt||4r99r   r
   r.   r/   r6   s   @r   r8   r8   #   s    : :r   r8   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )SEModule,   c           
      (  > [         [        U ]  5         [        R                  " S5      U l        [        R                  " [        R                  " XU-  SS9[        R                  " SS9[        R                  " X-  USS9[        5       5      U l
        g )Nr   Fr   Tr
   )r   r?   r    r   AdaptiveAvgPool2davg_poolr   LinearReLUr8   fc)r"   channel	reductionr#   s      r   r    SEModule.__init__-   si    h&(,,Q/--IIg)3%@GGD!IIg*G%@J	
r   c                     UR                  5       u  p#  nU R                  U5      R                  X#5      nU R                  U5      R                  X#SS5      nXR	                  U5      -  $ )Nr   )sizerC   viewrF   	expand_as)r"   r+   bc_ys         r   r,   SEModule.forward8   sW    VVX
aMM!!!!'GGAJOOA!Q';;q>!!r   )rC   rF   )   r/   r6   s   @r   r?   r?   ,   s    	
" "r   r?   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )Identity?   c                 *   > [         [        U ]  5         g r   )r   rU   r    )r"   rG   r#   s     r   r    Identity.__init__@   s    h&(r   c                     U$ r    r*   s     r   r,   Identity.forwardC   s    r   rZ   r/   r6   s   @r   rU   rU   ?   s    ) r   rU   c                 P    SS K n[        UR                  U S-  U-  5      U-  5      $ )Nr         ?)numpyintceil)r+   divisible_bynps      r   make_divisiblerc   G   s'    rwwq2v,-<==r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )MobileBottleneckL   c                   > [         [        U ]  5         US;   d   eUS;   d   eUS-
  S-  nUS:H  =(       a    X:H  U l        [        R
                  n	[        R                  n
US:X  a  [        R                  nOUS:X  a  [        nO[        eU(       a  [        nO[        n[        R                  " U	" XSSSSS	9U
" U5      U" S
S9U	" XUX4XSS9U
" U5      U" U5      U" S
S9U	" XRSSSSS	9U
" U5      5	      U l        g )N)r      )r      r   rh   REHSr   Fr   Tr
   )groupsr	   )r   re   r    use_res_connectr   Conv2dBatchNorm2drE   r   NotImplementedErrorr?   rU   r   conv)r"   r   r   kernelr   expsenlpaddingr   r   r   SELayerr#   s                r   r    MobileBottleneck.__init__M   s    .0A:!#%{9szYY
^^
:J4ZJ%%GGMMsAqu5sOt$s5QsOCLt$sAqu5sO
	r   c                 l    U R                   (       a  XR                  U5      -   $ U R                  U5      $ r   )rm   rq   r*   s     r   r,   MobileBottleneck.forwardp   s*    yy|##99Q<r   )rq   rm   )Frj   r/   r6   s   @r   re   re   L   s    !
F   r   re   c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )r   w   c                   > [         [        U ]  5         SnSnUS:X  a0  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/nO0US:X  a$  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/nO[        eUS-  S:X  d   eUS:  a  [	        Xu-  5      OUn[
        R                  " [        SUS[        S9/5      U l	        / U l
        U HJ  u  ppp[	        X-  5      n[	        X-  5      nU R                  R                  [        XoXUX5      5        UnML     US:X  a  [	        S U-  5      nU R                  R                  [        UU[        S95        U R                  R                  [
        R                  " S!5      5        U R                  R                  [
        R                  " UUS!S!S5      5        U R                  R                  [        S"S#95        OUS:X  a  [	        S$U-  5      nU R                  R                  [        UU[        S95        U R                  R                  [
        R                  " S!5      5        U R                  R                  [
        R                  " UUS!S!S5      5        U R                  R                  [        S"S#95        O[        e[
        R                   " [
        R"                  " US%9[
        R$                  " Xq5      5      U l
        U R'                  5         g )&N   i   large)r   r~   r~   Frj   r   )r   @      Frj   rh   )r   H   r   Frj   r   )ri   r   (   Trj   rh   )ri   x   r   Trj   r   )r      P   Frk   rh   )r      r   Frk   r   )r      r   Frk   r   )r   i  p   Trk   r   )r     r   Trk   r   )ri   r      Trk   rh   )ri     r   Trk   r   small)r   r~   r~   Trj   rh   )r   r   r   Frj   rh   )r   X   r   Frj   r   )ri   `   r   Trk   rh   )ri   r   r   Trk   r   )ri   r   0   Trk   r   )ri      r   Trk   r   )ri   i   r   Trk   rh   )ri   @  r   Trk   r       r   r]   r   rh   )r   r   r   Tr
   r   )p)r   r   r    rp   rc   r   
ModuleListr   r   features
classifierappendre   r   rB   rn   r   DropoutrD   _initialize_weights)r"   n_class
input_sizedropoutmode
width_multinput_channellast_channelmobile_settingkrs   rO   rt   ru   soutput_channelexp_channel	last_convr#   s                     r   r    MobileNetV3.__init__x   s   k4)+7? .--------------!N$ W_ .----------N &% B!###DNQTDT~l&?@Zfwq-v'V&WX %3 AA2+AN;N()9:KMM  !1-QRWbdf!kl*M	 %3 7?&sZ'78IMM  ]IRX!YZMM  !5!5a!89MM  9lAq!!LMMM  !56W_&sZ'78IMM  ]IRX!YZMM  !5!5a!89MM  9lAq!!LMMM  !56%% --JJ!IIl,

 	  "r   c                     Su  p#pE[        S5       H@  nU R                  U   " U5      nUS:X  a  UnM"  US:X  a  UnM,  US:X  a  UnM6  US:X  d  M>  UnMB     X#XE4$ )zJx = self.features(x)
x = x.mean(3).mean(2)
x = self.classifier(x)
return x)NNNN   r         r~   )ranger   )r"   r+   x2x3x4x5stages          r   r,   MobileNetV3.forward   sj    
 02YEe$Q'Az!""  r~r   c                 *   U R                  5        GH~  n[        U[        R                  5      (       ab  [        R                  R                  UR                  SS9  UR                  b+  [        R                  R                  UR                  5        M  M  [        U[        R                  5      (       aT  [        R                  R                  UR                  5        [        R                  R                  UR                  5        M  [        U[        R                  5      (       d  GM  [        R                  R                  UR                  SS5        UR                  c  GMU  [        R                  R                  UR                  5        GM     g )Nfan_out)r   r   g{Gz?)modules
isinstancer   rn   initkaiming_normal_weightr	   zeros_ro   ones_rD   normal_)r"   ms     r   r   MobileNetV3._initialize_weights   s    A!RYY''''y'A66%GGNN166* &Ar~~..ahh'qvv&Aryy))!T266%GGNN166*  r   )r   r   )i     g?r   r]   )	r0   r1   r2   r3   r    r,   r   r4   r5   r6   s   @r   r   r   w   s    R#h$+ +r   c                 z    [        SSS0UD6nU (       a&  [        R                  " S5      nUR                  USS9  U$ )Nr   r   zmobilenetv3_large.pth.tarTstrictrZ   r   torchloadload_state_dict
pretrainedkwargsmodel
state_dicts       r   mobilenet_v3_larger      s>    /W//EZZ ;<
j6Lr   c                 z    [        SSS0UD6nU (       a&  [        R                  " S5      nUR                  USS9  U$ )Nr   r   zmobilenetv3_small_67.4.pth.tarTr   rZ   r   r   s       r   mobilenet_v3_smallr      s>    /W//EZZ @A
j6Lr   )   )F)r   torch.nnr   torch.nn.functional
functionalr(   __all__rn   ro   rE   r   r   Moduler   r8   r?   rU   rc   re   r   r   r   rZ   r   r   <module>r      s        -
( *,r~~Z\ZaZa  &(YY2>>VXV]V] >RYY >:ryy :"ryy "&ryy >
( ryy ( Vt+")) t+nr   