
    wi                          d dl mZ ddlmZ ddZ G d dej                  Z G d	 d
ej                  Z G d dej                  Z G d dej                  Z	dS )    )nn   )
Activation   Nc                 |    ||}t          |t          | |dz  z             |z  |z            }|d| z  k     r||z  }|S )Nr   g?)maxint)vdivisor	min_valuenew_vs       /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/rapidocr/networks/backbones/det_mobilenet_v3.pymake_divisibler      sR    		3q7Q;//7:WDEEEsQwL    c                   .     e Zd Z	 	 	 	 d fd	Zd Z xZS )ConvBNLayer   TNc
           	         t          t          |                                            || _        t	          j        ||||||d          | _        t	          j        |          | _        | j        rt          |d          | _
        d S d S )NF)in_channelsout_channelskernel_sizestridepaddinggroupsbiasTact_typeinplace)superr   __init__if_actr   Conv2dconvBatchNorm2dbnr   act)selfr   r   r   r   r   r   r!   r&   name	__class__s             r   r    zConvBNLayer.__init__   s     	k4  ))+++I#%#
 
 
	 .
 
 ; 	>!3===DHHH	> 	>r   c                     |                      |          }|                     |          }| j        r|                     |          }|S N)r#   r%   r!   r&   )r'   xs     r   forwardzConvBNLayer.forward.   s>    IIaLLGGAJJ; 	Ar   )r   TNN__name__
__module____qualname__r    r-   __classcell__r)   s   @r   r   r      sZ         > > > > > ><      r   r   c                   &     e Zd Zd fd	Zd Z xZS )SEModule    c                 h   t          t          |                                            t          j        d          | _        t          j        |||z  dddd          | _        t          dd          | _	        t          j        ||z  |dddd          | _
        t          dd          | _        d S )Nr   r   T)r   r   r   r   r   r   relur   hard_sigmoid)r   r5   r    r   AdaptiveAvgPool2davg_poolr"   conv1r   relu1conv2r:   )r'   r   	reductionr(   r)   s       r   r    zSEModule.__init__7   s    h&&(((,Q//Y#$	1
 
 

  >>>
Y#y0$
 
 

 'MMMr   c                     |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }||z  }|S r+   )r<   r=   r>   r?   r:   )r'   inputsoutputss      r   r-   zSEModule.forwardM   sh    --''**W%%**W%%**W%%##G,,7"r   )r6   r7   r.   r3   s   @r   r5   r5   6   sR        N N N N N N,      r   r5   c                   *     e Zd Z	 	 d fd	Zd Z xZS )ResidualUnitNr7   c	                    t          t          |                                            |dk    o||k    | _        || _        t          ||dddd||dz             | _        t          ||||t          |dz
  dz            |d||dz   	  	        | _        | j        rt          ||d	z   
          | _
        t          ||ddddd |dz             | _        d S )Nr   r   T_expand)r   r   r   r   r   r!   r&   r(   r   
_depthwise	r   r   r   r   r   r   r!   r&   r(   _se)r(   F_linear)r   rE   r    if_shortcutif_ser   expand_convr	   bottleneck_convr5   mid_selinear_conv)
r'   r   mid_channelsr   r   r   use_ser&   r(   r)   s
            r   r    zResidualUnit.__init__X   s    	lD!!**,,,!Q;F;,+F
&#%	!	
 	
 	
  +$%#qQ.//$
 
 
 
 
 
 : 	D"<dUlCCCDK&$%	!	
 	
 	
r   c                     |                      |          }|                     |          }| j        r|                     |          }|                     |          }| j        r||z   }|S r+   )rN   rO   rM   rP   rQ   rL   )r'   rB   r,   s      r   r-   zResidualUnit.forward   sm    V$$  ##: 	AAQ 	
Ar   )Nr7   r.   r3   s   @r   rE   rE   W   sU         /
 /
 /
 /
 /
 /
b      r   rE   c                   (     e Zd Z	 d fd	Zd Z xZS )MobileNetV3   large      ?Fc                 0   t          t          |                                            || _        |dk    r2g dg dg dg dg dg dg dg dg d	g d	g d
g dg dg dg dg}d}nA|dk    r&g dg dg dg dg dg dg dg dg dg dg dg}d}nt	          d|z   dz             g d}||v sJ d                    ||                      d}	t          |t          |	|z            dd d!d!d"d#d$%	  	        | _        t          j
                    | _        g | _        g }
d&}t          |	|z            }	|D ]\  }}}}}}|o| j         }|d k    rH|d k    rB| j                            |	           | j                            t          j        |
            g }
|
                    t          |	t          ||z            t          ||z            ||||d't!          |d z             z   (                     t          ||z            }	|d!z  }|
                    t          |	t          ||z            d!d!d&d!d"d#d)%	  	                   | j                            t          j        |
            | j                            t          ||z                       d*S )+z
        the MobilenetV3 backbone network for detection module.
        Args:
            params(dict): the super parameters for build network
        rX   )rW      r[   Fr9   r   )rW   @      Fr9   r   )rW   H   r]   Fr9   r   )   r^   (   Tr9   r   )r_   x   r`   Tr9   r   )rW      P   F
hard_swishr   )rW      rc   Frd   r   )rW      rc   Frd   r   )rW   i  p   Trd   r   )rW     rg   Trd   r   )r_   rh      Trd   r   )r_     ri   Trd   r   rj   small)rW   r[   r[   Tr9   r   )rW   r^   r]   Fr9   r   )rW   X   r]   Fr9   r   )r_   `   r`   Trd   r   )r_   rb   r`   Trd   r   )r_   ra   0   Trd   r   )r_      rn   Trd   r   )r_   i   rm   Trd   r   )r_   @  rm   Trd   r   rp   zmode[z_model] is not implemented!)gffffff?rY   g      ?g      ?g      ?z,supported scale are {} but input scale is {}r[   rW   r   r   Trd   r=   rI   r   r#   )r   rR   r   r   r   rS   r&   r(   	conv_lastN)r   rV   r    
disable_seNotImplementedErrorformatr   r   r#   r   
ModuleListstagesr   append
SequentialrE   str)r'   r   
model_namescalerr   kwargscfgcls_ch_squeezesupported_scaleinplanes
block_listikexpcsenlsr)   s                     r   r    zMobileNetV3.__init__   s    	k4  ))+++$   .--------,,,------444444444444444444444444444!C$ !NN7"" -,,------222333333333333333333333C !NN%*$'DD   766_$$$9@@RWXX %$$#'5(899

 

 

	 moo
!(U"233$' 	 	 AsAr2q+DO+BAvv!a%%!((222""2=*#=>>>
 (!/!<!<!/	!:!: !#a!e**,	 	 	   &eai00HFAA$+EN,BCC  
 
 
	
 	
 	
 	2=*5666  0F!G!GHHHHHr   c                     |                      |          }g }| j        D ]"} ||          }|                    |           #|S r+   )r#   rv   rw   )r'   r,   out_liststages       r   r-   zMobileNetV3.forward  sN    IIaLL[ 	 	EaAOOAr   )rW   rX   rY   Fr.   r3   s   @r   rV   rV      s\        GLnI nI nI nI nI nId      r   rV   )r   N)
torchr   commonr   r   Moduler   r5   rE   rV    r   r   <module>r      s                 $ $ $ $ $") $ $ $N    ry   B: : : : :29 : : :zy y y y y") y y y y yr   