
    Ngqh                     V   d Z ddlmZ ddlmZ ddlZddlmZ ddlmc m	Z
 ddlmZmZmZmZ ddlmZ ddlmZmZ d	g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 G d dej                  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 G d d	ej                  Z d-dZ! edd d!d"d#d$d%d&d&d'd(d)d*i          Z"ed-d+e fd,            Z#dS ).z NasNet-A (Large)
 nasnetalarge implementation grabbed from Cadene's pretrained models
 https://github.com/Cadene/pretrained-models.pytorch
    )partial)OptionalN)ConvNormActcreate_conv2dcreate_pool2dcreate_classifier   )build_model_with_cfg)register_modelgenerate_default_cfgsNASNetALargec                   &     e Zd Zd fd	Zd Z xZS )	ActConvBnr	    c                     t          t          |                                            t          j                    | _        t          |||||          | _        t          j        |dd          | _	        d S )N)kernel_sizestridepaddingMbP?皙?epsmomentum)
superr   __init__nnReLUactr   convBatchNorm2dbnselfin_channelsout_channelsr   r   r   	__class__s         N/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/nasnet.pyr   zActConvBn.__init__   sm    i'')))799!;vW^` ` `	.53GGG    c                     |                      |          }|                     |          }|                     |          }|S N)r   r   r!   r#   xs     r'   forwardzActConvBn.forward   s4    HHQKKIIaLLGGAJJr(   )r	   r   __name__
__module____qualname__r   r-   __classcell__r&   s   @r'   r   r      sR        H H H H H H      r(   r   c                   &     e Zd Zd fd	Zd Z xZS )SeparableConv2dr   c                     t          t          |                                            t          ||||||          | _        t          ||dd          | _        d S )N)r   r   r   groupsr	   r   )r   r   )r   r5   r   r   depthwise_conv2dpointwise_conv2dr"   s         r'   r   zSeparableConv2d.__init__&   sr    ot$$--/// -+7;!@ !@ !@ !.1a!A !A !Ar(   c                 Z    |                      |          }|                     |          }|S r*   )r8   r9   r+   s     r'   r-   zSeparableConv2d.forward.   s-    !!!$$!!!$$r(   r   r.   r3   s   @r'   r5   r5   $   sR        A A A A A A      r(   r5   c                   &     e Zd Zd fd	Zd Z xZS )BranchSeparablesr	   r   Fc                    t          t          |                                            |r|n|}t          j                    | _        t          |||||          | _        t          j        |dd          | _	        t          j        d          | _
        t          |||d|          | _        t          j        |dd          | _        d S )Nr   r   r   r   r   Tinplacer	   )r   r=   r   r   r   act_1r5   separable_1r    bn_sep_1act_2separable_2bn_sep_2)	r#   r$   r%   r   r   pad_type	stem_cellmiddle_channelsr&   s	           r'   r   zBranchSeparables.__init__6   s    %%..000*3D,,WYY
*+fhX X XECPPPWT***
*\;q(T T T|MMMr(   c                    |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|S r*   )rB   rC   rD   rE   rF   rG   r+   s     r'   r-   zBranchSeparables.forwardB   sm    JJqMMQMM!JJqMMQMM!r(   )r	   r   Fr.   r3   s   @r'   r=   r=   4   sR        
N 
N 
N 
N 
N 
N      r(   r=   c                   &     e Zd Zd fd	Zd Z xZS )	CellStem0*   r   c                    t          t          |                                            || _        || _        t          | j        | j        dd          | _        t          | j        | j        dd|          | _        t          | j        | j        dd|d          | _	        t          dd	d|
          | _        t          | j        | j        dd|d          | _        t          dd	dd|          | _        t          | j        | j        dd|d          | _        t          dd	dd|          | _        t          | j        | j        d	d|          | _        t          dd	d|
          | _        d S )Nr	   r            T)rI   max   r   avgFcount_include_padr   )r   rM   r   num_channels	stem_sizer   conv_1x1r=   comb_iter_0_leftcomb_iter_0_rightr   comb_iter_1_leftcomb_iter_1_rightcomb_iter_2_leftcomb_iter_2_rightcomb_iter_3_rightcomb_iter_4_leftcomb_iter_4_rightr#   r[   rZ   rH   r&   s       r'   r   zCellStem0.__init__M   so   i'')))("!$.$2CQqQQQ 01BDDUWXZ[]e f f!1$.$BSUVXY[cos!t!t!t -eQ8 L L L!1$.$BSUVXY[cos!t!t!t -eQU\d e e e!1$.$BSUVXY[cos!t!t!t!.uae]e!f!f!f 01BDDUWXZ[]e f f!.uaH!M!M!Mr(   c                    |                      |          }|                     |          }|                     |          }||z   }|                     |          }|                     |          }||z   }|                     |          }	|                     |          }
|	|
z   }|                     |          }||z   }|                     |          }| 	                    |          }||z   }t          j        ||||gd          }|S Nr	   )r\   r]   r^   r_   r`   ra   rb   rc   rd   re   torchcat)r#   r,   x1x_comb_iter_0_leftx_comb_iter_0_rightx_comb_iter_0x_comb_iter_1_leftx_comb_iter_1_rightx_comb_iter_1x_comb_iter_2_leftx_comb_iter_2_rightx_comb_iter_2x_comb_iter_3_rightx_comb_iter_3x_comb_iter_4_leftx_comb_iter_4_rightx_comb_iter_4x_outs                     r'   r-   zCellStem0.forwarda   s   ]]1!22266"44Q77*-@@!22266"44Q77*-@@!22266"44Q77*-@@"44]CC+m;!22=AA"44R88*-@@	=-VXYZZr(   )rN   r   r.   r3   s   @r'   rM   rM   L   sR        N N N N N N(      r(   rM   c                   &     e Zd Zd fd	Zd Z xZS )	CellStem1r   c           
         t          t          |                                            || _        || _        t          d| j        z  | j        dd          | _        t          j                    | _	        t          j
                    | _        | j                            dt          j        ddd                     | j                            dt          j        | j        | j        dz  ddd                     t          j
                    | _        | j                            d	t          j        d
                     | j                            dt          j        ddd                     | j                            dt          j        | j        | j        dz  ddd                     t          j        | j        dd          | _        t'          | j        | j        dd|          | _        t'          | j        | j        dd|          | _        t-          ddd|          | _        t'          | j        | j        dd|          | _        t-          dddd|          | _        t'          | j        | j        dd|          | _        t-          dddd|          | _        t'          | j        | j        dd|          | _        t-          ddd|          | _        d S )NrR   r	   rP   avgpoolFr   rY   r   r   biaspadr	   r   r	   r   r   r   rQ   rS   rT   rU   rV   rW   rX   )r   r|   r   rZ   r[   r   r\   r   r   r   
