
    Ng>                        d Z ddlZddlmZ ddlZddlmZ ddlmc 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 dd
lmZ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'd Z(d Z)d'dZ* e e*ddd           e*ddd           e*             e*d           e*d           e*d           e*d          d          Z+ed(de'fd            Z,ed(de'fd             Z-ed(de'fd!            Z.ed(de'fd"            Z/ed(de'fd#            Z0ed(de'fd$            Z1 ee2d%d&i           dS ))zPytorch 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)ListIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)BatchNormAct2dget_norm_act_layer
BlurPool2dcreate_classifier   )build_model_with_cfg)MATCH_PREV_GROUP)register_modelgenerate_default_cfgsregister_model_deprecationsDenseNetc                        e Zd Zeddf fd	Zd Zd Zej        j	        d             Z
ej        j        d             Zej        j        d             Zd	 Z xZS )

DenseLayer        Fc                    t          t          |                                            |                     d ||                    f |                     dt	          j        |||z  ddd                    f |                     d |||z                      f |                     dt	          j        ||z  |dddd	                    f t          |          | _        || _        d S )
Nnorm1conv1r   Fkernel_sizestridebiasnorm2conv2   r   r   paddingr   )	superr   __init__
add_modulennConv2dfloat	drop_rategrad_checkpointing)selfnum_input_featuresgrowth_ratebn_size
norm_layerr(   r)   	__class__s          P/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/densenet.pyr#   zDenseLayer.__init__   s    	j$((***,>!?!?@@AA+ 51QUZ"\ "\ "\ 	] 	] 	^ 	^Gk,A!B!BCCDDk!;AaQRY^"` "` "` 	a 	a 	b 	by))"4    c                     t          j        |d          }|                     |                     |                    }|S Nr   )torchcatr   r   )r*   xsconcated_featuresbottleneck_outputs       r0   bottleneck_fnzDenseLayer.bottleneck_fn+   s9    !Ib!,, JJtzz2C'D'DEE  r1   c                 $    |D ]}|j         r dS dS )NTF)requires_grad)r*   xtensors      r0   any_requires_gradzDenseLayer.any_requires_grad2   s-     	 	F# ttur1   c                 2      fd}t          j        |g|R  S )Nc                  .                         |           S N)r9   )r6   r*   s    r0   closurez6DenseLayer.call_checkpoint_bottleneck.<locals>.closure<   s    %%b)))r1   )cp
checkpoint)r*   r<   rB   s   `  r0   call_checkpoint_bottleneckz%DenseLayer.call_checkpoint_bottleneck9   s6    	* 	* 	* 	* 	* }W)q))))r1   c                     d S rA    r*   r<   s     r0   forwardzDenseLayer.forwardA   	     	r1   c                     d S rA   rG   rH   s     r0   rI   zDenseLayer.forwardF   rJ   r1   c                    t          |t          j                  r|g}n|}| j        rX|                     |          rCt          j                                        rt          d          |                     |          }n| 	                    |          }| 
                    |                     |                    }| j        dk    r!t          j        || j        | j                  }|S )Nz%Memory Efficient not supported in JITr   )ptraining)
isinstancer4   Tensorr)   r>   jitis_scripting	ExceptionrE   r9   r   r   r(   FdropoutrN   )r*   r<   prev_featuresr8   new_featuress        r0   rI   zDenseLayer.forwardM   s    a&& 	CMMM" 	Bt'='=m'L'L 	By%%'' I GHHH $ ? ? N N $ 2 2= A Azz$**->"?"?@@>A9\T^dm\\\Lr1   )__name__
__module____qualname__r   r#   r9   r>   r4   rQ   unusedrE   _overload_methodrI   __classcell__r/   s   @r0   r   r      s         &$5 5 5 5 5 5&! ! !   Y* * * Y    Y         r1   r   c                   0     e Zd ZdZeddf fd	Zd Z xZS )
DenseBlock   r   Fc           	          t          t          |                                            t          |          D ]9}t	          |||z  z   |||||          }	|                     d|dz   z  |	           :d S )N)r,   r-   r.   r(   r)   zdenselayer%dr   )r"   r`   r#   ranger   r$   )r*   
num_layersr+   r-   r,   r.   r(   r)   ilayerr/   s             r0   r#   zDenseBlock.__init__c   s     	j$((***z"" 		= 		=A"Q_4'%##5  E OONa!e4e<<<<		= 		=r1   c                     |g}|                                  D ]%\  }} ||          }|                    |           &t          j        |d          S r3   )itemsappendr4   r5   )r*   init_featuresfeaturesnamerf   rW   s         r0   rI   zDenseBlock.forwardy   sX    !?::<< 	* 	*KD% 5??LOOL))))y1%%%r1   )rX   rY   rZ   _versionr   r#   rI   r]   r^   s   @r0   r`   r`   `   s\        H &$= = = = = =,& & & & & & &r1   r`   c                   $     e Zd Zedf fd	Z xZS )DenseTransitionNc           
         t          t          |                                            |                     d ||                     |                     dt	          j        ||ddd                     |#|                     d ||d                     d S |                     dt	          j        dd	                     d S )
