Ë
    éÓ^j»R  ã                   ó  — d Z ddlZddlm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 ddlmZ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dl m!Z!m"Z"m#Z# dgZ$ G d„ dejJ                  «      Z& G d„ dejN                  «      Z( G d„ dejR                  «      Z* G d„ dejJ                  «      Z+de,dee-ej\                  f   fd„Z/de-de0dee0df   de1de+f
d„Z2d-de-dee-ef   fd„Z3 e" e3dd d!¬"«       e3dd d!¬"«       e3«        e3d¬#«       e3d¬#«       e3d¬#«       e3d¬#«      d$œ«      Z4e!d.de+fd%„«       Z5e!d.de+fd&„«       Z6e!d.de+fd'„«       Z7e!d.de+fd(„«       Z8e!d.de+fd)„«       Z9e!d.de+fd*„«       Z: e#e;d+d,i«       y)/zËPytorch Densenet implementation w/ tweaks
This file is a copy of https://github.com/pytorch/vision 'densenet.py' (BSD-3-Clause) with
fixed kwargs passthrough and addition of dynamic global avg/max pool.
é    N)ÚOrderedDict)ÚAnyÚDictÚOptionalÚTupleÚTypeÚUnion)ÚList©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚBatchNormAct2dÚget_norm_act_layerÚ
BlurPool2dÚcreate_classifieré   )Úbuild_model_with_cfg)ÚMATCH_PREV_GROUPÚ
checkpoint)Úregister_modelÚgenerate_default_cfgsÚregister_model_deprecationsÚDenseNetc                   óh  ‡ — e Zd ZdZeddddfdedededeej                     d	e	d
e
ddfˆ fd„Zdeej                     dej                  fd„Zdeej                     de
fd„Zdeej                     dej                  fd„Zdeej                  eej                     f   dej                  fd„Zˆ xZS )Ú
DenseLayerzbDense layer for DenseNet.

    Implements the bottleneck layer with 1x1 and 3x3 convolutions.
    ç        FNÚnum_input_featuresÚgrowth_rateÚbn_sizeÚ
norm_layerÚ	drop_rateÚgrad_checkpointingÚreturnc	                 ó†  •— ||dœ}	t         ‰
| �  «        | j                  d ||fi |	¤Ž«      f | j                  dt        j                  |||z  fddddœ|	¤Ž«      f | j                  d |||z  fi |	¤Ž«      f | j                  dt        j                  ||z  |fd	dddd
œ|	¤Ž«      f t        |«      | _        || _        y)ad  Initialize DenseLayer.

        Args:
            num_input_features: Number of input features.
            growth_rate: Growth rate (k) of the layer.
            bn_size: Bottleneck size multiplier.
            norm_layer: Normalization layer class.
            drop_rate: Dropout rate.
            grad_checkpointing: Use gradient checkpointing.
        ©ÚdeviceÚdtypeÚnorm1Úconv1r   F©Úkernel_sizeÚstrideÚbiasÚnorm2Úconv2é   ©r+   r,   Úpaddingr-   N)ÚsuperÚ__init__Ú