Sequentialpath_1
add_module	AvgPool2dConv2dpath_2	ZeroPad2dr    final_path_bnr=   r]   r^   r   r_   r`   ra   rb   rc   rd   re   rf   s       r'   r   zCellStem1.__init__}   s   i'')))("!!d&7"79JAVWXXX799mooy",qV[*\*\*\]]]vryARVWAWYZcdkp'q'q'qrrrmooubl>&B&BCCCy",qV[*\*\*\]]]vryARVWAWYZcdkp'q'q'qrrr^D,=5SVWWW 01BDDUWXZ[]e f f!1$2CTEVXY[\^f!g!g -eQ8 L L L!1$2CTEVXY[\^f!g!g -eQU\d e e e!1$2CTEVXY[\^f!g!g!.uae]e!f!f!f 01BDDUWXZ[]e f f!.uaH!M!M!Mr(   c                    |                      |          }|                     |          }|                     |          }|                     |          }|                     t          j        ||gd                    }|                     |          }|                     |          }	||	z   }
| 	                    |          }| 
                    |          }||z   }|                     |          }|                     |          }||z   }|                     |
          }||z   }|                     |
          }|                     |          }||z   }t          j        ||||gd          }|S rh   )r\   r   r   r   r   ri   rj   r]   r^   r_   r`   ra   rb   rc   rd   re   )r#   x_conv0x_stem_0x_leftx_relux_path1x_path2x_rightrl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   s                          r'   r-   zCellStem1.forward   st   x(('""++f%%++f%%$$UY/A1%E%EFF!226::"44W==*-@@!226::"44W==*-@@!226::"44W==*-@@"44]CC+m;!22=AA"44V<<*-@@	=-VXYZZr(   r;   r.   r3   s   @r'   r|   r|   {   sS        N N N N N N@      r(   r|   c                   &     e Zd Zd fd	Zd Z xZS )	FirstCellr   c           
         t          t          |                                            t          ||dd          | _        t          j                    | _        t          j                    | _	        | j	        
                    dt          j        ddd                     | j	        
                    dt          j        ||ddd                     t          j                    | _        | j        
                    d	t          j        d
                     | j        
                    dt          j        ddd                     | j        
                    dt          j        ||ddd                     t          j        |dz  dd          | _        t#          ||dd|          | _        t#          ||dd|          | _        t#          ||dd|          | _        t#          ||dd|          | _        t-          dddd|          | _        t-          dddd|          | _        t-          dddd|          | _        t#          ||dd|          | _        d S )Nr	   rP   r~   rR   Fr   r   r   r   r   r   r   r   rQ   rU   rW   rX   )r   r   r   r   r\   r   r   r   r   r   r   r   r   r   r   r    r   r=   r]   r^   r_   r`   r   ra   comb_iter_3_leftrc   rd   r#   in_chs_leftout_chs_leftin_chs_rightout_chs_rightrH   r&   s         r'   r   zFirstCell.__init__   s/   i'')))!,qKKK799mooy",qV[*\*\*\]]]vrylAVW^c'd'd'deeemooubl>&B&BCCCy",qV[*\*\*\]]]vrylAVW^c'd'd'deee^L1,<%RUVVV 0qRSU] ^ ^!1-PQSTV^!_!_ 0qRSU] ^ ^!1-PQSTV^!_!_ -eQU\d e e e -eQU\d e e e!.uae]e!f!f!f 0qRSU] ^ ^r(   c                    |                      |          }|                     |          }|                     |          }|                     t	          j        ||gd                    }|                     |          }|                     |          }|                     |          }	||	z   }
