
    kh.h                     R   d Z ddlm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 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y),z NasNet-A (Large)
 nasnetalarge implementation grabbed from Cadene's pretrained models
 https://github.com/Cadene/pretrained-models.pytorch
    )partialN)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 )	ActConvBnc                     t         t        |           t        j                         | _        t        |||||      | _        t        j                  |dd      | _	        y )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/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/nasnet.pyr   zActConvBn.__init__   sJ    i')779!;vW^`	..53G    c                 l    | j                  |      }| j                  |      }| j                  |      }|S N)r   r   r   r!   xs     r%   forwardzActConvBn.forward   s.    HHQKIIaLGGAJr&   )r    __name__
__module____qualname__r   r+   __classcell__r$   s   @r%   r   r      s    Hr&   r   c                   &     e Zd Zd fd	Zd Z xZS )SeparableConv2dc                 ~    t         t        |           t        ||||||      | _        t        ||dd      | _        y )N)r   r   r   groupsr   r   )r   r   )r   r4   r   r   depthwise_conv2dpointwise_conv2dr    s         r%   r   zSeparableConv2d.__init__$   sE    ot-/ -+7;!@ !.1a!Ar&   c                 J    | j                  |      }| j                  |      }|S r(   )r7   r8   r)   s     r%   r+   zSeparableConv2d.forward,   s'    !!!$!!!$r&   r,   r-   r2   s   @r%   r4   r4   "   s    Ar&   r4   c                   &     e Zd Zd fd	Zd Z xZS )BranchSeparablesc                 f   t         t        |           |r|n|}t        j                         | _        t        |||||      | _        t        j                  |dd      | _	        t        j                  d      | _
        t        |||d|      | _        t        j                  |dd      | _        y )Nr   r   r   r   r   Tinplacer   )r   r<   r   r   r   act_1r4   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__4   s    .0*3,WWY
*+fhXECPWWT*
*\;q(T|Mr&   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }|S r(   )rA   rB   rC   rD   rE   rF   r)   s     r%   r+   zBranchSeparables.forward@   s]    JJqMQMM!JJqMQMM!r&   )r   r,   Fr-   r2   s   @r%   r<   r<   2   s    
Nr&   r<   c                   &     e Zd Zd fd	Zd Z xZS )	CellStem0c                    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|
      | _        y )Nr   r            T)rH   max   r   avgFcount_include_padr   )r   rL   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!   rY   rX   rG   r$   s       r%   r   zCellStem0.__init__K   sD   i')("!$..$2C2CQqQ 01B1BDDUDUWXZ[]e f!1$..$BSBSUVXY[cos!t -eQ8 L!1$..$BSBSUVXY[cos!t -eQU\d e!1$..$BSBSUVXY[cos!t!.uae]e!f 01B1BDDUDUWXZ[]e f!.uaH!Mr&   c                    | j                  |      }| j                  |      }| j                  |      }||z   }| j                  |      }| j	                  |      }||z   }| j                  |      }	| j                  |      }