add_moduleÚnnÚConv2dÚfloatr!   r"   )Úselfr   r   r   r    r!   r"   r&   r'   ÚddÚ	__class__s             €ú_/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/densenet.pyr4   zDenseLayer.__init__   sñ   ø€ ð* ¨Ñ/ˆÜ‰ÑÔØ�‰˜¡Ð,>Ñ!EÀ"Ñ!EÓFÑGØ�‰˜¤§¡Ø ¨+Ñ 5ð"bØCDÈQÐUZñ"bØ^`ñ"bó 	cñ 	dà�‰˜¡¨G°kÑ,AÑ!HÀRÑ!HÓIÑJØ�‰˜¤§¡Ø�kÑ! ;ð"fØ<=ÀaÐQRÐY^ñ"fØbdñ"fó 	gñ 	hä˜yÓ)ˆŒØ"4ˆÕó    Úxsc                 ór   — t        j                  |d«      }| j                  | j                  |«      «      }|S )z.Bottleneck function for concatenated features.r   )ÚtorchÚcatr)   r(   )r9   r>   Úconcated_featuresÚbottleneck_outputs       r<   Úbottleneck_fnzDenseLayer.bottleneck_fn=   s2   € ä!ŸI™I b¨!Ó,ÐØ ŸJ™J t§z¡zÐ2CÓ'DÓEÐØ Ð r=   Úxc                 ó.   — |D ]  }|j                   sŒ y y)z.Check if any tensor in list requires gradient.TF)Úrequires_grad)r9   rE   Útensors      r<   Úany_requires_gradzDenseLayer.any_requires_gradD   s"   € àò 	ˆFØ×#Ó#Ùð	ð r=   c                 ó&   ‡ — ˆ fd„}t        |g|¢­Ž S )z5Call bottleneck function with gradient checkpointing.c                  ó&   •— ‰j                  | «      S )N)rD   )r>   r9   s    €r<   Úclosurez6DenseLayer.call_checkpoint_bottleneck.<locals>.closureM   s   ø€ Ø×%Ñ% bÓ)Ð)r=   )r   )r9   rE   rL   s   `  r<   Úcall_checkpoint_bottleneckz%DenseLayer.call_checkpoint_bottleneckK   s   ø€ ô	*ô ˜'Ð& AÒ&Ð&r=   c                 óÎ  — t        |t        j                  «      r|g}n|}| j                  rL| j	                  |«      r;t        j
                  j                  «       rt        d«      ‚| j                  |«      }n| j                  |«      }| j                  | j                  |«      «      }| j                  dkD  r,t        j                  || j                  | j                  ¬«      }|S )z¦Forward pass.

        Args:
            x: Input features (single tensor or list of tensors).

        Returns:
            New features to be concatenated.
        z%Memory Efficient not supported in JITr   )ÚpÚtraining)Ú
isinstancer@   ÚTensorr"   rI   ÚjitÚis_scriptingÚ	ExceptionrM   rD   r/   r.   r!   ÚFÚdropoutrP   )r9   rE   Úprev_featuresrC   Únew_featuress        r<   ÚforwardzDenseLayer.forwardT   s¶   € ô �aœŸ™Ô&Ø˜C‰MàˆMà×"Ò" t×'=Ñ'=¸mÔ'LÜ�y‰y×%Ñ%Ô'ÜÐ GÓHÐHØ $× ?Ñ ?ÀÓ NÑà $× 2Ñ 2°=Ó AÐà—z‘z $§*¡*Ð->Ó"?Ó@ˆØ�>‰>˜AÒÜŸ9™9 \°T·^±^ÈdÏmÉmÔ\ˆLØÐr=   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úintr   r6   ÚModuler8   Úboolr4   r
   r@   rR   rD   rI   rM   r	   rZ   Ú__classcell__©r;   s   @r<   r   r      sõ   ø„ ñð +9Ø!Ø',ØØñ5à #ð5ð ð5ð ð	5ð
 ˜RŸY™Y™ð5ð ð5ð !%ð5ð 
õ5ð@!  U§\¡\Ñ 2ð !°u·|±|ó !ð 4¨¯©Ñ#5ð ¸$ó ð'¨D°·±Ñ,>ð 'À5Ç<Á<ó 'ð˜˜uŸ|™|¨T°%·,±,Ñ-?Ð?Ñ@ð ÀUÇ\Á\÷ r=   r   c                   ó¦   ‡ — e Zd ZdZdZeddddfdededed	ed
eej                     de
deddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )Ú
DenseBlockzTDenseNet Block.

    Contains multiple dense layers with concatenated features.
    é   r   FNÚ
num_layersr   r   r   r    r!   r"   r#   c
           
      ó¬   •— ||	dœ}
