Ë
    éÓ^j"9  ã                   ó2  — U d Z ddlmZ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e#deee	jH                  f   fd„Z%dede&dede"fd„Z'd(dedeeef   f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&„«       Z0ed)de&dede"fd'„«       Z1y)*z•VGG

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ÚTypeÚ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                   óì   ‡ — e Zd ZdZdddddej
                  ej                  ddf	ded	ed
ededede	ej                     de	ej                     ddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚConvMlpzxConvolutional MLP block for VGG head.

    Replaces traditional Linear layers with Conv2d layers in the classifier.
    r   é   é   ç      ð?gš™™™™™É?NÚin_featuresÚout_featuresÚkernel_sizeÚ	mlp_ratioÚ	drop_rateÚ	act_layerÚ
conv_layerÚreturnc
                 ó  •— ||	dœ}
t         ‰| �  «        || _        t        ||z  «      } ||||fddi|
¤Ž| _         |d«      | _        t        j                  |«      | _         |||dfddi|
¤Ž| _	         |d«      | _
        y)a…  Initialize ConvMlp.

        Args:
            in_features: Number of input features.
            out_features: Number of output features.
            kernel_size: Kernel size for first conv layer.
            mlp_ratio: Ratio for hidden layer size.
            drop_rate: Dropout rate.
            act_layer: Activation layer type.
            conv_layer: Convolution layer type.
        ©ÚdeviceÚdtypeÚbiasTr   N)ÚsuperÚ__init__Úinput_kernel_sizeÚintÚfc1Úact1ÚnnÚDropoutÚdropÚfc2Úact2)Úselfr#   r$   r%   r&   r'   r(   r)   r-   r.   ÚddÚmid_featuresÚ	__class__s               €úZ/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/vgg.pyr1   zConvMlp.__init__&   sŒ   ø€ ð. ¨Ñ/ˆÜ‰ÑÔØ!,ˆÔÜ˜<¨)Ñ3Ó4ˆÙ˜k¨<¸ÑVÈ4ÐVÐSUÑVˆŒÙ˜d“OˆŒ	Ü—J‘J˜yÓ)ˆŒ	Ù˜l¨L¸!ÑMÀ$ÐMÈ"ÑMˆŒÙ˜d“Oˆ�	ó    Úxc                 óØ  — |j                   d   | j                  k  s|j                   d   | j                  k  r\t        | j                  |j                   d   «      t        | j                  |j                   d   «      f}t        j                  ||«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S )zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output tensor.
        éþÿÿÿéÿÿÿÿ)
Úshaper2   ÚmaxÚFÚadaptive_avg_pool2dr4   r5   r8   r9   r:   )r;   rA   Úoutput_sizes      r?   ÚforwardzConvMlp.forwardG   sÀ   € ð �7‰7�2‰;˜×/Ñ/Ò/°1·7±7¸2±;À×AWÑAWÒ3Wä˜t×5Ñ5°q·w±w¸r±{ÓCÄSÈ×I_ÑI_Ðab×ahÑahÐikÑalÓEmÐnˆKÜ×%Ñ% a¨Ó5ˆAØ�H‰H�Q‹KˆØ�I‰I�a‹LˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØ�I‰I�a‹LˆØˆr@   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   ÚReLUÚConv2dr3   Úfloatr   ÚModuler1   ÚtorchÚTensorrJ   Ú__classcell__©r>   s   @r?   r   r      s¬   ø„ ñð  #Ø $Ø Ø"Ø"Ø)+¯©Ø*,¯)©)ØØñ$àð$ð ð$ð ð	$ð
 ð$ð ð$ð ˜BŸI™I‘ð$ð ˜RŸY™Y™ð$ð 
õ$ðB˜Ÿ™ð ¨%¯,©,÷ r@   r   c                   ó   ‡ — e Zd ZdZddddej
                  ej                  dddddfd	ee   d
e	de	de	de
deej                     deej                     deeej                        dede
ddfˆ fd„Zej"                  j$                  d!dedeeef   fd„«       Zej"                  j$                  d"deddfd„«       Zej"                  j$                  dej                  fd„«       Zd#d
e	dee   ddfd„Zdej2                  dej2                  fd„Zd!dej2                  dedej2                  fd„Zdej2                  dej2                  fd„Zd$d „Zˆ xZS )%r   z•VGG model architecture.

    Based on `Very Deep Convolutional Networks for Large-Scale Image Recognition`
    - https://arxiv.org/abs/1409.1556
    éè  é   é    r"   NÚavgg        ÚcfgÚnum_classesÚin_chansÚoutput_strider&   r(   r)   Ú
