
    Ng*                     j   U d Z ddlmZmZmZmZmZ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 ddlmZ ddlmZ ddlmZ dd	lmZmZ d
gZg dg dg dg ddZeeeeeef                  f         ed<   e G d de
j                              Z  G d d
e
j                  Z!d Z"dede#dede!fdZ$d(dZ% e e%d           e%d           e%d           e%d           e%d           e%d           e%d           e%d          d          Z&ed)de#dede!fd             Z'ed)de#dede!fd!            Z(ed)de#dede!fd"            Z)ed)de#dede!fd#            Z*ed)de#dede!fd$            Z+ed)de#dede!fd%            Z,ed)de#dede!fd&            Z-ed)de#dede!fd'            Z.dS )*zVGG

Adapted from https://github.com/pytorch/vision 'vgg.py' (BSD-3-Clause) with a few changes for
timm functionality.

Copyright 2021 Ross Wightman
    )AnyDictListOptionalUnioncastNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)ClassifierHead   )build_model_with_cfg)register_notrace_module)register_modelgenerate_default_cfgsVGG)@   M   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   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   r   r   r   r   )vgg11vgg13vgg16vgg19cfgsc                   V     e Zd Z	 	 	 	 	 	 	 ddedej        d	ej        f fd
Zd Z xZS )ConvMlpr               ?皙?N	drop_rate	act_layer
conv_layerc                 J   t          t          |                                            || _        t	          ||z            } ||||d          | _         |d          | _        t          j        |          | _	         |||dd          | _
         |d          | _        d S )NT)biasr   )superr   __init__input_kernel_sizeintfc1act1nnDropoutdropfc2act2)
selfin_featuresout_featureskernel_size	mlp_ratior#   r$   r%   mid_features	__class__s
            K/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/vgg.pyr)   zConvMlp.__init__"   s     	gt%%'''!,<)344:k<4PPPIdOO	Jy))	:lL!$GGGIdOO			    c                    |j         d         | j        k     s|j         d         | j        k     rUt          | j        |j         d                   t          | j        |j         d                   f}t          j        ||          }|                     |          }|                     |          }|                     |          }|                     |          }| 	                    |          }|S )N)
shaper*   maxFadaptive_avg_pool2dr,   r-   r0   r1   r2   )r3   xoutput_sizes      r:   forwardzConvMlp.forward5   s    72;///172;AW3W3Wt5qwr{CCSI_abahikalEmEmnK%a55AHHQKKIIaLLIIaLLHHQKKIIaLLr;   )r   r   r    r!   r"   NN)	__name__
__module____qualname__floatr.   Moduler)   rE   __classcell__r9   s   @r:   r   r      s        
 "#'$($ $ $ y$ 	$ $ $ $ $ $&
 
 
 
 
 
 
r;   r   c                       e Zd Zddddej        ej        dddf	dee         d	ed
edede	dej
        dej
        dej
        dede	ddf 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e         fdZdej        dej        fdZd dej        defdZdej        dej        fdZd#dZ xZS )$r            r!   Navgg        cfgnum_classesin_chansoutput_strider7   r$   r%   
norm_layerglobal_poolr#   returnc           
         t          t          |                                            |dk    sJ || _        |
| _        d| _        |d u| _        g | _        |}d}t          j	        }g }|D ]}t          |          dz
  }|dk    rD| j                            t          ||d|                      | |dd          gz  }|dz  }^t          t          |          } |||d	d
          }||| ||           |d          gz  }n|| |d          gz  }|}t          j        | | _        | j                            t          ||dt          |          dz
                        || _        d| _        t'          || j        d||
||          | _        t+          | j        ||	|
          | _        |                                  d S )NrP   Fr   r   z	features.)num_chs	reductionmodule   )r6   striderO   )r6   paddingT)inplacer   r    )r7   r#   r$   r%   )	pool_typer#   )r(   r   r)   rS   r#   grad_checkpointinguse_normfeature_infor.   	MaxPool2dlenappenddictr   r+   
