
    wiF                         d dl Z d dlZd dlZd dlmZ d dlmc mZ ddlm	Z	  G d dej
                  Z G d dej
                  Z G d d	ej
                  Zd
 Z G d dej
                  ZdS )    N   )
Activationc                   ,     e Zd Z	 	 	 d fd	Zd Z xZS )ConvBNLayerN   
hard_swishc	           	         t          t          |                                            || _        t	          j        ||||||d          | _        t	          j        |          | _        | j        t          |d          | _
        d S d S )NF)in_channelsout_channelskernel_sizestridepaddinggroupsbiasT)act_typeinplace)superr   __init__actnnConv2d_convBatchNorm2d_batch_normr   _act)
selfnum_channelsfilter_sizenum_filtersr   r   channels
num_groupsr   	__class__s
            /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/rapidocr/networks/backbones/rec_mv1_enhance.pyr   zConvBNLayer.__init__
   s     	k4  ))+++Y$$#  
 >
 
 8"C>>>DIII      c                     |                      |          }|                     |          }| j        |                     |          }|S N)r   r   r   r   r   inputsys      r#   forwardzConvBNLayer.forward$   sB    JJvQ8		!Ar$   )Nr   r   __name__
__module____qualname__r   r*   __classcell__r"   s   @r#   r   r   	   sW         !? ? ? ? ? ?4      r$   r   c                   ,     e Zd Z	 	 	 d fd	Zd Z xZS )DepthwiseSeparable   r   Fc
                    t          t          |                                            |	| _        t	          |t          ||z            |||t          ||z                      | _        |	r$t          t          ||z                      | _        t	          t          ||z            dt          ||z            dd          | _	        d S )N)r   r   r   r   r   r!   r   r   )r   r   r   r   r   )
r   r2   r   use_ser   int_depthwise_convSEModule_se_pointwise_conv)r   r   num_filters1num_filters2r!   r   scaledw_sizer   r5   r"   s             r#   r   zDepthwiseSeparable.__init__-   s     	 $''00222*%L5011:-.. 0  0  0  	;L5$8 9 9::DH*\E122L5011     r$   c                     |                      |          }| j        r|                     |          }|                     |          }|S r&   )r7   r5   r9   r:   r'   s      r#   r*   zDepthwiseSeparable.forwardI   sF      ((; 	A  ##r$   )r3   r   Fr+   r0   s   @r#   r2   r2   ,   sW              8      r$   r2   c                   .     e Zd Z	 	 	 	 d fd	Zd Z xZS )MobileNetV1Enhancer3         ?r   maxc                 8   t                                                       || _        g | _        t	          |ddt          d|z            dd          | _        t          t          d|z            dddd|          }| j                            |           t          t          d|z            dddd|          }| j                            |           t          t          d|z            dddd|          }| j                            |           t          t          d|z            dd	dd
|          }	| j                            |	           t          t          d	|z            d	d	d	d|          }
| j                            |
           t          t          d	|z            d	dd	d
|          }| j                            |           t          d          D ]D}t          t          d|z            dddddd|d	  	        }| j                            |           Et          t          d|z            dddd
dd|d	  	        }| j                            |           t          t          d|z            ddd|ddd|	  	        }| j                            |           t          j        | j         | _        |dk    rt          j        ddd          | _        nt          j        ddd          | _        t          d|z            | _        d S )Nr3       r   r   )r   r   r    r   r   r   @   )r   r;   r<   r!   r   r=         )r   r   i      F)	r   r;   r<   r!   r   r>   r   r=   r5   i   T)	r   r;   r<   r!   r   r>   r   r5   r=   avgr   )r   r   r   )r   r   r=   
block_listr   r6   conv1r2   appendranger   
Sequential	AvgPool2dpool	MaxPool2dr   )r   r
   r=   last_conv_stridelast_pool_typekwargsconv2_1conv2_2conv3_1conv3_2conv4_1conv4_2_conv5conv5_6conv6r"   s                   r#   r   zMobileNetV1Enhance.__init__R   s    	
 $BJ  
 %R%Z   	w'''$R%Z   	w'''$S5[))   	w'''$S5[))   	w'''$S5[))   	w'''$S5[))   	w'''q 	* 	*A& u--  	 	 	E O""5))))$S5[))	 	 	 	w'''"TE\**#	 	 	 	u%%%-9U""1aHHHDII1aHHHDIu--r$   c                     |                      |          }|                     |          }|                     |          }|S r&   )rL   rK   rQ   r'   s      r#   r*   zMobileNetV1Enhance.forward   s8    JJvOOAIIaLLr$   )r3   rB   r   rC   r+   r0   s   @r#   rA   rA   Q   s_        "# %	r. r. r. r. r. r.h      r$   rA   c                 :    t          j        | dz   d          dz  S )Ng      @T)r   g      @)Frelu6)xs    r#   hardsigmoidre      s     71r64(((2--r$   c                   &     e Zd Zd fd	Zd Z xZS )r8      c                    t          t          |                                            t          j        d          | _        t          j        |||z  dddd          | _        t          j        ||z  |dddd          | _        d S )Nr   r   T)r
   r   r   r   r   r   )	r   r8   r   r   AdaptiveAvgPool2davg_poolr   rL   conv2)r   channel	reductionr"   s      r#   r   zSEModule.__init__   s    h&&(((,Q//Y I-  
 Y9,   


r$   c                     |                      |          }|                     |          }t          j        |          }|                     |          }t          |          }t          j        ||          }|S r&   )rj   rL   rb   relurk   re   torchmul)r   r(   outputsrd   s       r#   r*   zSEModule.forward   se    --''**W%%&//**W%%g&&Ifg&&r$   )rg   r+   r0   s   @r#   r8   r8      sL             $      r$   r8   )ossysrp   torch.nnr   torch.nn.functional
functionalrb   commonr   Moduler   r2   rA   re   r8    r$   r#   <module>r{      s2                                  ")      F" " " " " " " "Jy y y y y y y yv. . .    ry     r$   