norm_layerÚglobal_poolr'   r*   c           
      óR  •— t         ‰| �  «        ||dœ}|dk(  sJ ‚|| _        || _        |
| _        d| _        |du| _        g | _        |}d}t        j                  }g }|D ]™  }t        |«      dz
  }|dk(  r>| j                  j                  t        ||d|› �¬«      «       | |d	d	¬
«      gz  }|d	z  }ŒTt        t        |«      } |||fdddœ|¤Ž}|�|| ||fi |¤Ž |d¬«      gz  }n|| |d¬«      gz  }|}Œ› t        j                  |Ž | _        | j                  j                  t        ||dt        |«      dz
  › �¬«      «       || _        d| _        t'        || j$                  df||
||dœ|¤Ž| _        t+        | j$                  |f|	|
dœ|¤Ž| _        | j/                  «        y)a/  Initialize VGG model.

        Args:
            cfg: Configuration list defining network architecture.
            num_classes: Number of classes for classification.
            in_chans: Number of input channels.
            output_stride: Output stride of network.
            mlp_ratio: Ratio for MLP hidden layer size.
            act_layer: Activation layer type.
            conv_layer: Convolution layer type.
            norm_layer: Normalization layer type.
            global_pool: Global pooling type.
            drop_rate: Dropout rate.
        r,   rZ   FNr   r   z	features.)Únum_chsÚ	reductionÚmoduleé   )r%   ÚstriderY   )r%   ÚpaddingT)Úinplacer    r!   )r&   r'   r(   r)   )Ú	pool_typer'   )r0   r1   r]   r^   r'   Úgrad_checkpointingÚuse_normÚfeature_infor6   Ú	MaxPool2dÚlenÚappendÚdictr	   r3   Ú