t         ‰| �  «        t        |«      D ]2  }t        |||z  z   f|||||dœ|
¤Ž}| j	                  d|dz   z  |«       Œ4 y)a�  Initialize DenseBlock.

        Args:
            num_layers: Number of layers in the block.
            num_input_features: Number of input features.
            bn_size: Bottleneck size multiplier.
            growth_rate: Growth rate (k) for each layer.
            norm_layer: Normalization layer class.
            drop_rate: Dropout rate.
            grad_checkpointing: Use gradient checkpointing.
        r%   )r   r   r    r!   r"   zdenselayer%dr   N)r3   r4   Úranger   r5   )r9   rg   r   r   r   r    r!   r"   r&   r'   r:   ÚiÚlayerr;   s                €r<   r4   zDenseBlock.__init__v   s{   ø€ ð. ¨Ñ/ˆÜ‰ÑÔÜ�zÓ"ò 
	=ˆAÜØ" Q¨¡_Ñ4ðà'ØØ%Ø#Ø#5ñð ñˆEð �O‰O˜N¨a°!©eÑ4°eÕ<ñ
	=r=   Úinit_featuresc                 ó–   — |g}| j                  «       D ]  \  }} ||«      }|j                  |«       Œ  t        j                  |d«      S )zËForward pass through all layers in the block.

        Args:
            init_features: Initial features from previous layer.

        Returns:
            Concatenated features from all layers.
        r   )ÚitemsÚappendr@   rA   )r9   rl   ÚfeaturesÚnamerk   rY   s         r<   rZ   zDenseBlock.forward›   sL   € ð "�?ˆØŸ:™:›<ò 	*‰KˆD�%Ù  ›?ˆLØ�O‰O˜LÕ)ð	*ô �y‰y˜ 1Ó%Ð%r=   )r[   r\   r]   r^   Ú_versionr   r_   r   r6   r`   r8   ra   r4   r@   rR   rZ   rb   rc   s   @r<   re   re   o   s—   ø„ ñð €Hð +9Ø!Ø',ØØñ#=àð#=ð !$ð#=ð ð	#=ð
 ð#=ð ˜RŸY™Y™ð#=ð ð#=ð !%ð#=ð 
õ#=ðJ& U§\¡\ð &°e·l±l÷ &r=   re   c                   ó|   ‡ — e Zd ZdZedddfdededeej                     de	eej                        ddf
ˆ fd„Z
ˆ xZS )	ÚDenseTransitionzfTransition layer between DenseNet blocks.

    Reduces feature dimensions and spatial resolution.
    Nr   Únum_output_featuresr    Úaa_layerr#   c           
      ó>  •— ||dœ}t         ‰| �  «        | j                  d ||fi |¤Ž«       | j                  dt        j                  ||fddddœ|¤Ž«       |�| j                  d ||fd	d
i|¤Ž«       y| j                  dt        j
                  d
d
¬«      «       y)a  Initialize DenseTransition.

        Args:
            num_input_features: Number of input features.
            num_output_features: Number of output features.
            norm_layer: Normalization layer class.
            aa_layer: Anti-aliasing layer class.
        r%   ÚnormÚconvr   Fr*   NÚpoolr,   rf   )r+   r,   )r3   r4   r5   r6   r7   Ú	AvgPool2d)	r9   r   ru   r    rv   r&   r'   r:   r;   s	           €r<   r4   zDenseTransition.__init__±   s¨   ø€ ð" ¨Ñ/ˆÜ‰ÑÔØ�‰˜¡