|	|
z   }| j                  |      }||z   }| j                  |      }| j                  |      }||z   }t        j                  ||||gd      }|S Nr   )rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   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.forward_   s    ]]1!2226"44Q7*-@@!2226"44Q7*-@@!2226"44Q7*-@@"44]C+m;!22=A"44R8*-@@		=-VXYZr&   )*   r,   r-   r2   s   @r%   rL   rL   J   s    N(r&   rL   c                   &     e Zd Zd fd	Zd Z xZS )	CellStem1c           
         t         t        |           || _        || _        t        d| j                  z  | j                  dd      | _        t        j                         | _	        t        j                         | _        | j                  j                  dt        j                  ddd             | j                  j                  dt        j                  | j                  | j                  dz  ddd             t        j                         | _        | j                  j                  d	t        j                   d
             | j                  j                  dt        j                  ddd             | j                  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|      | _        y )NrP   r   rN   avgpoolFr   rW   r   r   biaspadr   r   r   r   r   r   rO   rQ   rR   rS   rT   rU   rV   )r   r{   r   rX   rY   r   rZ   r   r   r   
Sequentialpath_1
add_module	AvgPool2dConv2dpath_2	ZeroPad2dr   final_path_bnr<   r[   r\   r   r]   r^   r_   r`   ra   rb   rc   rd   s       r%   r   zCellStem1.__init__{   s]   i')("!!d&7&7"79J9JAVWX779mmoy",,qV[*\]vryyARARVWAWYZcdkp'qrmmoubll>&BCy",,qV[*\]vryyARARVWAWYZcdkp'qr^^D,=,=5SVW 01B1BDDUDUWXZ[]e f!1$2C2CTEVEVXY[\^f!g -eQ8 L!1$2C2CTEVEVXY[\^f!g -eQU\d e!1$2C2CTEVEVXY[\^f!g!.uae]e!f 01B1BDDUDUWXZ[]e f!.uaH!Mr&   c                 t   | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  t        j                  ||gd            }| j                  |      }| j                  |      }	||	z   }
| j                  |      }| j                  |      }||z   }| j                  |      }| j                  |      }||z   }| j                  |
      }||z   }| j                  |
      }| j                  |      }||z   }t        j                  ||||gd      }|S rf   )rZ   r   r   r   r   rg   rh   r[   r\   r]   r^   r_   r`   ra   rb   rc   )r!   x_conv0x_stem_0x_leftx_relux_path1x_path2x_rightrj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   s                          r%   r+   zCellStem1.forward   sH   x('"++f%++f%$$UYY/A1%EF!226:"44W=*-@@!226:"44W=*-@@!226:"44W=*-@@"44]C+m;!22=A"44V<*-@@		=-VXYZr&   r:   r-   r2   s   @r%   r{   r{   y   s    N@r&   r{   c                   &     e Zd Zd fd	Zd Z xZS )	FirstCellc           
      d   t         t        |           t        ||dd      | _        t        j                         | _        t        j                         | _	        | j                  j                  dt        j                  ddd             | j                  j                  dt        j                  ||ddd             t        j                         | _        | j                  j                  d	t        j                  d
             | j                  j                  dt        j                  ddd             | j                  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|      | _        y )Nr   rN   r}   rP   Fr~   r   r   r   r   r   r   r   rO   rS   rU   rV   )r   r   r   r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r<   r[   r\   r]   r^   r   r_   comb_iter_3_leftra   rb   r!   in_chs_leftout_chs_leftin_chs_rightout_chs_rightrG   r$   s         r%   r   zFirstCell.__init__   s   i')!,qK779mmoy",,qV[*\]vryylAVW^c'demmoubll>&BCy",,qV[*\]vryylAVW^c'de^^L1,<%RUV 0qRSU] ^!1-PQSTV^!_ 0qRSU] ^!1-PQSTV^!_ -eQU\d e -eQU\d e!.uae]e!f 0qRSU] ^r&   c                 V   | j                  |      }| j                  |      }| j                  |      }| j                  t	        j
                  ||gd            }| j                  |      }| j                  |      }| j                  |      }	||	z   }
| j                  |      }| j                  |      }||z   }| j                  |      }||z   }| j                  |      }| j                  |      }||z   }| j                  |      }||z   }t	        j
                  ||
||||gd      }|S rf   )r   r   r   r   rg   rh   rZ   r[   r\   r]   r^   r_   r   ra   rb   )r!   r*   x_prevr   r   r   r   r   rj   rk   rl   rm   rn   ro   rp   rr   x_comb_iter_3_leftrs   rt   ru   rw   rx   s                         r%   r+   zFirstCell.forward   s<   &!++f%++f%##EIIw.@!$D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r&   r:   r-   r2   s   @r%   r   r      s    _:r&   r   c                   &     e Zd Zd fd	Zd Z xZS )
NormalCellc                    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|      | _        y )Nr   r>   rO   rS   rU   FrV   )r   r   r   r   conv_prev_1x1rZ   r<   r[   r\   r]   r^   r   r_   r   ra   rb   r   s         r%   r   zNormalCell.__init__   s    j$(*&{L!AW_`!,qT\] 0qRSU] ^!1,aQRT\!] 0|QPQS[ \!1,aQRT\!] -eQU\d e -eQU\d e!.uae]e!f 0qRSU] ^r&   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }||z   }| j	                  |      }| j                  |      }	||	z   }
| j                  |      }||z   }| j                  |      }| j                  |      }||z   }| j                  |      }||z   }t        j                  |||
|||gd      }|S rf   )r   rZ   r[   r\   r]   r^   r_   r   ra   rb   rg   rh   )r!   r*   r   r   r   rj   rk   rl   rm   rn   ro   rp   rr   r   rs   rt   ru   rw   rx   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r&   r:   r-   r2   s   @r%   r   r      s    _$r&   r   c                   &     e Zd Zd fd	Zd Z xZS )ReductionCell0c                    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|      | _        y Nr   r>   rO   rP   rQ   rR   rS   rT   rU   FrV   )r   r   r   r   r   rZ   r<   r[   r\   r   r]   r^   r_   r`   ra   rb   rc   r   s         r%   r   zReductionCell0.__init__)     nd,.&{L!AW_`!,qT\] 0qRSU] ^!1-PQSTV^!_ -eQ8 L!1-PQSTV^!_ -eQU\d e!1-PQSTV^!_!.uae]e!f 0qRSU] ^!.uaH!Mr&   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }||z   }| j	                  |      }| j                  |      }	||	z   }
| j                  |      }| j                  |      }||z   }| j                  |      }||
z   }| j                  |      }| j                  |      }||z   }t        j                  |
|||gd      }|S rf   r   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rg   rh   r!   r*   r   r   r   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   s                       r%   r+   zReductionCell0.forward<     ##F+--"!227;"44V<*-@@!227;"44V<*-@@!227;"44V<*-@@"44]C+m;!22=A"44W=*-@@		=-VXYZr&   r:   r-   r2   s   @r%   r   r   '      N&r&   r   c                   &     e Zd Zd fd	Zd Z xZS )ReductionCell1c                    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|      | _        y r   )r   r   r   r   r   rZ   r<   r[   r\   r   r]   r^   r_   r`   ra   rb   rc   r   s         r%   r   zReductionCell1.__init__Y  r   r&   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }||z   }| j	                  |      }| j                  |      }	||	z   }
| j                  |      }| j                  |      }||z   }| j                  |      }||
z   }| j                  |      }| j                  |      }||z   }t        j                  |
|||gd      }|S rf   r   r   s                       r%   r+   zReductionCell1.forwardl  r   r&   r:   r-   r2   s   @r%   r   r   W  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) c
                    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        jR                  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        y ) N       rS   r   rP   r   r   r   F)r"   r#   r   r   r   
