o
    *jV                     @   s~   d dl Z d dlZd dlZd dlZd dlmZ ddlmZm	Z	m
Z
mZ ddlmZmZmZ G dd dejZG dd deZdS )	    N   )IdentityLayerMBInvertedConvLayerMobileInvertedResidualBlock	ZeroLayer)	MixedEdgebuild_candidate_opsconv_func_by_namec                       sL   e Zd Z fddZdd Zdd Zedd Zd	d
 Ze	dd Z
  ZS )NasRecBackbonec                    s.   t t|   || _t|| _g d| _d S )N)            )superr
   __init__
first_convnnZ
ModuleListblocksZ
output_idx)selfr   r   	__class__ u/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/cv/ocr_detection/modules/proxyless.pyr      s   zNasRecBackbone.__init__c                 C   sr   |  |}d}g }| jD ]}||}|d tt| jd  dkr&|| |d7 }q|d |d |d |d fS )Nr   r            )r   r   intlenappend)r   xidxoutblockr   r   r   forward   s   



zNasRecBackbone.forwardc                 C   s<   |   D ]}t|tjst|tjr|j|jd  S qd S )Nmomentumepsmodules
isinstancer   BatchNorm2dZBatchNorm1dr%   r&   )r   mr   r   r   get_bn_param    s   
zNasRecBackbone.get_bn_paramc                 C   s    t j|  ddd | jD dS )NZconv_in3_out32_k3_s2_p1c                 S   s   g | ]}|j qS r   )config).0r"   r   r   r   
<listcomp>/   s    z)NasRecBackbone.config.<locals>.<listcomp>)namebnr   r   )r
   __name__r,   r   )r   r   r   r   r-   )   s
   zNasRecBackbone.configc                 C   s6   |   D ]}t|tjst|tjr||_||_qd S )Nr'   )r   r%   r&   r+   r   r   r   set_bn_param2   s   zNasRecBackbone.set_bn_paramc              
   C   s   | d }t d|}t|d}t|d}t|d}t|d}t|d}ttj|||||dd	t|tjd
d}g }	| d D ]
}
|		t
|
 qJt||	}d| v rj|jdi | d  |S |jddd |S )Nr   z*conv_in(\d+)_out(\d+)_k(\d+)_s(\d+)_p(\d+)r   r   r   r   r   F)biasTZinplacer   r1   皙?MbP?r$   r   )rematchr   groupr   
SequentialConv2dr*   ReLUr   r   build_from_configr
   r3   )r-   Zfirst_conv_configZ	match_objZ
in_channelout_channelkernel_sizestridepaddingr   r   Zblock_confignetr   r   r   r>   9   s@   

z NasRecBackbone.build_from_config)r2   
__module____qualname__r   r#   r,   propertyr-   r3   staticmethodr>   __classcell__r   r   r   r   r
      s    	
r
   c                       s&   e Zd ZdZ		d fdd	Z  ZS )CompactDetBackbonez%
    proxyless nas backbone, 5M.
    Nr6   r7   c              
      s  |d u r|d }t t jd|dddddt |t jdd	}g d
}g d}g d}g d}	g d}
|rBt|t|	d ksAJ n
t|t|	ksLJ g }t||	|
D ]`\}}}t|D ]5}|dkrf|}nd}t|}t	|||  |||}|dkr||krt
 }nd }t||}|| |}q]|d urt|}t	|||  |||}t
 }t||}|| qT|| _tt| || |  D ])}t|t jrt jj|jddd qt|t jrt j|jd t j|jd qd S )Nr   r   )r   r   r   r   F)r@   rA   rB   r4   Tr5   )Z5x5_MBConv2Z5x5_MBConv4Z3x3_MBConv2Z3x3_MBConv4Z13_MixConv2Z13_MixConv4Z35_MixConv2Z35_MixConv4Z135_MixConv2Z135_MixConv4Z13_LinMixConvZ35_LinMixConvZ135_LinMixConvZ13_RepConv2Z13_RepConv4Z35_RepConv2Z35_RepConv4Z135_RepConv2Z135_RepConv4Zero)ZSE_2ZSE_4ZSE_8rK   )   r   r   r   r   r      rM      rN   rM   r   rM   rN   rM   rN   rN   r   r   rN   rN   rN   rM   r   )r   r   r   r   )r   r   rO   rO   rO   r   )r   r   Zfan_outZrelu)modeZnonlinearity)r   r;   r<   r*   r=   r   sumzipranger	   r   r   r   r?   r   rI   r   r(   r)   initZkaiming_normal_weightZ	constant_r4   )r   Zwidth_stagesZinput_channelZbn_paramkwargsr   Zconv_candidatesZse_candidatesZconv_op_idsZn_cell_stagesZstride_stagesr   widthZn_cellsirA   Zblock_iZconv_opZshortcutZinverted_residual_blockZse_opr+   r   r   r   r   _   s   




zCompactDetBackbone.__init__)NrJ   )r2   rD   rE   __doc__r   rH   r   r   r   r   rI   Z   s
    rI   )r8   sysnumpynpZtorchZtorch.nnr   Zlayersr   r   r   r   Zmix_opsr   r   r	   Moduler
   rI   r   r   r   r   <module>   s    M