Nnormconvr   Fr   poolra   )r   )r   r   )r"   ro   r#   r$   r%   r&   	AvgPool2d)r*   r+   num_output_featuresr.   aa_layerr/   s        r0   r#   zDenseTransition.__init__   s     	ot$$--///

+= > >???	 31SX!Z !Z !Z 	[ 	[ 	[OOFHH-@$K$K$KLLLLLOOFBLQq$I$I$IJJJJJr1   )rX   rY   rZ   r   r#   r]   r^   s   @r0   ro   ro      sO        
 &K K K K K K K K K Kr1   ro   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   a/  Densenet-BC model class, based on
    `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`_

    Args:
        growth_rate (int) - how many filters to add each layer (`k` in paper)
        block_config (list of 4 ints) - how many layers in each pooling block
        bn_size (int) - multiplicative factor for number of bottle neck layers
          (i.e. bn_size * k features in the bottleneck layer)
        drop_rate (float) - dropout rate before classifier layer
        proj_drop_rate (float) - dropout rate after each dense layer
        num_classes (int) - number of classification classes
        memory_efficient (bool) - If True, uses checkpointing. Much more memory efficient,
          but slower. Default: *False*. See `"paper" <https://arxiv.org/pdf/1707.06990.pdf>`_
                      r   avg    relubatchnorm2dNr   FTc                 d   || _         t          t          |                                            t	          |	|          }	d|v }|dz  }|
t          j        ddd          }n0t          j        t          j        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ddd          fd |	|          fdt          j	        ||dddd          fd |	|          fdt          j	        ||dddd          fd |	|          fd|fg                    | _
        nPt          j        t          dt          j	        ||dddd          fd |	|          fd|fg                    | _
        t          |dd|rdnd           g| _        d	}|}t          |          D ]\  }}t          |||||	||          }d|dz    }| j
                            ||           |||z  z   }|rd n|
}|t!          |          dz
  k    re| xj        t          ||d|z             gz  c_        |dz  }t#          ||dz  |	|          }| j
                            d|dz    |           |dz  }| j
                            d |	|                     | xj        t          ||d           gz  c_        |x| _        | _        t)          | j        | j         |!          \  }}|| _        t          j        |          | _        || _        |                                 D ]}t5          |t
          j	                  r%t
          j                            |j                   At5          |t
          j                  rKt
          j                            |j        d           t
          j                            |j         d           t5          |t
          j!                  r%t
          j                            |j         d           d S )"N)	act_layerdeepra   r   r   )r   r   r!   )channelsr   tieredr   narrowrz   conv0F)r   r!   r   norm0r   r   r   r   pool0   r    zfeatures.normr   )num_chs	reductionmodule)rd   r+   r-   r,   r.   r(   r)   
denseblockz	features.)r+   ru   r.   rv   
transitionnorm5zfeatures.norm5	pool_type)"num_classesr"   r   r#   r	   r%   	MaxPool2d
Sequentialr   r&   rk   dictfeature_info	enumerater`   r$   lenro   num_featureshead_hidden_sizer   global_poolDropout	head_drop
classifiermodulesrO   initkaiming_normal_weightBatchNorm2d	constant_r   Linear)r*   r,   block_configr   in_chansr   r-   	stem_typer   r.   rv   r(   proj_drop_ratememory_efficientaa_stem_only	deep_stemnum_init_features	stem_pool
stem_chs_1
stem_chs_2current_strider   re   rd   blockmodule_nametransition_aa_layertransr   mr/   s                                 r0   r#   zDenseNet.__init__   s   " 'h&&((('
iHHH
 i'	'!O1aHHHII1a@@@"3A>>>(@ AI  	&11J9$$+"23
2:i2G2G..QR]abRbMc
M+")Hj!AqW\]]]^**Z001")J
AaQRY^___`**Z001")J0A1QXY`efffg**%6778)$7 + +  DMM M+")H.?QWXbcjopppq**%6778)$7 + +  DM *a@gU^PePQPQde@g@ghhhj )&|44 	1 	1MAz%#/'%(#3  E 1A00KM$$[%888'*{*BBL*6"D$$HC%%)))!!P[^iPijjj&l l!!!#''3(4(9)0	   (()=a!e)=)=uEEE+q0 	  **\*B*BCCCd<>Zjkkkll4@@D1 #4!#
 #
 #
Z
 'I..$  	- 	-A!RY'' -''1111Ar~.. -!!!(A...!!!&!,,,,Ary)) -!!!&!,,,	- 	-r1   c                 B    t          d|rdn
