
    RЦiC                        S r SSKJr  SSKJr  SSKJr  SSKrSSKJ	r	  SSK
JrJrJrJr  SSKJr  SS	KJrJr  S
/r " S S\	R*                  5      r " S S\	R*                  5      r " S S\	R*                  5      r " S S\	R*                  5      r " S S\	R*                  5      r " S S\5      r " S S\5      r " S S
\	R*                  5      rS)S jr\" SSSSSS S!S!S"S#S$S%S&.05      r\S)S'\4S( jj5       r g)*z
pnasnet5large implementation grabbed from Cadene's pretrained models
Additional credit to https://github.com/creafz

https://github.com/Cadene/pretrained-models.pytorch/blob/master/pretrainedmodels/models/pnasnet.py

    )OrderedDict)partial)TypeN)ConvNormActcreate_conv2dcreate_pool2dcreate_classifier   )build_model_with_cfg)register_modelgenerate_default_cfgsPNASNet5Largec                   P   ^  \ rS rSr   S
S\S\S\S\S\4
U 4S jjjrS rS	rU =r	$ )SeparableConv2d   in_channelsout_channelskernel_sizestridepaddingc                    > XgS.n[         T	U ]  5         [        UU4UUUUS.UD6U l        [        UU4SUS.UD6U l        g )Ndevicedtype)r   r   r   groupsr
   r   r   )super__init__r   depthwise_conv2dpointwise_conv2d
selfr   r   r   r   r   r   r   dd	__class__s
            R/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/pnasnet.pyr   SeparableConv2d.__init__   st     / -!
 $!
 !
 !.!
 	!

 !
    c                 J    U R                  U5      nU R                  U5      nU$ Nr   r    r"   xs     r%   forwardSeparableConv2d.forward5   s'    !!!$!!!$r'   r*    NN
__name__
__module____qualname____firstlineno__intstrr   r-   __static_attributes____classcell__r$   s   @r%   r   r      sR     

 
 	

 
 
 
: r'   r   c                   X   ^  \ rS rSr     SS\S\S\S\S\S\4U 4S jjjrS	 rS
r	U =r
$ )BranchSeparables;   r   r   r   r   	stem_cellr   c	                 x  > XxS.n	[         TU ]  5         U(       a  UOUn
[        R                  " 5       U l        [        UU
U4UUS.U	D6U l        [        R                  " U
4SS0U	D6U l        [        R                  " 5       U l	        [        U
UU4SUS.U	D6U l
        [        R                  " U4SS0U	D6U l        g )Nr   r   r   epsMbP?r
   )r   r   nnReLUact_1r   separable_1BatchNorm2dbn_sep_1act_2separable_2bn_sep_2)r"   r   r   r   r   r>   r   r   r   r#   middle_channelsr$   s              r%   r   BranchSeparables.__init__=   s     /*3,WWY
*
 
 
 HEHRHWWY
*
 
 
 |EE"Er'   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU$ r)   )rE   rF   rH   rI   rJ   rK   r+   s     r%   r-   BranchSeparables.forward`   s]    JJqMQMM!JJqMQMM!r'   )rE   rI   rH   rK   rF   rJ   )r
   Fr0   NN)r2   r3   r4   r5   r6   boolr7   r   r-   r8   r9   r:   s   @r%   r<   r<   ;   sk     #!F!F !F 	!F
 !F !F !F !FF r'   r<   c                   R   ^  \ rS rSr    S
S\S\S\S\S\4
U 4S jjjrS rS	rU =r	$ )	ActConvBnj   r   r   r   r   r   c                    > XgS.n[         T	U ]  5         [        R                  " 5       U l        [        UU4UUUS.UD6U l        [        R                  " U4SS0UD6U l        g )Nr   r   r   r   rA   rB   )	r   r   rC   rD   actr   convrG   bnr!   s
            r%   r   ActConvBn.__init__l   sm     /779!
 $
 
	 ..?5?B?r'   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r)   )rV   rW   rX   r+   s     r%   r-   ActConvBn.forward   s.    HHQKIIaLGGAJr'   )rV   rX   rW   )r
   r0   NNr1   r:   s   @r%   rR   rR   j   s\     @@ @ 	@
 @ @ @. r'   rR   c                   H   ^  \ rS rSr   SS\S\S\4U 4S jjjrS rSrU =r	$ )	FactorizedReduction   r   r   r   c                    > XES.n[         TU ]  5         [        R                  " 5       U l        [        R
                  " [        S[        R                  " SSSS94S[        XS-  4SUS.UD64/5      5      U l	        [        R
                  " [        S	[        R                  " S
5      4S[        R                  " SSSS94S[        XS-  4SUS.UD64/5      5      U l        [        R                  " U4SS0UD6U l        g )Nr   avgpoolr
      F)r   count_include_padrW   r   pad)r
   rd   r
   rA   rB   )r   r   rC   rD   rV   