Ð+=Ñ DÀÑ DÔEØ�‰˜¤§	¡	ØÐ 3ð!`ØABÈ1ÐSXñ!`Ø\^ñ!`ô 	aàÐØ�O‰O˜F¡HÐ-@Ñ$QÈÐ$QÈbÑ$QÕRà�O‰O˜F¤B§L¡L¸QÀqÔ$IÕJr=   )r[   r\   r]   r^   r   r_   r   r6   r`   r   r4   rb   rc   s   @r<   rt   rt   «   sl   ø„ ñð +9Ø26ØØñKà #ðKð "%ðKð ˜RŸY™Y™ð	Kð
 ˜t B§I¡I™Ñ/ðKð 
÷Kñ Kr=   rt   c                   óT  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddedeedf   dededed	ed
edededeee	j                        dede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ddfd„Zdej.                  dej.                  fd„Zd dej.                  dedej.                  fd„Zdej.                  dej.                  fd„Zˆ xZS )#r   aö  Densenet-BC model class.

    Based on `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`_

    Args:
        growth_rate: How many filters to add each layer (`k` in paper).
        block_config: How many layers in each pooling block.
        bn_size: Multiplicative factor for number of bottle neck layers
          (i.e. bn_size * k features in the bottleneck layer).
        drop_rate: Dropout rate before classifier layer.
        proj_drop_rate: Dropout rate after each dense layer.
        num_classes: Number of classification classes.
        memory_efficient: If True, uses checkpointing. Much more memory efficient,
          but slower. Default: *False*. See `"paper" <https://arxiv.org/pdf/1707.06990.pdf>`_.
    Nr   Úblock_config.Únum_classesÚin_chansÚglobal_poolr   Ú	stem_typeÚ	act_layerr    rv   r!   Úproj_drop_rateÚmemory_efficientÚaa_stem_onlyr#   c                 óX  •— ||dœ}|| _         || _        t        ‰!| �  «        t	        |	|¬«      }	d|v }|dz  }|
€t        j                  ddd¬«      }n3t        j                  t        j                  ddd¬«       |
d$|dd	œ|¤ŽgŽ }|rº|x}}d
|v rd|dz  z  }d|v r|nd|dz  z  }t        j                  t        dt        j                  ||dfddddœ|¤Žfd |	|fi |¤Žfdt        j                  ||dfddddœ|¤Žfd |	|fi |¤Žfdt        j                  ||dfddddœ|¤Žfd |	|fi |¤Žfd|fg«      «      | _
        nMt        j                  t        dt        j                  ||fdddddœ|¤Žfd |	|fi |¤Žfd|fg«      «      | _
        t        |dd|rdnd› �¬«      g| _        d}|}t        |«      D ]À  \  }}t        d$|||||	||dœ|¤Ž}d|dz   › �}| j                  j                  ||«       |||z  z   }|rdn|
}|t!        |«      dz
  k7  sŒ]| xj                  t        ||d|z   ¬«      gz  c_        |dz  }t#        d$||dz  |	|dœ|¤Ž}| j                  j                  d |dz   › �|«       |dz  }ŒÂ | j                  j                  d! |	|fi |¤Ž«       | xj                  t        ||d"¬«      gz  c_        |x| _        | _        t)        | j$                  | j                   fd#|i|¤Ž\  }}|| _        t        j,                  |«      | _        || _        | j3                  «       D ]ú  } t5        | t
        j                  «      r*t
        j6                  j9                  | j:                  «       ŒGt5        | t
        j<                  «      rUt
        j6                  j?                  | j:                  d«       t
        j6                  j?                  | j@                  d«       Œ¶t5        | t
        jB                  «      sŒÑt
        j6                  j?                  | j@                  d«       Œü y)%aj  Initialize DenseNet.

        Args:
            growth_rate: How many filters to add each layer (k in paper).
            block_config: How many layers in each pooling block.
            num_classes: Number of classification classes.
            in_chans: Number of input channels.
            global_pool: Global pooling type.
            bn_size: Multiplicative factor for number of bottle neck layers.
            stem_type: Type of stem ('', 'deep', 'deep_tiered').
            act_layer: Activation layer.
            norm_layer: Normalization layer.
            aa_layer: Anti-aliasing layer.
            drop_rate: Dropout rate before classifier layer.
            proj_drop_rate: Dropout rate after each dense layer.
            memory_efficient: If True, uses checkpointing for memory efficiency.
            aa_stem_only: Apply anti-aliasing only to stem.
        r%   )r‚   Údeeprf   Nr0   r   )r+   r,   r2   )Úchannelsr,   Útieredé   Únarrowé   Úconv0F)r,   r2   r-   Únorm0r)   r(   r/   r.   Úpool0é   r1   zfeatures.normr   )Únum_chsÚ	reductionÚmodule)rg   r   r   r   r    r!   r"   Ú