| 	                    |          }| 
                    |          }||z   }|                     |          }||z   }|                     |          }|                     |          }||z   }|                     |          }||z   }t	          j        ||
||||gd          }|S rh   )r   r   r   r   ri   rj   r\   r]   r^   r_   r`   ra   r   rc   rd   )r#   r,   x_prevr   r   r   r   r   rl   rm   rn   ro   rp   rq   rr   rt   x_comb_iter_3_leftru   rv   rw   ry   rz   s                         r'   r-   zFirstCell.forward   se   &!!++f%%++f%%##EIw.@!$D$DEE--""!227;;"44V<<*-@@!226::"44V<<*-@@!227;;*V3!226::"44V<<*-@@!227;;*W4	6=-P]_lmopqqr(   r;   r.   r3   s   @r'   r   r      sR        _ _ _ _ _ _:      r(   r   c                   &     e Zd Zd fd	Zd Z xZS )
NormalCellr   c                 @   t          t          |                                            t          ||dd|          | _        t          ||dd|          | _        t          ||dd|          | _        t          ||dd|          | _        t          ||dd|          | _	        t          ||dd|          | _
        t          dddd|          | _        t          dddd|          | _        t          dddd|          | _        t          ||dd|          | _        d S )Nr	   r?   rQ   rU   rW   FrX   )r   r   r   r   conv_prev_1x1r\   r=   r]   r^   r_   r`   r   ra   r   rc   rd   r   s         r'   r   zNormalCell.__init__   s2   j$((***&{L!AW_```!,qT\]]] 0qRSU] ^ ^!1,aQRT\!]!] 0|QPQS[ \ \!1,aQRT\!]!] -eQU\d e e e -eQU\d e e e!.uae]e!f!f!f 0qRSU] ^ ^r(   c                    |                      |          }|                     |          }|                     |          }|                     |          }||z   }|                     |          }|                     |          }	||	z   }