Sequentialr   	AvgPool2dr   path_1	ZeroPad2dpath_2rG   final_path_bn)r"   r   r   r   r   r   r#   r$   s          r%   r   FactorizedReduction.__init__   s     /779mmKQqEJK];0AhqZaheghi1
 %  mmKBLL01QqEJK];0AhqZaheghi1
 % 
  ^^LJeJrJr'   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  [        R
                  " X#/S5      5      nU$ Nr
   )rV   rg   ri   rj   torchcat)r"   r,   x_path1x_path2outs        r%   r-   FactorizedReduction.forward   sL    HHQK++a.++a.  G+=q!AB
r'   )rV   rj   rg   ri   r/   r1   r:   s   @r%   r]   r]      sC     KK K 	K K, r'   r]   c                       \ rS rSrS rSrg)CellBase   c                    U R                  U5      nU R                  U5      nX4-   nU R                  U5      nU R                  U5      nXg-   nU R	                  U5      n	U R                  U5      n
X-   nU R                  U5      nU R                  U5      nX-   nU R                  U5      nU R                  b  U R                  U5      nOUnUU-   n[        R                  " XXXU/S5      nU$ rm   )comb_iter_0_leftcomb_iter_0_rightcomb_iter_1_leftcomb_iter_1_rightcomb_iter_2_leftcomb_iter_2_rightcomb_iter_3_leftcomb_iter_3_rightcomb_iter_4_leftcomb_iter_4_rightrn   ro   )r"   x_leftx_right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_left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%   cell_forwardCellBase.cell_forward   s   !226:"44V<*@!227;"44W=*@!227;"44W=*@!22=A"44W=*@!226:!!-"&"8"8"A")*-@@		=Wdeghir'    N)r2   r3   r4   r5   r   r8   r   r'   r%   ru   ru      s    r'   ru   c                   P   ^  \ rS rSr   S
S\S\S\S\S\4
U 4S jjjrS rS	rU =r	$ )	CellStem0   in_chs_leftout_chs_leftin_chs_rightout_chs_rightpad_typec                 t  > XgS.n[         T	U ]  5         [        X44SUS.UD6U l        [	        X4SSSUS.UD6U l        [        R                  " [        S[        S	S
SUS94S[        X4SUS.UD64S[        R                  " U4SS0UD64/5      5      U l        [	        XD4SSUS.UD6U l        [        S	S
SUS9U l        [	        XD4SSUS.UD6U l        [	        XD4S
SUS.UD6U l        [	        XD4S
US.UD6U l        [        S	S
SUS9U l        [	        X44S
SSUS.UD6U l        [        XD4SSUS.UD6U l        g )Nr   r
   r      ra   T)r   r   r>   r   max_poolmax   r@   rW   rX   rA   rB      rU   )r   r   rR   conv_1x1r<   rx   rC   re   r   r   r   rG   ry   rz   r{   r|   r}   r~   r   r   r   )
r"   r   r   r   r   r   r   r   r#   r$   s
            r%   r   CellStem0.__init__   s    /!,e1V^ebde 0!h34Q$X`!hdf!h!#{ua8LM];d!U]dacde2>>,@E@R@A<
 0 " !1![678![WY![!.ua8!T 0![678![WY![!1"[678"[WY"[ !1!Q67!QMO!Q!.ua8!T 0!j56qDZb!jfh!j!*"[678"[WY"[r'   c                 J    U R                  U5      nU R                  X5      nU$ r)   )r   r   r"   r   r   r   s       r%   r-   CellStem0.forward   s%    --'!!&2r'   )rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r/   r1   r:   s   @r%   r   r      sZ     &[&[ &[ 	&[
 &[ &[ &[P r'   r   c                   \   ^  \ rS rSr     SS\S\S\S\S\S\S\4U 4S	 jjjrS
 rSr	U =r
$ )Cell   r   r   r   r   r   is_reductionmatch_prev_layer_dimsc
                 f  > XS.n
[         TU ]  5         U(       a  SOSnXpl        U(       a  [        X4SU0U
D6U l        O[        X4SUS.U
D6U l        [        X44SUS.U
D6U l        [        X"4SXS.U
D6U l        [        SS	XS
9U l
        [        XD4SXS.U
D6U l        [        SS	XS
9U l        [        XD4SXS.U
D6U l        [        XD4S	XS.U
D6U l        [        XD4SS	0U
D6U l        [        SS	XS
9U l        [        X"4S	XS.U
D6U l        U(       a  [        XD4SXS.U
D6U l        g S U l        g )Nr   ra   r
   r   r   r   rU   r   r   r@   r   r   )r   r   match_prev_layer_dimensionsr]   conv_prev_1x1rR   r   r<   rx   r   ry   rz   r{   r|   r}   r~   r   r   r   )r"   r   r   r   r   r   r   r   r   r   r#   r   r$   s               r%   r   Cell.__init__   s    / #
 ,A( !4[!gX`!gdf!gD!*;!lRS]e!lik!lD!,e1V^ebde 0!^45f!^Z\!^!.ua!Y 0!`67!`\^!`!.ua!Y 0!`67!`\^!`!1"`67"`\^"` !1 c[\ c`b c!.ua!Y 0!^45f!^Z\!^%.&d:;F&d`b&dD" &*D"r'   c                 l    U R                  U5      nU R                  U5      nU R                  X5      nU$ r)   )r   r   r   r   s       r%   r-   Cell.forward/  s5    ##F+--(!!&2r'   )rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   )r0   FFNN)r2   r3   r4   r5   r6   r7   rP   r   r-   r8   r9   r:   s   @r%   r   r      sm     !&*/3*3* 3* 	3*
 3* 3* 3* $(3* 3*j r'   r   c                   X  ^  \ rS rSr        SS\S\S\S\S\S\4U 4S jjjr\R                  R                  SS	 j5       r\R                  R                  SS
 j5       r\R                  R                  S\R                  4S j5       rSS\S\4S jjrS rSS\4S jjrS rSrU =r$ )r   i6  num_classesin_chansoutput_stride	drop_rateglobal_poolr   c	                 T  > [         T
U ]  5         XxS.n	Xl        X l        S=U l        U l        US:X  d   e[        US4SSS[        [        R                  SS	S
9SS.U	D6U l
        [        S%SSSSUS.U	D6U l        [        S%SSSSUSSS.U	D6U l        [        S%SSSSUSS.U	D6U l        [        S%SSSSUS.U	D6U l        [        S%SSSSUS.U	D6U l        [        S%SSSSUS.U	D6U l        [        S%SSSSUSS.U	D6U l        [        S%SSSSUSS.U	D6U l        [        S%SSSSUS.U	D6U l        [        S%SSSSUS.U	D6U l        [        S%SSSSUSS.U	D6U l        [        S%SSSSUSS.U	D6U l        [        S%SSSSUS.U	D6U l        [        S%SSSSUS.U	D6U l        [        R6                  " 5       U l        [;        SSSS9[;        SSSS9[;        SSS S9[;        SS!S"S9[;        SSS#S9/U l        [?        U R                  U R                  4XTS$.U	D6u  U l         U l!        U l"        g )&Nr   i      `   r   ra   r   rB   g?)rA   momentumF)r   r   r   
norm_layer	apply_act6   )r   r   r   r   r   l   i  T)r   r   r   r   r   r   r      i  )r   r   r   r   r   r   i8  i  )r   r   r   r   r   r   ip  i`  conv_0)num_chs	reductionmodule   zcell_stem_1.conv_1x1.act   zcell_4.conv_1x1.act   zcell_8.conv_1x1.actrV   )	pool_typer   r   )#r   r   r   r   num_featureshead_hidden_sizer   r   rC   rG   r   r   cell_stem_0r   cell_stem_1cell_0cell_1cell_2cell_3cell_4cell_5cell_6cell_7cell_8cell_9cell_10cell_11rD   rV   dictfeature_infor	   r   	head_droplast_linear)r"   r   r   r   r   r   r   r   r   r#   r$   s             r%   r   PNASNet5Large.__init__7  sh    	/& 488D1"""!b`&'1r~~53GSX`\^` % i"BYaiegi   A3c\d"&TA=?A  .#Cs]e"&.*,.  n#DPS^fnjln o3TQT_gokmo o3TQT_gokmo  %3TQT_g%!#%  .3TQT_g"&.*,.  o3TQT_gokmo o3TQT_gokmo  %3TQT_g%!#%  .3TQT_g"&.*,.  o3TQT_gokmo o3TQT_gokmo779q:2LM3HI4IJE:
 >Ot//>c;F>c_a>c:$.$*:r'   c                     [        SSS9$ )Nz^conv_0|cell_stem_[01]z^cell_(\d+))stemblocks)r   )r"   coarses     r%   group_matcherPNASNet5Large.group_matcher~  s    2>JJr'   c                      U(       a   S5       eg )Nz$gradient checkpointing not supportedr   )r"   enables     r%   set_grad_checkpointing$PNASNet5Large.set_grad_checkpointing  s    AAAz6r'   returnc                     U R                   $ r)   )r   )r"   s    r%   get_classifierPNASNet5Large.get_classifier  s    r'   c                 x    X4S.nXl         [        U R                  U R                   4SU0UD6u  U l        U l        g )Nr   r   )r   r	   r   r   r   )r"   r   r   r   r   r#   s         r%   reset_classifierPNASNet5Large.reset_classifier  sI    /&->t//.N;F.NJL.N*$*r'   c                 &   U R                  U5      nU R                  U5      nU R                  X#5      nU R                  X45      nU R	                  XE5      nU R                  XV5      nU R                  Xg5      nU R                  Xx5      n	U R                  X5      n
U R                  X5      nU R                  X5      nU R                  X5      nU R                  X5      nU R                  X5      nU R                  X5      nU R                  U5      nU$ r)   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   )r"   r,   x_conv_0x_stem_0x_stem_1x_cell_0x_cell_1x_cell_2x_cell_3x_cell_4x_cell_5x_cell_6x_cell_7x_cell_8x_cell_9	x_cell_10	x_cell_11s                    r%   forward_featuresPNASNet5Large.forward_features  s    ;;q>##H-##H7;;x2;;x2;;x2;;x2;;x2;;x2;;x2;;x2;;x2;;x2LL4	LL5	HHYr'   
pre_logitsc                 z    U R                  U5      nU R                  U5      nU(       a  U$ U R                  U5      $ r)   )r   r   r   )r"   r,   r  s      r%   forward_headPNASNet5Large.forward_head  s8    QNN1q7D$4$4Q$77r'   c                 J    U R                  U5      nU R                  U5      nU$ r)   )r  r  r+   s     r%   r-   PNASNet5Large.forward  s'    !!!$a r'   )rV   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   g        avgr0   NNF)T)r  NN)r2   r3   r4   r5   r6   floatr7   r   rn   jitignorer   r   rC   Moduler   r   r  rP   r  r-   r8   r9   r:   s   @r%   r   r   6  s     $!#!$EcEc Ec 	Ec
 Ec Ec Ec EcN YYK K YYB B YY 		    NC Nc N&8$ 8
 r'   c           	      :    [        [        U U4S[        SSS90UD6$ )Nfeature_cfghookT)feature_cls
no_rewrite)r   r   r   )variant
pretrainedkwargss      r%   _create_pnasnetr    s3     V=	
  r'   zpnasnet5large.tf_in1kztimm/)r   K  r  )   r  gx&?bicubic)      ?r  r  r
  zconv_0.convr   z
apache-2.0)	hf_hub_id
input_size	pool_sizecrop_pctinterpolationmeanstdr   
first_conv
classifierlicenser   c                 6    [        SSS0UD6n[        SU 40 UD6$ )z|PNASNet-5 model architecture from the
`"Progressive Neural Architecture Search"
<https://arxiv.org/abs/1712.00559>`_ paper.
r   samepnasnet5larger   )r   r  )r  r  model_kwargss      r%   r*  r*    s(     2262L?JG,GGr'   r  )!__doc__collectionsr   	functoolsr   typingr   rn   torch.nnrC   timm.layersr   r   r   r	   _builderr   	_registryr   r   __all__r  r   r<   rR   r]   ru   r   r   r   r  default_cfgsr*  r   r'   r%   <module>r6     s   $     T T * <
"bii "J,ryy ,^		 @")) @ryy <- -`;8 ;|uBII up %#"##& " H H Hr'   