Sequentialfeaturesnum_featureshead_hidden_sizer   
pre_logitsr   head_initialize_weights)r3   rR   rS   rT   rU   r7   r$   r%   rV   rW   r#   prev_chs
net_stride
pool_layerlayersvlast_idxconv2dr9   s                     r:   r)   zVGG.__init__D   s3    	c4!!###""""&""'"$.
\
"$ 	 	A6{{QHCxx!((h*]siq]s]s)t)t)tuuu::!A>>>??a

aLL#HaQJJJ)vzz!}}ii6M6M6MNNFFvyy'>'>'>??Fv.  h*UradekalalopapUrUr!s!s!sttt$ $!!!
 
 
 #!!	
 
 
	 	  """""r;   Fc                 $    t          dd          S )Nz^features\.0z^features\.(\d+))stemblocks)rh   )r3   coarses     r:   group_matcherzVGG.group_matcher   s     1DEEEEr;   Tc                     |r
J d            d S )Nz$gradient checkpointing not supported )r3   enables     r:   set_grad_checkpointingzVGG.set_grad_checkpointing   s    AAAAAAAAr;   c                     | j         j        S N)rn   fc)r3   s    r:   get_classifierzVGG.get_classifier   s    y|r;   c                 J    || _         | j                            ||           d S r   )rS   rn   reset)r3   rS   rW   s      r:   reset_classifierzVGG.reset_classifier   s&    &	[11111r;   rC   c                 0    |                      |          }|S r   )rj   r3   rC   s     r:   forward_featureszVGG.forward_features   s    MM!r;   rm   c                     |                      |          }|r|                     ||          n|                     |          S )N)rm   )rm   rn   )r3   rC   rm   s      r:   forward_headzVGG.forward_head   s>    OOA6@Rtyyzy222diiPQllRr;   c                 Z    |                      |          }|                     |          }|S r   )r   r   r   s     r:   rE   zVGG.forward   s-    !!!$$a  r;   c                    |                                  D ];}t          |t          j                  rTt          j                            |j        dd           |j        %t          j                            |j        d           qt          |t          j	                  rKt          j                            |j        d           t          j                            |j        d           t          |t          j
                  rKt          j                            |j        dd           t          j                            |j        d           =d S )Nfan_outrelu)modenonlinearityr   r   g{Gz?)modules
isinstancer.   Conv2dinitkaiming_normal_weightr'   	constant_BatchNorm2dLinearnormal_)r3   ms     r:   ro   zVGG._initialize_weights   s    
	- 
	-A!RY'' 	-''yv'VVV6%G%%afa000Ar~.. -!!!(A...!!!&!,,,,Ary)) -!T222!!!&!,,,
	- 
	-r;   F)Tr   )rX   N)rF   rG   rH   r.   ReLUr   r   r   r+   rI   rJ   strr)   torchjitignorer{   r   r   r   r   Tensorr   boolr   rE   ro   rK   rL   s   @r:   r   r   B   s       
  $!#"#%7$&I$($!<# <#c<# <# 	<#
 <# <# y<# 	<# 	<# <# <# 
<# <# <# <# <# <#| YF F F F YB B B B Y	    2 2C 2hsm 2 2 2 2%, 5<    S Sel S S S S S %,    
- - - - - - - -r;   c                 @   i }|                                  D ]\  }}|}|                    dd          }|                    dd          }|                    dd          }d|v r|                    dd	d
d
          }d|v r|                    dddd          }|||<   |S )zJ convert patch embedding weight from manual patchify + linear proj to convzclassifier.0zpre_logits.fc1zclassifier.3zpre_logits.fc2zclassifier.6head.fczclassifier.0.weightr>   r   r    zclassifier.3.weightr   r   )itemsreplacereshape)
state_dictout_dictkrt   k_rs        r:   
_filter_fnr      s    H  "" 	 	1kk.*:;;kk.*:;;kk.)44 A%%		"c1a((A A%%		"dAq))AOr;   variant
pretrainedkwargsrX   c                     |                      d          d         }|                    dd          }t          t          | |ft          |         t          d|          t          d|}|S )N_r   out_indices)r   r   r]   rO         T)flatten_sequentialr   )	model_cfgfeature_cfgpretrained_filter_fn)splitpopr   r   r   rh   r   )r   r   r   rR   r   models         r:   _create_vggr      s{    
--

Q
C**],>??K  s)DkJJJ'   E Lr;    c                 4    | dddddt           t          ddd
|S )	NrN   )rO      r   )r    r    g      ?bilinearz
features.0r   )
urlrS   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierr	   )r   r   s     r:   _cfgr      s5    =vJ%.B")   r;   ztimm/)	hf_hub_id)zvgg11.tv_in1kzvgg13.tv_in1kzvgg16.tv_in1kzvgg19.tv_in1kzvgg11_bn.tv_in1kzvgg13_bn.tv_in1kzvgg16_bn.tv_in1kzvgg19_bn.tv_in1kFc                 6    t          di |}t          dd| i|S )zVGG 11-layer model (configuration "A") from
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    r   r   r}   )r   rh   r   r   r   
model_argss      r:   r   r      ,    
 JDD:DDDDr;   c                 N    t          ddt          j        i|}t          dd| i|S )zVGG 11-layer model (configuration "A") with batch normalization
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    rV   vgg11_bnr   r}   )r   rh   r.   r   r   r   s      r:   r   r      7    
 :::6::JGGjGJGGGr;   c                 6    t          di |}t          dd| i|S )zVGG 13-layer model (configuration "B")
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    r   r   r}   )r   r   r   s      r:   r   r      r   r;   c                 N    t          ddt          j        i|}t          dd| i|S )zVGG 13-layer model (configuration "B") with batch normalization
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    rV   vgg13_bnr   r}   )r   r   r   s      r:   r   r      r   r;   c                 6    t          di |}t          dd| i|S )zVGG 16-layer model (configuration "D")
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    r   r   r}   )r   r   r   s      r:   r   r   	  r   r;   c                 N    t          ddt          j        i|}t          dd| i|S )zVGG 16-layer model (configuration "D") with batch normalization
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    rV   vgg16_bnr   r}   )r   r   r   s      r:   r   r     r   r;   c                 6    t          di |}t          dd| i|S )zVGG 19-layer model (configuration "E")
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    r   r   r}   )r   r   r   s      r:   r   r     r   r;   c                 N    t          ddt          j        i|}t          dd| i|S )zVGG 19-layer model (configuration 'E') with batch normalization
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    rV   vgg19_bnr   r}   )r   r   r   s      r:   r   r   $  r   r;   )r   r   )/__doc__typingr   r   r   r   r   r   r   torch.nnr.   torch.nn.functional
functionalrA   	timm.datar
   r   timm.layersr   _builderr   _features_fxr   	_registryr   r   __all__r   r   r+   __annotations__rJ   r   r   r   r   r   r   default_cfgsr   r   r   r   r   r   r   r   r}   r;   r:   <module>r      s     : 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9                 A A A A A A A A & & & & & & * * * * * * 1 1 1 1 1 1 < < < < < < < <' NMMVVVeeettt	* *d3U38_%%&        bi   Di- i- i- i- i-") i- i- i-X    $ # #         %$TG,,,TG,,,TG,,,TG,,,w///w///w///w///	& 	& 	 	 E Ed Ec Ec E E E E H H H H H H H H E Ed Ec Ec E E E E H H H H H H H H E Ed Ec Ec E E E E H H H H H H H H E Ed Ec Ec E E E E H H H H H H H H H Hr;   