
    9i%                         S SK r S SKJr  S SKJs  Jr   " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r	 " S S	\R                  5      r
g)
    Nc                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )ScaleChannelAttention   c                 \  > [         [        U ]  5         [        R                  " S5      U l        [        U R
                  5        [        R                  " XSSS9U l        [        R                  " U5      U l
        [        R                  " X#SSS9U l        U(       a  U R                  5         g g )N   Fbias)superr   __init__nnAdaptiveAvgPool2davgpoolprintConv2dfc1BatchNorm2dbnfc2_initialize_weightsself	in_planes
out_planesnum_featuresinit_weight	__class__s        h/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/easyocr/DBNet/decoders/feature_attention.pyr   ScaleChannelAttention.__init__   s{    #T35++A.dll99YAEB..,99ZquE$$&     c                    U R                  5        H  n[        U[        R                  5      (       a`  [        R                  R                  UR                  SSS9  UR                  b*  [        R                  R                  UR                  S5        [        U[        R                  5      (       d  M  [        R                  R                  UR                  S5        [        R                  R                  UR                  S5        M     g Nfan_outrelu)modenonlinearityr   r   
modules
isinstancer   r   initkaiming_normal_weightr	   	constant_r   r   ms     r   r   )ScaleChannelAttention._initialize_weights       A!RYY''''yv'V66%GG%%affa0!R^^,,!!!((A.!!!&&!,  r   c                     U R                  U5      nU R                  U5      n[        R                  " U R	                  U5      5      nU R                  U5      n[        R                  " US5      nU$ )Nr   )r   r   Fr#   r   r   softmaxr   xglobal_xs      r   forwardScaleChannelAttention.forward   sW    <<?88H%66$''(+,88H%99Xq)r   )r   r   r   r   T	__name__
__module____qualname____firstlineno__r   r   r7   __static_attributes____classcell__r   s   @r   r   r      s    '- r   r   c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )ScaleChannelSpatialAttention"   c                   > [         [        U ]  5         [        R                  " [        R
                  " S5      [        R                  " XSSS9[        R                  " 5       [        R                  " X!SSS95      U l        [        R                  " [        R                  " SSSSSS9[        R                  " 5       [        R                  " SSSSS9[        R                  " 5       5      U l
        [        R                  " [        R                  " XSSS9[        R                  " 5       5      U l        U(       a  U R                  5         g g )Nr   Fr      r	   padding)r
   rC   r   r   
Sequentialr   r   ReLUchannel_wiseSigmoidspatial_wiseattention_wiser   r   s        r   r   %ScaleChannelSpatialAttention.__init__#   s    *D:<MM  #IIiae<GGIIIjQU;
 MMIIaAE15GGIIIaAE*JJL
 !mmIIiqu=JJL
 $$& r   c                    U R                  5        H  n[        U[        R                  5      (       a`  [        R                  R                  UR                  SSS9  UR                  b*  [        R                  R                  UR                  S5        [        U[        R                  5      (       d  M  [        R                  R                  UR                  S5        [        R                  R                  UR                  S5        M     g r!   r&   r-   s     r   r   0ScaleChannelSpatialAttention._initialize_weights:   r0   r   c                     U R                  U5      R                  5       nX!-   n[        R                  " USSS9nU R	                  U5      U-   nU R                  U5      nU$ Nr   T)dimkeepdim)rK   sigmoidtorchmeanrM   rN   r4   s      r   r7   $ScaleChannelSpatialAttention.forwardD   s`     $$Q'//1<JJxQ5$$Q'(2&&x0r   )rN   rK   rM   r9   r:   rA   s   @r   rC   rC   "   s    '.-
 
r   rC   c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )ScaleSpatialAttentionP   c                   > [         [        U ]  5         [        R                  " [        R
                  " SSSSSS9[        R                  " 5       [        R
                  " SSSSS9[        R                  " 5       5      U l        [        R                  " [        R
                  " XSSS9[        R                  " 5       5      U l	        U(       a  U R                  5         g g )Nr   rF   FrG   r   )r
   r[   r   r   rI   r   rJ   rL   rM   rN   r   r   s        r   r   ScaleSpatialAttention.__init__Q   s    #T35MMIIaAE15GGIIIaAE*JJL
 !mmIIiqu=JJL
 $$& r   c                    U R                  5        H  n[        U[        R                  5      (       a`  [        R                  R                  UR                  SSS9  UR                  b*  [        R                  R                  UR                  S5        [        U[        R                  5      (       d  M  [        R                  R                  UR                  S5        [        R                  R                  UR                  S5        M     g r!   r&   r-   s     r   r   )ScaleSpatialAttention._initialize_weightsa   r0   r   c                 |    [         R                  " USSS9nU R                  U5      U-   nU R                  U5      nU$ rS   )rW   rX   rM   rN   r4   s      r   r7   ScaleSpatialAttention.forwardk   s>    ::aQ5$$X.2&&x0r   )rN   rM   r9   r:   rA   s   @r   r[   r[   P   s    ' - r   r[   c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )ScaleFeatureSelectionq   c                 n  > [         [        U ]  5         Xl        X l        X0l        [        R                  " XSSS9U l        X@l	        U R                  S:X  a  [        X"S-  U5      U l        g U R                  S:X  a  [        X"S-  U5      U l        g U R                  S:X  a  [        X"S-  U5      U l        g g )	NrF   r   )rH   scale_spatial   scale_channel_spatialscale_channel   )r
   rd   r   in_channelsinter_channelsout_features_numr   r   convtyper[   enhanced_attentionrC   r   )r   rl   rm   rn   attention_typer   s        r   r   ScaleFeatureSelection.__init__r   s    #T35$, 0IIk1aH	"	99'&;N\]L]_o&pD#YY11&B>efSfhx&yD#YY/)&;N\]L]_o&pD# *r   c                    UR                   R                  nUR                  S5      S:w  a4  [        R                  R                  UR                  R                  5        g UR                  S5      S:w  aK  UR                  R                  R                  S5        UR                  R                  R                  S5        g g )NConv	BatchNormg      ?g-C6?)
r   r;   findr   r)   r*   r+   datafill_r	   )r   r.   	classnames      r   r   )ScaleFeatureSelection._initialize_weights   s~    KK((	>>&!R'GG##AHHMM2^^K(B.HHMM#FFKKd# /r   c                    U R                  U5      nU R                  U5      n[        U5      U R                  :X  d   eU R                  S;  a'  US   R
                  SS  n[        R                  " X4SS9n/ n[        U R                  5       H$  nUR                  US S 2XfS-   24   X&   -  5        M&     [        R                  " USS9$ )N)ri   rg   r   rk   bilinear)sizer$   r   )rT   )ro   rq   lenrn   rp   shaper2   interpolaterangeappendrW   cat)r   concat_xfeatures_listscorer   r5   is          r   r7   ScaleFeatureSelection.forward   s    99X&''1=!T%:%::::99FF!!$**12.EMM%*EEt,,-AHHU1a!e8_}'778 .yy""r   )ro   rq   rl   rm   rn   rp   )rh   rg   r:   rA   s   @r   rd   rd   q   s    q$
# 
#r   rd   )rW   torch.nnr   torch.nn.functional
functionalr2   Moduler   rC   r[   rd    r   r   <module>r      sS       BII :,299 ,\BII B #BII  #r   