|                     |          }||z   }|                     |          }|                     |          }||z   }| 	                    |          }||z   }t          j        |||
|||gd          }|S rh   )r   r\   r]   r^   r_   r`   ra   r   rc   rd   ri   rj   )r#   r,   r   r   r   rl   rm   rn   ro   rp   rq   rr   rt   r   ru   rv   rw   ry   rz   s                      r'   r-   zNormalCell.forward  s!   ##F++--""!227;;"44V<<*-@@!226::"44V<<*-@@!227;;*V3!226::"44V<<*-@@!227;;*W4	6=-P]_lmopqqr(   r;   r.   r3   s   @r'   r   r      sR        _ _ _ _ _ _$      r(   r   c                   &     e Zd Zd fd	Zd Z xZS )ReductionCell0r   c                 n   t          t          |                                            t          ||dd|          | _        t          ||dd|          | _        t          ||dd|          | _        t          ||dd|          | _        t          ddd|          | _
        t          ||dd|          | _        t          d	ddd
|          | _        t          ||dd|          | _        t          d	ddd
|          | _        t          ||dd|          | _        t          ddd|          | _        d S Nr	   r?   rQ   rR   rS   rT   rU   rV   rW   FrX   )r   r   r   r   r   r\   r=   r]   r^   r   r_   r`   ra   rb   rc   rd   re   r   s         r'   r   zReductionCell0.__init__+  K   nd##,,...&{L!AW_```!,qT\]]] 0qRSU] ^ ^!1-PQSTV^!_!_ -eQ8 L L L!1-PQSTV^!_!_ -eQU\d e e e!1-PQSTV^!_!_!.uae]e!f!f!f 0qRSU] ^ ^!.uaH!M!M!Mr(   c                 8   |                      |          }|                     |          }|                     |          }|                     |          }||z   }|                     |          }|                     |          }	||	z   }
|                     |          }|                     |          }||z   }|                     |          }||
z   }| 	                    |          }| 
                    |          }||z   }t          j        |
|||gd          }|S rh   r   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   ri   rj   r#   r,   r   r   r   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   s                       r'   r-   zReductionCell0.forward>  0   ##F++--""!227;;"44V<<*-@@!227;;"44V<<*-@@!227;;"44V<<*-@@"44]CC+m;!22=AA"44W==*-@@	=-VXYZZr(   r;   r.   r3   s   @r'   r   r   )  R        N N N N N N&      r(   r   c                   &     e Zd Zd fd	Zd Z xZS )ReductionCell1r   c                 n   t          t          |                                            t          ||dd|          | _        t          ||dd|          | _        t          ||dd|          | _        t          ||dd|          | _        t          ddd|          | _
        t          ||dd|          | _        t          d	ddd
|          | _        t          ||dd|          | _        t          d	ddd
|          | _        t          ||dd|          | _        t          ddd|          | _        d S r   )r   r   r   r   r   r\   r=   r]   r^   r   r_   r`   ra   rb   rc   rd   re   r   s         r'   r   zReductionCell1.__init__[  r   r(   c                 8   |                      |          }|                     |          }|                     |          }|                     |          }||z   }|                     |          }|                     |          }	||	z   }
|                     |          }|                     |          }||z   }|                     |          }||
z   }| 	                    |          }| 
                    |          }||z   }t          j        |
|||gd          }|S rh   r   r   s                       r'   r-   zReductionCell1.forwardn  r   r(   r;   r.   r3   s   @r'   r   r   Y  r   r(   r   c                        e Zd ZdZ	 	 	 	 	 	 	 	 	 d fd	Zej        j        dd            Zej        j        dd            Z	ej        j        de
j        fd            ZddedefdZd ZddefdZd Z xZS )r   zNASNetALarge (6 @ 4032)   rU   `   rR                 rW   samec
                 |   t          t          |                                            || _        || _        |x| _        | _        || _        |dk    sJ | j        dz  }