denseblockz	features.)r   ru   r    rv   Ú
transitionÚnorm5zfeatures.norm5Ú	pool_type© )"r~   r   r3   r4   r   r6   Ú	MaxPool2dÚ
Sequentialr   r7   rp   ÚdictÚfeature_infoÚ	enumeratere   r5   Úlenrt   Únum_featuresÚhead_hidden_sizer   r€   ÚDropoutÚ	head_dropÚ
classifierÚmodulesrQ   ÚinitÚkaiming_normal_ÚweightÚBatchNorm2dÚ	constant_r-   ÚLinear)"r9   r   r}   r~   r   r€   r   r�   r‚   r    rv   r!   rƒ   r„   r…   r&   r'   r:   Ú	deep_stemÚnum_init_featuresÚ	stem_poolÚ
stem_chs_1Ú
stem_chs_2Úcurrent_striderŸ   rj   rg   ÚblockÚmodule_nameÚtransition_aa_layerÚtransr£   Úmr;   s"                                    €r<   r4   zDenseNet.__init__Þ   s¦  ø€ ðJ ¨Ñ/ˆØ&ˆÔØ ˆŒÜ‰ÑÔÜ'¨
¸iÔHˆ
ð ˜iÐ'ˆ	Ø'¨!™OÐØÐÜŸ™°¸1ÀaÔH‰IäŸ™Ü—‘¨°1¸aÔ@ÙÐDÐ"3¸AÑDÀÑDð(Fð GˆIñ Ø&1Ð1ˆJ˜Ø˜9Ñ$Ø +°Ñ"2Ñ3�
Ø2:¸iÑ2GÑ.ÈQÐR]ÐabÑRbÑMc�
ÜŸM™M¬+Øœ"Ÿ)™) H¨j¸!ÐcÀAÈqÐW\ÑcÐ`bÑcÐdØ™* ZÑ6°2Ñ6Ð7Øœ"Ÿ)™) J°
¸AÐeÀaÐQRÐY^ÑeÐbdÑeÐfØ™* ZÑ6°2Ñ6Ð7Øœ"Ÿ)™) JÐ0AÀ1ÐlÈQÐXYÐ`eÑlÐikÑlÐmØ™*Ð%6Ñ=¸"Ñ=Ð>Ø˜)Ð$ð7ó +ó ˆD�Mô ŸM™M¬+Øœ"Ÿ)™) HÐ.?ÐvÈQÐWXÐbcÐjoÑvÐsuÑvÐwØ™*Ð%6Ñ=¸"Ñ=Ð>Ø˜)Ð$ð7ó +ó ˆDŒMô Ð*°aÀ-ÑU^ÑPQÐdeÐOfÐ@gÔhðjˆÔàˆð )ˆÜ& |Ó4ò 	1‰MˆAˆzÜð 	Ø%Ø#/ØØ'Ø%Ø(Ø#3ñ	ð ñ	ˆEð '¨¨A© iÐ0ˆKØ�M‰M×$Ñ$ [°%Ô8Ø'¨*°{Ñ*BÑBˆLÙ*6¡$¸HÐØ”C˜Ó%¨Ñ)Ó)Ø×!Ò!Ü ¸ÐP[Ð^iÑPiÔjð&lñ lÕ!à !Ñ#�Ü'ð Ø'3Ø(4¸Ñ(9Ø)Ø0ñ	ð
 ñ�ð —‘×(Ñ(¨:°a¸!±e°WÐ)=¸uÔEØ+¨qÑ0‘ð7	1ð< 	�‰× Ñ  ©*°\Ñ*HÀRÑ*HÔIà×Òœd¨<À>ÐZjÔkÐlÑlÕØ4@Ð@ˆÔ˜DÔ1ô #4Ø×ÑØ×Ññ#
ð "ð#
ð ñ	#
Ñˆ�Zð 'ˆÔÜŸ™ IÓ.ˆŒØ$ˆŒð —‘“ò 	-ˆAÜ˜!œRŸY™YÔ'Ü—‘×'Ñ'¨¯©Õ1Ü˜AœrŸ~™~Ô.Ü—‘×!Ñ! !§(¡(¨AÔ.Ü—‘×!Ñ! !§&¡&¨!Õ,Ü˜AœrŸy™yÕ)Ü—‘×!Ñ! !§&¡&¨!Õ,ñ	-r=   Úcoarsec                 ó8   — t        d|rdn	ddt        fg¬«      }|S )z"Group parameters for optimization.z<^features\.conv[012]|features\.norm[012]|features\.pool[012]z)^features\.(?:denseblock|transition)(\d+))z+^features\.denseblock(\d+)\.denselayer(\d+)Nz^features\.transition(\d+))ÚstemÚblocks)r›   r   )r9   r¶   Úmatchers      r<   Úgroup_matcherzDenseNet.group_matcherd  s0   € ô ØPÙCIÑ?ØFØ.Ô0@ÐAðPô
ˆð ˆr=   Úenablec                 ór   — | j                   j                  «       D ]  }t        |t        «      sŒ||_        Œ y)z)Enable or disable gradient checkpointing.N)rp   r¤   rQ   r   r"   )r9   r¼   Úbs      r<   Úset_grad_checkpointingzDenseNet.set_grad_checkpointingp  s2   € ð —‘×&Ñ&Ó(ò 	.ˆAÜ˜!œZÕ(Ø'-�Õ$ñ	.r=   c                 ó   — | j                   S )zGet the classifier head.)r£   )r9   s    r<   Úget_classifierzDenseNet.get_classifierw  s   € ð �‰Ðr=   c                 óp   — || _         t        | j                  | j                   |¬«      \  | _        | _        y)zŸReset the classifier head.

        Args:
            num_classes: Number of classes for new classifier.
            global_pool: Global pooling type.
        )r—   N)r~   r   rŸ   r€   r£   )r9   r~   r€   s      r<   Úreset_classifierzDenseNet.reset_classifier|  s4   € ð 'ˆÔÜ,=Ø×Ñ˜t×/Ñ/¸;ô-HÑ)ˆÔ˜$�/r=   rE   c                 ó$   — | j                  |«      S )z/Forward pass through feature extraction layers.)rp   ©r9   rE   s     r<   Úforward_featureszDenseNet.forward_features‡  s   € à�}‰}˜QÓÐr=   Ú