SequentialÚfeaturesÚnum_featuresÚhead_hidden_sizer   Ú
pre_logitsr   ÚheadÚ_initialize_weights)r;   r\   r]   r^   r_   r&   r(   r)   r`   ra   r'   r-   r.   r<   Úprev_chsÚ
net_strideÚ
pool_layerÚlayersÚvÚlast_idxÚconv2dr>   s                        €r?   r1   zVGG.__init__c   s  ø€ ô: 	‰ÑÔØ¨Ñ/ˆØ Ò"Ð"Ð"Ø&ˆÔØ ˆŒØ"ˆŒØ"'ˆÔØ"¨$Ð.ˆŒØˆÔàˆØˆ
Ü—\‘\ˆ
Ø"$ˆØò 	ˆAÜ˜6“{ Q‘ˆHØ�CŠxØ×!Ñ!×(Ñ(¬°hÈ*Ð_hÐiqÐhrÐ]sÔ)tÔuØ™:°!¸AÔ>Ð?Ñ?�Ø˜a‘‘
äœ˜a“L�Ù# H¨aÐP¸QÈÑPÈRÑP�ØÐ)Ø˜v¡z°!Ñ':°rÑ':¹IÈdÔ<SÐTÑT‘Fà˜v¡y¸Ô'>Ð?Ñ?�FØ‘ð	ô Ÿ™ vÐ.ˆŒØ×Ñ× Ñ ¤¨hÀ*ÐW`ÔadÐekÓalÐopÑapÐ`qÐUrÔ!sÔtà$ˆÔØ $ˆÔÜ!ØØ×!Ñ!Øð	
ð  ØØØ!ñ	
ð ñ	
ˆŒô #Ø×!Ñ!Øð
ð "Øñ	
ð
 ñ
ˆŒ	ð 	× Ñ Õ"r@   Úcoarsec                 ó   — t        dd¬«      S )z¯Group matcher for parameter groups.

        Args:
            coarse: Whether to use coarse grouping.

        Returns:
            Dictionary of grouped parameters.
        z^features\.0z^features\.(\d+))ÚstemÚblocks)rq   )r;   r€   s     r?   Úgroup_matcherzVGG.group_matcherµ   s   € ô ˜Ð1DÔEÐEr@   Úenablec                 ó   — |rJ d«       ‚y)zEnable or disable gradient checkpointing.

        Args:
            enable: Whether to enable gradient checkpointing.
        z$gradient checkpointing not supportedN© )r;   r…   s     r?   Úset_grad_checkpointingzVGG.set_grad_checkpointingÂ   s   € ñ ÐAÐAÓAˆz�6r@   c                 ó.   — | j                   j                  S )zTGet the classifier module.

        Returns:
            Classifier module.
        )rw   Úfc)r;   s    r?   Úget_classifierzVGG.get_classifierË   s   € ð �y‰y�|‰|Ðr@   c                 óJ   — || _         | j                  j                  ||«       y)zšReset the classifier.

        Args:
            num_classes: Number of classes for new classifier.
            global_pool: Global pooling type.
        N)r]   rw   Úreset)r;   r]   ra   s      r?   Úreset_classifierzVGG.reset_classifierÔ   s   € ð 'ˆÔØ�	‰	�‰˜ [Õ1r@   rA   c                 ó(   — | j                  |«      }|S )z’Forward pass through feature extraction layers.

        Args:
            x: Input tensor.

        Returns:
            Feature tensor.
        )rs   ©r;   rA   s     r?   Úforward_featureszVGG.forward_featuresÞ   s   € ð �M‰M˜!ÓˆØˆr@   rv   c                 óp   — | j                  |«      }|r| j                  ||¬«      S | j                  |«      S )zÕForward pass through head.

        Args:
            x: Input features.
            pre_logits: Return features before final linear layer.

        Returns:
            Classification logits or features.
        )rv   )rv   rw   )r;   rA   rv   s      r?   Úforward_headzVGG.forward_headê   s5   € ð �O‰O˜AÓˆÙ6@ˆt�y‰y˜ zˆyÓ2ÐRÀdÇiÁiÐPQÃlÐRr@   c                 óJ   — | j                  |«      }| j                  |«      }|S )zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output logits.
        )r‘   r“   r�   s     r?   rJ   zVGG.forward÷   s)   € ð ×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr@   c                 óî  — | j                  «       D �]a  }t        |t        j                  «      rdt        j                  j                  |j                  dd¬«       |j                  €ŒWt        j                  j                  |j                  d«       Œ‚t        |t        j                  «      rUt        j                  j                  |j                  d«       t        j                  j                  |j                  d«       Œñt        |t        j                  «      s�Œt        j                  j                  |j                  dd«       t        j                  j                  |j                  d«       �Œd y)zInitialize model weights.Úfan_outÚrelu)ÚmodeÚnonlinearityNr   r   g{®Gáz„?)ÚmodulesÚ
isinstancer6   rP   ÚinitÚkaiming_normal_Úweightr/   Ú	constant_ÚBatchNorm2dÚLinearÚnormal_)r;   Úms     r?   rx   zVGG._initialize_weights  sà   € à—‘“ó 
	-ˆAÜ˜!œRŸY™YÔ'Ü—‘×'Ñ'¨¯©°yÈvÐ'ÔVØ—6‘6Ñ%Ü—G‘G×%Ñ% a§f¡f¨aÕ0Ü˜AœrŸ~™~Ô.Ü—‘×!Ñ! !§(¡(¨AÔ.Ü—‘×!Ñ! !§&¡&¨!Õ,Ü˜AœrŸy™yÖ)Ü—‘—‘ §¡¨!¨TÔ2Ü—‘×!Ñ! !§&¡&¨!Ö,ñ
	-r@   ©F)T)N)r*   N)rK   rL   rM   rN   r6   rO   rP   r   r   r3   rQ   r   rR   r   Ústrr1   rS   ÚjitÚignoreÚboolr   r„   rˆ   r‹   rŽ   rT   r‘   r“   rJ   rx   rU   rV   s   @r?   r   r   \   sã  ø„ ñð  $ØØ!#Ø"Ø)+¯©Ø*,¯)©)Ø48Ø$Ø!ØØñP#à�c‘ðP#ð ðP#ð ð	P#ð
 ðP#ð ðP#ð ˜BŸI™I‘ðP#ð ˜RŸY™Y™ðP#ð !  b§i¡i¡Ñ1ðP#ð ðP#ð ðP#ð 
õP#ðd ‡Y�Y×Ññ
F Dð 
F°T¸#¸s¸(±^ò 
Fó ð
Fð ‡Y�Y×ÑñB¨Tð B¸Tò Bó ðBð ‡Y�Y×Ñð §	¡	ò ó ðñ2¨Cð 2¸hÀs¹mð 2ÐW[ó 2ð
 %§,¡,ð 
°5·<±<ó 
ñS˜eŸl™lð S¸ð SÈÏÉó Sð˜Ÿ™ð ¨%¯,©,ó ÷-r@   Ú
state_dictr*   c                 ó  — i }| j                  «       D ]r  \  }}|}|j                  dd«      }|j                  dd«      }|j                  dd«      }d|v r|j                  dd	d
d
«      }d|v r|j                  dddd«      }|||<   Œt |S )z»Convert patch embedding weight from manual patchify + linear proj to conv.

    Args:
        state_dict: State dictionary to filter.

    Returns:
        Filtered state dictionary.
    zclassifier.0zpre_logits.fc1zclassifier.3zpre_logits.fc2zclassifier.6úhead.fczclassifier.0.weightrD   r   r!   zclassifier.3.weightr    r   )ÚitemsÚreplaceÚreshape)r©   Úout_dictÚkr}   Úk_rs        r?   Ú
_filter_fnr²     s¤   € ð €HØ× Ñ Ó"ò 	‰ˆˆ1ØˆØ�k‰k˜.Ð*:Ó;ˆØ�k‰k˜.Ð*:Ó;ˆØ�k‰k˜.¨)Ó4ˆØ  AÑ%Ø—	‘	˜"˜c 1 aÓ(ˆAØ  AÑ%Ø—	‘	˜"˜d A qÓ)ˆAØˆ�Šð	ð €Or@   ÚvariantÚ
pretrainedÚkwargsc                 óª   — | j                  d«      d   }|j                  dd«      }t        t        | |ft        |   t        d|¬«      t        dœ|¤Ž}|S )zÍCreate a VGG model.

    Args:
        variant: Model variant name.
        pretrained: Load pretrained weights.
        **kwargs: Additional model arguments.

    Returns:
        VGG model instance.
    Ú_r   Úout_indices)r   r   rf   rY   é   é   T)Úflatten_sequentialr¸   )Ú	model_cfgÚfeature_cfgÚpretrained_filter_fn)ÚsplitÚpopr   r   r   rq   r²   )r³   r´   rµ   r\   r¸   Úmodels         r?   Ú_create_vggrÂ   *  sg   € ð �-‰-˜Ó
˜QÑ
€Cà—*‘*˜]Ð,>Ó?€KÜ ÜØØðô �s‘)Ü¨D¸kÔJÜ'ñð ñ€Eð €Lr@   Úurlc                 ó2   — | dddddt         t        dddd	œ|¥S )
z»Create default configuration dictionary.

    Args:
        url: Model weight URL.
        **kwargs: Additional configuration options.

    Returns:
        Configuration dictionary.
    rX   )rY   éà   rÅ   )r!   r!   g      ì?Úbilinearz
features.0r«   zbsd-3-clause)rÃ   r]   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdÚ
first_convÚ
classifierÚlicenser
   )rÃ   rµ   s     r?   Ú_cfgrÐ   D  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_in1kc                 ó2   — t        di |¤Ž}t        dd| i|¤ŽS )z£VGG 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   ©rq   rÂ   ©r´   rµ   Ú
model_argss      r?   r   r   e  ó"   € ô
 ‘˜‘€JÜÑD¨:ÐD¸ÑDÐDr@   c                 óR   — t        ddt        j                  i|¤Ž}t        dd| i|¤ŽS )z·VGG 11-layer model (configuration "A") with batch normalization
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    r`   r´   r‡   )Úvgg11_bn©rq   r6   r    rÂ   rÔ   s      r?   rØ   rØ   n  ó-   € ô
 Ñ:¤§¡Ð:°6Ñ:€JÜÑG¨jÐG¸JÑGÐGr@   c                 ó2   — t        di |¤Ž}t        dd| i|¤ŽS )zžVGG 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Ô   s      r?   r   r   w  rÖ   r@   c                 óR   — t        ddt        j                  i|¤Ž}t        dd| i|¤ŽS )z·VGG 13-layer model (configuration "B") with batch normalization
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    r`   r´   r‡   )Úvgg13_bnrÙ   rÔ   s      r?   rÝ   rÝ   €  rÚ   r@   c                 ó2   — t        di |¤Ž}t        dd| i|¤ŽS )zžVGG 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Ô   s      r?   r   r   ‰  rÖ   r@   c                 óR   — t        ddt        j                  i|¤Ž}t        dd| i|¤ŽS )z·VGG 16-layer model (configuration "D") with batch normalization
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    r`   r´   r‡   )Úvgg16_bnrÙ   rÔ   s      r?   rà   rà   ’  rÚ   r@   c                 ó2   — t        di |¤Ž}t        dd| i|¤ŽS )zžVGG 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Ô   s      r?   r   r   ›  rÖ   r@   c                 óR   — t        ddt        j                  i|¤Ž}t        dd| i|¤ŽS )z·VGG 19-layer model (configuration 'E') with batch normalization
    `"Very Deep Convolutional Networks For Large-Scale Image Recognition" <https://arxiv.org/pdf/1409.1556.pdf>`._
    r`   r´   r‡   )Úvgg19_bnrÙ   rÔ   s      r?   rã   rã   ¤  rÚ   r@   )Ú r¤   )2rN   Útypingr   r   r   r   r   r   r	   rS   Útorch.nnr6   Útorch.nn.functionalÚ
functionalrG   Ú	timm.datar   r   Útimm.layersr   Ú_builderr   Ú_features_fxr   Ú	_registryr   r   Ú__all__r   r¥   r3   Ú__annotations__rR   r   r   rq   rT   r²   r¨   rÂ   rÐ   Údefault_cfgsr   rØ   r   rÝ   r   rà   r   rã   r‡   r@   r?   ú<module>rñ      s½  ðò÷ @× ?Ñ ?ã Ý ß Ð ç AÝ &Ý *Ý 1ß <àˆ'€ò NÚVÚeÚtñ	*€€dˆ3��U˜3 ˜8‘_Ñ%Ð%Ñ&ó ð ô9ˆb�i‰ió 9ó ð9ôxt-ˆ"�)‰)ô t-ðn˜4ð  D¨¨e¯l©lÐ):Ñ$;ó ð.˜ð ¨$ð ¸#ð À#ó ñ4ˆcð  T¨#¨s¨(¡^ó ñ* %Ù GÔ,Ù GÔ,Ù GÔ,Ù GÔ,Ù wÔ/Ù wÔ/Ù wÔ/Ù wÔ/ñ	&ó 	€ð ñE�dð E¨cð E°cò Eó ðEð ñH˜ð H°ð H¸ò Hó ðHð ñE�dð E¨cð E°cò Eó ðEð ñH˜ð H°ð H¸ò Hó ðHð ñE�dð E¨cð E°cò Eó ðEð ñH˜ð H°ð H¸ò Hó ðHð ñE�dð E¨cð E°cò Eó ðEð ñH˜ð H°ð H¸ò Hó ñHr@   