t          || j        dddt          t          j        dd          d	
          | _        t          | j        |
|dz  z  |	          | _        t          | j        |
|z  |	          | _        t#          |
|
dz  d|
z  |
|	          | _        t'          d|
z  |
d|
z  |
|	          | _        t'          d|
z  |
d|
z  |
|	          | _        t'          d|
z  |
d|
z  |
|	          | _        t'          d|
z  |
d|
z  |
|	          | _        t'          d|
z  |
d|
z  |
|	          | _        t3          d|
z  d|
z  d|
z  d|
z  |	          | _        t#          d|
z  |
d|
z  d|
z  |	          | _        t'          d|
z  d|
z  d|
z  d|
z  |	          | _        t'          d|
z  d|
z  d|
z  d|
z  |	          | _        t'          d|
z  d|
z  d|
z  d|
z  |	          | _        t'          d|
z  d|
z  d|
z  d|
z  |	          | _        t'          d|
z  d|
z  d|
z  d|
z  |	          | _         tC          d|
z  d|
z  d|
z  d|
z  |	          | _"        t#          d|
z  d|
z  d|
z  d|
z  |	          | _#        t'          d|
z  d|
z  d|
z  d|
z  |	          | _$        t'          d|
z  d|
z  d|
z  d|
z  |	          | _%        t'          d|
z  d|
z  d|
z  d|
z  |	          | _&        t'          d|
z  d|
z  d|
z  d|
z  |	          | _'        t'          d|
z  d|
z  d|
z  d|
z  |	          | _(        t          j)        d          | _*        tW          ddd          tW          ddd          tW          ddd          tW          ddd          tW          ddd          g| _,        t[          | j        | j        ||          \  | _.        | _/        | _0        d S ) Nr      rU   r   rR   r   r   r   F)r$   r%   r   r   r   
norm_layer	apply_act)rZ   rH   )r   r   r   r   rH                  Tr@   r   conv0)num_chs	reductionmodule   zcell_stem_1.conv_1x1.acti  zreduction_cell_0.conv_1x1.acti  zreduction_cell_1.conv_1x1.actr   r   )	pool_type	drop_rate)1r   r   r   num_classesr[   num_featureshead_hidden_sizechannel_multiplierr   r   r   r    r   rM   cell_stem_0r|   cell_stem_1r   cell_0r   cell_1cell_2cell_3cell_4cell_5r   reduction_cell_0cell_6cell_7cell_8cell_9cell_10cell_11r   reduction_cell_1cell_12cell_13cell_14cell_15cell_16cell_17r   r   dictfeature_infor   global_pool	head_droplast_linear)r#   r   in_chansr[   r   r   output_strider   r   rH   channelsr&   s              r'   r   zNASNetALarge.__init__  s    	lD!!**,,,&"4@@D1"4""""$* ! t~1VW`ar~53GGGSXZ Z Z
 %N6HA6M)NYac c c$N5G)GRZ\ \ \   x1}XXR R R !H8XXR R R !H8XXR R R !H8XXR R R !H8XXR R R !H8XXR R R !/H1x<XQ\H!V !V !V  H8XQ\HV V V !H1x<ha(lXW W W !XALha(lXW W W !XALha(lXW W W "XALha(lXW W W "XALha(lXW W W !/XALha(lX!W !W !W !XALha(lXW W W "XALha(lXW W W "XALha(lXW W W "XALha(lXW W W "XALha(lXW W W "XALha(lXW W W 74(((q9992LMMM3RSSS4STTTE:::
 >Ot/;R[>] >] >]:$.$*:*:*:r(   Fc                 ,    t          dg d          }|S )Nz^conv0|cell_stem_[01]))z^cell_(\d+)N)z^reduction_cell_0)r   )z^reduction_cell_1)r   )stemblocks)r   )r#   coarsematchers      r'   group_matcherzNASNetALarge.group_matcher  s/    )  
 
 
 r(   Tc                     |r
J d            d S )Nz$gradient checkpointing not supported )r#   enables     r'   set_grad_checkpointingz#NASNetALarge.set_grad_checkpointing  s    AAAAAAAAr(   returnc                     | j         S r*   )r   )r#   s    r'   get_classifierzNASNetALarge.get_classifier  s    r(   r   r   c                 f    || _         t          | j        | j         |          \  | _        | _        d S )N)r   )r   r   r   r   r   )r#   r   r   s      r'   reset_classifierzNASNetALarge.reset_classifier	  s?    &->t/;.H .H .H*$***r(   c                     |                      |          }|                     |          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }	|                     |	|          }
| 	                    |
|	          }| 
                    ||	          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     ||          }|                     |          }|S r*   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r#   r,   r   r   x_stem_1x_cell_0x_cell_1x_cell_2x_cell_3x_cell_4x_cell_5x_reduction_cell_0x_cell_6x_cell_7x_cell_8x_cell_9	x_cell_10	x_cell_11x_reduction_cell_1	x_cell_12	x_cell_13	x_cell_14	x_cell_15	x_cell_16	x_cell_17s                            r'   forward_featureszNASNetALarge.forward_features  s   **Q--##G,,##GX66;;x22;;x22;;x22;;x22;;x22;;x22!228XFF;;18<<;;x);<<;;x22;;x22LL844	LLH55	!229iHHLL!3Y??	LL,>??	LLI66	LLI66	LLI66	LLI66	HHYr(   