pre_logitsc                 óp   — | j                  |«      }| j                  |«      }|r|S | j                  |«      S )zÊForward pass through classifier head.

        Args:
            x: Feature tensor.
            pre_logits: Return features before final classifier.

        Returns:
            Output tensor.
        )r€   r¢   r£   )r9   rE   rÇ   s      r<   Úforward_headzDenseNet.forward_head‹  s8   € ð ×Ñ˜QÓˆØ�N‰N˜1ÓˆÙˆqÐ6 D§O¡O°AÓ$6Ð6r=   c                 óJ   — | j                  |«      }| j                  |«      }|S )zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output logits.
        )rÆ   rÉ   rÅ   s     r<   rZ   zDenseNet.forward™  s)   € ð ×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr=   )é    ©rŒ   é   é   é   éè  r0   ÚavgrŠ   Ú ÚreluÚbatchnorm2dNr   r   FTNN©F)T)rÑ   )r[   r\   r]   r^   r_   r   Ústrr   r   r6   r`   r8   ra   r4   r@   rS   Úignorer   r   r»   r¿   rÁ   rÃ   rR   rÆ   rÉ   rZ   rb   rc   s   @r<   r   r   Í   sø  ø„ ñð$  "Ø,;Ø#ØØ$ØØØ#Ø+Ø26Ø!Ø$&Ø%*Ø!%ØØñ#D-àðD-ð    S ™/ðD-ð ð	D-ð
 ðD-ð ðD-ð ðD-ð ðD-ð ðD-ð ðD-ð ˜t B§I¡I™Ñ/ðD-ð ðD-ð "ðD-ð #ðD-ð ðD-ð$ 
õ%D-ðL ‡Y�Y×Ññ	 Dð 	°T¸#¸s¸(±^ò 	ó ð	ð ‡Y�Y×Ññ.¨Tð .¸Tò .ó ð.ð ‡Y�Y×Ñð §	¡	ò ó ðñ	H¨Cð 	H¸cð 	HÈdó 	Hð  %§,¡,ð  °5·<±<ó  ñ7˜eŸl™lð 7¸ð 7ÈÏÉó 7ð˜Ÿ™ð ¨%¯,©,÷ r=   Ú
state_dictr#   c                 óð   — t        j                  d«      }t        | j                  «       «      D ]D  }|j	                  |«      }|sŒ|j                  d«      |j                  d«      z   }| |   | |<   | |= ŒF | S )z¾Filter torchvision pretrained state dict for compatibility.

    Args:
        state_dict: State dictionary from torchvision checkpoint.

    Returns:
        Filtered state dictionary.
    z]^(.*denselayer\d+\.(?:norm|relu|conv))\.((?:[12])\.(?:weight|bias|running_mean|running_var))$r   rf   )ÚreÚcompileÚlistÚkeysÚmatchÚgroup)rØ   ÚpatternÚkeyÚresÚnew_keys        r<   Ú_filter_torchvision_pretrainedrä   §  s{   € ô �j‰jØhój€Gô �J—O‘OÓ%Ó&ò  ˆØ�m‰m˜CÓ ˆÚØ—i‘i “l S§Y¡Y¨q£\Ñ1ˆGØ",¨S¡/ˆJ�wÑØ˜3‘ð ð Ðr=   Úvariantr   r}   .Ú
pretrainedc                 ó\   — ||d<   ||d<   t        t        | |ft        d¬«      t        dœ|¤ŽS )a.  Create a DenseNet model.

    Args:
        variant: Model variant name.
        growth_rate: Growth rate parameter.
        block_config: Block configuration.
        pretrained: Load pretrained weights.
        **kwargs: Additional model arguments.

    Returns:
        DenseNet model instance.
    r   r}   T)Úflatten_sequential)Úfeature_cfgÚpretrained_filter_fn)r   r   r›   rä   )rå   r   r}   ræ   Úkwargss        r<   Ú_create_densenetrì   ¼  sJ   € ð& (€Fˆ=ÑØ)€Fˆ>ÑÜÜØØðô ¨DÔ1Ü;ñð ñð r=   Úurlc                 ó2   — | dddddt         t        dddd	œ|¥S )
z1Create default configuration for DenseNet models.rÐ   )r0   éà   rï   )r�   r�   g      ì?Úbicubiczfeatures.conv0r£   z
apache-2.0)rí   r~   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdÚ
first_convr£   Úlicenser   )rí   rë   s     r<   Ú_cfgrù   Û  s4   € ð  4°}ÐSYØ¨IÜ%Ô.BØ&°lÈ|ñ	ð
 ðð r=   ztimm/)r0   é   rú   gffffffî?)Ú	hf_hub_idÚtest_input_sizeÚtest_crop_pct)rû   )zdensenet121.ra_in1kzdensenetblur121d.ra_in1kzdensenet264d.untrainedúdensenet121.tv_in1kzdensenet169.tv_in1kzdensenet201.tv_in1kzdensenet161.tv_in1kc           	      óN   — t        dd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )ztDensenet-121 model from
    `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`
    rË   rÌ   ©r   r}   ræ   )Údensenet121©r›   rì   ©ræ   rë   Ú
model_argsÚmodels       r<   r  r  õ  ó2   € ô
  "°?ÔC€JÜÑ`°zÐ`ÄTÈ*ÑE_ÐX^ÑE_Ñ`€EØ€Lr=   c           	      óZ   — t        dddt        ¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )zŒDensenet-121 w/ blur-pooling & 3-layer 3x3 stem
    `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`
    rË   rÌ   r‡   )r   r}   r�   rv   ræ   )Údensenetblur121d)r›   r   rì   r  s       r<   r  r  ÿ  s7   € ô
  "°?ÈfÔ_iÔj€JÜÑe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lr=   c           	      óN   — t        dd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )ztDensenet-169 model from
    `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`
    rË   )rŒ   rÍ   rË   rË   r   ræ   )Údensenet169r  r  s       r<   r
  r
  	  r  r=   c           	      óN   — t        dd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )ztDensenet-201 model from
    `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`
    rË   )rŒ   rÍ   é0   rË   r   ræ   )Údensenet201r  r  s       r<   r  r    r  r=   c           	      óN   — t        dd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )ztDensenet-161 model from
    `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`
    r  )rŒ   rÍ   é$   rÎ   r   ræ   )Údensenet161r  r  s       r<   r  r    r  r=   c           	      óP   — t        ddd¬«      }t        dd| it        |fi |¤Ž¤Ž}|S )ztDensenet-264 model from
    `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`
    r  )rŒ   rÍ   é@   r  r‡   )r   r}   r�   ræ   )Údensenet264dr  r  s       r<   r  r  '  s4   € ô
  "°?ÈfÔU€JÜÑa¸