norm_layer	apply_act)rX   rG   )r   r   r   r   rG                  Tr?   `   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.act  r   )	pool_type	drop_rate)1r   r   r   num_classesrY   num_featureshead_hidden_sizechannel_multiplierr   r   r   r   r   rL   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_chansrY   r   r   output_strider   r   rG   channelsr$   s              r%   r   zNASNetALarge.__init__  s    	lD*,&"4@@D1"4"""$$* ! t~~1VW`ar~~53GSXZ
 %NN6HA6M)NYac$NN5G)GRZ\   x1}XXR !H8XXR !H8XXR !H8XXR !H8XXR !H8XXR !/H1x<XQ\H!V  H8XQ\HV !H1x<ha(lXW !XALha(lXW !XALha(lXW "XALha(lXW "XALha(lXW !/XALha(lX!W !XALha(lXW "XALha(lXW "XALha(lXW "XALha(lXW "XALha(lXW "XALha(lXW 774(q92LM3RS4STE:
 >Ot//;R[>]:$.$*:r&   c                 $    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&   c                     |rJ d       y )Nz$gradient checkpointing not supported )r!   enables     r%   set_grad_checkpointingz#NASNetALarge.set_grad_checkpointing  s    AAAz6r&   returnc                     | j                   S r(   )r   )r!   s    r%   get_classifierzNASNetALarge.get_classifier  s    r&   r   r   c                 p    || _         t        | j                  | j                   |      \  | _        | _        y )N)r   )r   r   r   r   r   )r!   r   r   s      r%   reset_classifierzNASNetALarge.reset_classifier  s3    &->t//;.H*$*r&   c                 `   | j                  |      }| j                  |      }| j                  ||      }| j                  ||      }| j	                  ||      }| j                  ||      }| j                  ||      }| j                  ||      }	| j                  |	|      }
| j                  |
|	      }| j                  ||	      }| j                  ||      }| j                  ||      }| j                  ||      }| j                  ||      }| j                  ||      }| j!                  ||      }| j#                  ||      }| j%                  ||      }| j'                  ||      }| j)                  ||      }| j+                  ||      }| j-                  ||      }| j/                  |      }|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;;x2;;x2;;x2;;x2;;x2;;x2!228XF;;18<;;x);<;;x2;;x2LL84	LLH5	!229iHLL!3Y?	LL,>?	LLI6	LLI6	LLI6	LLI6	HHYr&   
pre_logitsc                 p    | j                  |      }| j                  |      }|r|S | j                  |      S r(   )r   r   r   )r!   r*   r  s      r%   forward_headzNASNetALarge.forward_head+  s8    QNN1q7D$4$4Q$77r&   c                 J    | j                  |      }| j                  |      }|S r(   )r  r  r)   s     r%   r+   zNASNetALarge.forward0  s'    !!!$a r&   )	  rS   r   rP   r   r   g        rU   sameF)T)rU   )r.   r/   r0   __doc__r   rg   jitignorer   r   r   Moduler   intstrr   r  boolr  r+   r1   r2   s   @r%   r   r     s    "  g]R YY	 	 YYB B YY 		    HC Hc H
>8$ 8
r&   c                 @    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%  6  s3     V=	
  r&   znasnetalarge.tf_in1kztimm/zjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nasnetalarge-dc4a7b8b.pth)rS   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                 6    t        dddi|}t        d| fi |S )z'NASNet-A large model architecture.
    rG   r  nasnetalarger   )r   r%  )r#  r$  model_kwargss      r%   r5  r5  Q  s(     2262L.*EEEr&   r  )r  	functoolsr   rg   torch.nnr   timm.layersr   r   r   r   _builderr	   	_registryr
   r   __all__r  r   r4   r<   rL   r{   r   r   r   r   r   r%  default_cfgsr5  r   r&   r%   <module>r>     s1      T T * <
		  bii  ryy 0,		 ,^A		 AH9		 9x+ +\-RYY -`-RYY -`l299 l^ %{#""#& " F F Fr&   