pre_logitsc                     |                      |          }|                     |          }|r|n|                     |          S r*   )r   r   r   )r#   r,   r  s      r'   forward_headzNASNetALarge.forward_head-  sC    QNN17qqD$4$4Q$7$77r(   c                 Z    |                      |          }|                     |          }|S r*   )r  r  r+   s     r'   r-   zNASNetALarge.forward2  s-    !!!$$a  r(   )	r   rU   r   rR   r   r   r   rW   r   F)T)rW   )r/   r0   r1   __doc__r   ri   jitignorer   r   r   Moduler   intstrr   r  boolr  r-   r2   r3   s   @r'   r   r     sX       ""  g] g] g] g] g] g]R Y	 	 	 	 YB B B B Y 	        H HC Hc H H H H
  >8 8$ 8 8 8 8
      r(   Fc                 L    t          t          | |fdt          dd          i|S )Nfeature_cfghookT)feature_cls
no_rewrite)r
   r   r   )variant
pretrainedkwargss      r'   _create_nasnetr'  8  sC      V===	
   r(   znasnetalarge.tf_in1kztimm/zjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nasnetalarge-dc4a7b8b.pth)rU   K  r(  )   r)  gx&?bicubic)      ?r+  r+  r   z
conv0.convr   )	hf_hub_idurl
input_size	pool_sizecrop_pctinterpolationmeanstdr   
first_conv
classifierr   c                 :    t          dddi|}t          d| fi |S )z'NASNet-A large model architecture.
    rH   r   nasnetalarger   )r   r'  )r%  r&  model_kwargss      r'   r7  r7  S  s4     222622L.*EEEEEr(   r  )$r  	functoolsr   typingr   ri   torch.nnr   torch.nn.functional
functionalFtimm.layersr   r   r   r   _builderr
   	_registryr   r   __all__r  r   r5   r=   rM   r|   r   r   r   r   r   r'  default_cfgsr7  r   r(   r'   <module>rD     s)                                T T T T T T T T T T T T * * * * * * < < < < < < < <
    	        bi        ry   0, , , , ,	 , , ,^A A A A A	 A A AH9 9 9 9 9	 9 9 9x+ + + + + + + +\- - - - -RY - - -`- - - - -RY - - -`l l l l l29 l l l^    %${#""# &  " F F F F F F F Fr(   