ÐaÄdÈ:ÑF`ÐY_ÑF`Ña€EØ€Lr=   Útv_densenet121rþ   )rÒ   rÕ   )<r^   rÚ   Úcollectionsr   Útypingr   r   r   r   r   r	   r@   Útorch.nnr6   Útorch.nn.functionalÚ
functionalrV   Útorch.jit.annotationsr
   Ú	timm.datar   r   Útimm.layersr   r   r   r   Ú_builderr   Ú_manipulater   r   Ú	_registryr   r   r   Ú__all__r`   r   Ú
ModuleDictre   rš   rt   r   r›   rÖ   rR   rä   r_   ra   rì   rù   Údefault_cfgsr  r  r
  r  r  r  r[   r˜   r=   r<   ú<module>r#     s  ðñó 
Ý #ß :× :ã Ý ß Ð Ý &ç Aß YÓ YÝ *ß 5ß YÑ Yàˆ,€ôU�—‘ô Uôp9&�—‘ô 9&ôxK�b—m‘mô KôDWˆr�y‰yô Wðt¨tð ¸¸SÀ%Ç,Á,Ð=NÑ8Oó ð*Øðàðð ˜C ˜H‘oðð ð	ð óñ>ˆcð  T¨#¨s¨(¡^ó ñ %ÙØØ%°Tô;ñ !%ØØ%°Tô!;ñ #›fÙ¨'Ô2Ù¨'Ô2Ù¨'Ô2Ù¨'Ô2ñ&ó €ð ñ¨xò ó ðð ñ°Hò ó ðð ñ¨xò ó ðð ñ¨xò ó ðð ñ¨xò ó ðð ñ°ò ó ðñ ˜HØÐ+ð'õ r=   