ddt          fg          }|S )Nz<^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   )r*   coarsematchers      r0   group_matcherzDenseNet.group_matcher  s@    PCI ??F.0@AP
 
 
 r1   c                 v    | j                                         D ]}t          |t                    r||_        d S rA   )rk   r   rO   r   r)   )r*   enablebs      r0   set_grad_checkpointingzDenseNet.set_grad_checkpointing  sD    &&(( 	. 	.A!Z(( .'-$	. 	.r1   returnc                     | j         S rA   )r   )r*   s    r0   get_classifierzDenseNet.get_classifier!  s
    r1   r   r   c                 f    || _         t          | j        | j         |          \  | _        | _        d S )Nr   )r   r   r   r   r   )r*   r   r   s      r0   reset_classifierzDenseNet.reset_classifier%  s<    &,=t/;-H -H -H)$///r1   c                 ,    |                      |          S rA   )rk   rH   s     r0   forward_featureszDenseNet.forward_features*  s    }}Qr1   
pre_logitsc                     |                      |          }|                     |          }|r|n|                     |          S rA   )r   r   r   )r*   r<   r   s      r0   forward_headzDenseNet.forward_head-  sA    QNN16qqDOOA$6$66r1   c                 Z    |                      |          }|                     |          }|S rA   )r   r   rH   s     r0   rI   zDenseNet.forward2  s-    !!!$$a  r1   )rx   ry   r~   r   r   r   r   r   r   Nr   r   FTF)T)r   )rX   rY   rZ   __doc__r#   r4   rQ   ignorer   r   r%   Moduler   intstrr   r   boolr   rI   r]   r^   s   @r0   r   r      sa        " ($"k- k- k- k- k- k-Z Y    Y. . . .
 Y	    H HC Hc H H H H
     7 7$ 7 7 7 7
      r1   c                    t          j        d          }t          |                                           D ]R}|                    |          }|r9|                    d          |                    d          z   }| |         | |<   | |= S| S )Nz]^(.*denselayer\d+\.(?:norm|relu|conv))\.((?:[12])\.(?:weight|bias|running_mean|running_var))$r   ra   )recompilelistkeysmatchgroup)
state_dictpatternkeyresnew_keys        r0   _filter_torchvision_pretrainedr   8  s    jhj jG JOO%%&&    mmC   	 iillSYYq\\1G",S/Jw3r1   c                 j    ||d<   ||d<   t          t          | |ft          d          t          d|S )Nr,   r   T)flatten_sequential)feature_cfgpretrained_filter_fn)r   r   r   r   )variantr,   r   
pretrainedkwargss        r0   _create_densenetr   E  sX    'F=)F> D111;    r1   r   c                 4    | dddddt           t          ddd
|S )	Nr~   )r      r   )r   r   g      ?bicubiczfeatures.conv0r   )
urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convr   r   )r   r   s     r0   _cfgr   R  s7    4}SYI%.B&l	  GM	 r1   ztimm/)r      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_in1kFr   c           	      Z    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>`
    rx   ry   r,   r   densenet121r   )r   r   r   r   r   
model_argsmodels       r0   r   r   j  D    
 "?CCCJ``z`T*E_E_X^E_E_``ELr1   c           	      h    t          dddt                    }t          dd| it          |fi |}|S )zDensenet-121 w/ blur-pooling & 3-layer 3x3 stem
    `"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`
    rx   ry   r   )r,   r   r   rv   densenetblur121dr   )r  )r   r
   r   r  s       r0   r  r  t  sI    
 "?f_ijjjJeeJe$zJdJd]cJdJdeeELr1   c           	      Z    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>`
    rx   )rz   r{   rx   rx   r   densenet169r   )r  r   r  s       r0   r  r  ~  r  r1   c           	      Z    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>`
    rx   )rz   r{   0   rx   r   densenet201r   )r  r   r  s       r0   r  r    r  r1   c           	      Z    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
  )rz   r{   $   r|   r   densenet161r   )r  r   r  s       r0   r  r    r  r1   c           	      \    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
  )rz   r{   @   r
  r   )r,   r   r   densenet264dr   )r  r   r  s       r0   r  r    sF    
 "?fUUUJaa
ad:F`F`Y_F`F`aaELr1   tv_densenet121r   )r   r   )3r   r   collectionsr   r4   torch.nnr%   torch.nn.functional
functionalrT   torch.utils.checkpointutilsrD   rC   torch.jit.annotationsr   	timm.datar   r   timm.layersr   r	   r
   r   _builderr   _manipulater   	_registryr   r   r   __all__r   r   
ModuleDictr`   r   ro   r   r   r   r   default_cfgsr   r  r  r  r  r  rX   rG   r1   r0   <module>r"     s    
			 # # # # # #                 # # # # # # # # # & & & & & & A A A A A A A A Y Y Y Y Y Y Y Y Y Y Y Y * * * * * * ) ) ) ) ) ) Y Y Y Y Y Y Y Y Y Y,F F F F F F F FR& & & & & & & &BK K K K Kbm K K K$b b b b bry b b bJ
 
 

 
 
    %$4%T; ; ; !%%T!; !; !; #dff4'2224'2224'2224'222& &    x      H      x      x      x            H+'     r1   