
    ёiD                       % S SK Jr  S SK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
  S SKJrJrJrJrJrJrJr  S SKJr  S S	KJr  \(       a*  S S
KJrJr  S SKJr  S SKJr  S SKJr  \S   r " S S\5      r/ rSSSSSS.r S\!S'    " S S\RD                  5      r# " S S\RD                  5      r$ " S S\RD                  5      r% " S S\RD                  5      r& " S  S!\RD                  5      r' " S" S#\RD                  5      r(          S*S$ jr) S+     S,S% jjr* S+     S,S& jjr+ S+     S,S' jjr, S+     S,S( jjr- S+     S,S) jjr.g)-    )annotationsN)TYPE_CHECKING)Unpack)nn)	ParamAttr)AdaptiveAvgPool2D	AvgPool2D	BatchNormConv2DDropoutLinear	MaxPool2D)Uniform)get_weights_path_from_url)Literal	TypedDict)NotRequired)Tensor)Size2)densenet121densenet161densenet169densenet201densenet264c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rg
)_DenseNetOptions4   zNotRequired[int]bn_sizezNotRequired[float]dropoutnum_classeszNotRequired[bool]	with_pool N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r"       ]/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/vision/models/densenet.pyr   r   4   s    !!##%%$$r)   r   )zYhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet121_pretrained.pdparams db1b239ed80a905290fd8b01d3af08e4)zYhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet161_pretrained.pdparams 62158869cb315098bd25ddbfd308a853)zYhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet169_pretrained.pdparams 82cc7c635c3f19098c748850efb2d796)zYhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet201_pretrained.pdparams 16ca29565a7712329cf9e36e02caaf58)zYhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet264_pretrained.pdparams 3270ce516b85370bba88cfdd9f60bff4zdict[str, tuple[str, str]]
model_urlsc                  `   ^  \ rS rSr    S               SU 4S jjjrSS jrSrU =r$ )BNACConvLayerU   c                x   > [         TU ]  5         [        XS9U l        [	        UUUUUU[        5       SS9U l        g )NactFin_channelsout_channelskernel_sizestridepaddinggroupsweight_attr	bias_attr)super__init__r
   _batch_normr   r   _conv	selfnum_channelsnum_filtersfilter_sizer;   padr=   r6   	__class__s	           r*   rA   BNACConvLayer.__init__V   sC     	$\;$$#!	

r)   c                J    U R                  U5      nU R                  U5      nU$ NrB   rC   rE   inputys      r*   forwardBNACConvLayer.forwardn   s$    U#JJqMr)   rN      r   rU   relurF   intrG   rX   rH   r   r;   r   rI   r   r=   rX   r6   strreturnNonerP   r   rZ   r   r#   r$   r%   r&   rA   rR   r(   __classcell__rJ   s   @r*   r2   r2   U   ss     

 
 	

 
 
 
 
 

 
0 r)   r2   c                  V   ^  \ rS rSr% S\S'             SU 4S jjrSS jrSrU =r$ )	
DenseLayert   floatr   c                   > [         TU ]  5         X@l        [        UX2-  SSSS9U l        [        X2-  USSSS9U l        U(       a  [        USS9U l        g g )NrU   r   rF   rG   rH   rI   r;      downscale_in_infer)pmode)r@   rA   r   r2   bn_ac_func1bn_ac_func2r   dropout_func)rE   rF   growth_rater   r   rJ   s        r*   rA   DenseLayer.__init__w   so     	(%-
 ) .#
  ''8L MD r)   c                    U R                  U5      nU R                  U5      nU R                  (       a  U R                  U5      n[        R
                  " X/SS9nU$ )NrU   )axis)rj   rk   r   rl   paddleconcat)rE   rP   convs      r*   rR   DenseLayer.forward   sP    &%<<$$T*D}}e]3r)   )rj   rk   r   rl   )
rF   rX   rm   rX   r   rX   r   rc   rZ   r[   r\   	r#   r$   r%   r&   r'   rA   rR   r(   r^   r_   s   @r*   ra   ra   t   sE    NNN.1N<?NJON	N2 r)   ra   c                  b   ^  \ rS rSr% S\S'    S             SU 4S jjjrS	S jrSrU =r$ )

DenseBlock   rc   r   c                   > [         T	U ]  5         XPl        / U l        Un[	        U5       HD  nU R                  R                  U R                  U SUS-    3[        UUUUS95      5        Xt-   nMF     g )N_rU   )rF   rm   r   r   )r@   rA   r   dense_layer_funcrangeappendadd_sublayerra   )
rE   rF   
num_layersr   rm   r   namepre_channellayerrJ   s
            r*   rA   DenseBlock.__init__   s     	 "":&E!!((!!fAeai[)%0$/ ' '	
 &3K 'r)   c                @    UnU R                    H  nU" U5      nM     U$ rM   )r{   )rE   rP   rs   funcs       r*   rR   DenseBlock.forward   s%    ))D:D *r)   )r{   r   rM   )rF   rX   r   rX   r   rX   rm   rX   r   rc   r   z
str | NonerZ   r[   r\   ru   r_   s   @r*   rw   rw      se    N  44 4 	4
 4 4 4 
4 48 r)   rw   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )TransitionLayer   c                f   > [         TU ]  5         [        UUSSSS9U l        [	        SSSS9U l        g )NrU   r   re      r:   r;   r<   )r@   rA   r2   conv_ac_funcr	   
pool2d_avg)rE   rF   num_output_featuresrJ   s      r*   rA   TransitionLayer.__init__   s<    )%+
 $!QGr)   c                J    U R                  U5      nU R                  U5      nU$ rM   r   r   rO   s      r*   rR   TransitionLayer.forward   s%    e$OOAr)   r   )rF   rX   r   rX   rZ   r[   r\   r]   r_   s   @r*   r   r      s    H r)   r   c                  `   ^  \ rS rSr    S               SU 4S jjjrSS jrSrU =r$ )ConvBNLayer   c                x   > [         TU ]  5         [        UUUUUU[        5       SS9U l        [        X'S9U l        g )NFr7   r5   )r@   rA   r   r   rC   r
   rB   rD   s	           r*   rA   ConvBNLayer.__init__   sE     	$$#!	

 %[:r)   c                J    U R                  U5      nU R                  U5      nU$ rM   )rC   rB   rO   s      r*   rR   ConvBNLayer.forward   s%    JJuQr)   rN   rT   rW   r\   r]   r_   s   @r*   r   r      ss     ;; ; 	;
 ; ; ; ; 
; ;0 r)   r   c                  t   ^  \ rS rSr% SrS\S'   S\S'        S
           SU 4S jjjrSS jrS	rU =r	$ )DenseNet   a  DenseNet model from
`"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`_.

Args:
    layers (int, optional): Layers of DenseNet. Default: 121.
    bn_size (int, optional): Expansion of growth rate in the middle layer. Default: 4.
    dropout (float, optional): Dropout rate. Default: :math:`0.0`.
    num_classes (int, optional): Output dim of last fc layer. If num_classes <= 0, last fc layer
        will not be defined. Default: 1000.
    with_pool (bool, optional): Use pool before the last fc layer or not. Default: True.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of DenseNet model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import DenseNet

        >>> # Build model
        >>> densenet = DenseNet()

        >>> x = paddle.rand([1, 3, 224, 224])
        >>> out = densenet(x)

        >>> print(out.shape)
        paddle.Size([1, 1000])
rX   r    boolr!   c                  > [         TU ]  5         X@l        XPl        / SQnX;   d   SU SU 35       eSS/ SQ4SS/ S	Q4SS/ S
Q4SS/ SQ4SS/ SQ4S.nXq   u  pn
[	        SUSSSSS9U l        [        SSSS9U l        Xl        / U l	        / U l
        UnUn[        U
5       H  u  pU R                  R                  U R                  SUS-    3[        UUUU	US[        US-   5      -   S95      5        XU	-  -   nUnU[!        U
5      S-
  :w  d  Mn  U R                  R                  U R                  SUS-    S3[#        UUS-  S95      5        US-  nUS-  nM     [%        USS9U l        U R                  (       a  [)        S5      U l        U R                  S:  aH  S[,        R.                  " US-  5      -  n[1        UU[3        [5        U* U5      S9[3        5       S9U l        g g )N)y              zsupported layers are z but input layer is @       )            `   0   )r   r   $   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   rf      r   rV   )rF   rG   rH   r;   rI   r6   rU   r   db_conv_rs   )rF   r   r   rm   r   r   tr_conv_blk)rF   r   r5   r   g      ?)initializer)r>   r?   )r@   rA   r    r!   r   
conv1_funcr   
pool2d_maxblock_configdense_block_func_listtransition_func_list	enumerater}   r~   rw   rY   lenr   r
   
batch_normr   r   mathsqrtr   r   r   out)rE   layersr   r   r    r!   supported_layersdensenet_specnum_init_featuresrm   r   pre_num_channelsnum_featuresir   stdvrJ   s                   r*   rA   DenseNet.__init__  sE    	&"4) 	
#$4#55I&R	
) b/*b/*b/*b/*b/*
 8E7L4%)
 $!QG(%'"$&!,(&|4MA&&--!!q1ug&%5#- '$/ '#c!a%j0
 ({*BBL+C%))))00%%!!a%-')90<0A $01#4 +q0; 5> $Lf=>>/2DOa<##566D%'4%2FG#+	DH  r)   c                   U R                  U5      nU R                  U5      n[        U R                  5       HM  u  p4U R                  U   " U5      nU[        U R                  5      S-
  :w  d  M8  U R                  U   " U5      nMO     U R                  U5      nU R                  (       a  U R                  U5      nU R                  S:  a'  [        R                  " WSSS9nU R                  U5      nW$ )NrU   r   )
start_axis	stop_axis)r   r   r   r   r   r   r   r   r!   r   r    rq   flattenr   )rE   rP   rs   r   r   rQ   s         r*   rR   DenseNet.forwardf  s    u%t$&t'8'89MA--a06DC))*Q..003D9 :
 t$>>%AaqQ"=AAr)   )
r   r   r   r   r    r   r   r   r   r!   )r      g        i  T)r   rX   r   rX   r   rc   r    rX   r!   r   rZ   r[   r\   )
r#   r$   r%   r&   __doc__r'   rA   rR   r(   r^   r_   s   @r*   r   r      s}    < O PP P 	P
 P P 
P Pd r)   r   c                    [        SSU0UD6nU(       a[  U [        ;   d
   U  S35       e[        [        U    S   [        U    S   5      n[        R                  " U5      nUR                  U5        U$ )Nr   zJ model do not have a pretrained model now, you should set pretrained=Falser   rU   r"   )r   r0   r   rq   loadset_dict)archr   
pretrainedkwargsmodelweight_pathparams          r*   	_densenetr   {  s     -F-f-Ez! 	
f^_	
! 0tQD!1!!4
 K(uLr)   c                    [        SSU 40 UD6$ )a  DenseNet 121-layer model from
`"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`_.

Args:
    pretrained (bool, optional): Whether to load pre-trained weights. If True, returns a model pre-trained
        on ImageNet. Default: False.
    **kwargs (optional): Additional keyword arguments. For details, please refer to :ref:`DenseNet <api_paddle_vision_models_DenseNet>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of DenseNet 121-layer model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import densenet121

        >>> # Build model
        >>> model = densenet121()

        >>> # Build model and load imagenet pretrained weight
        >>> # model = densenet121(pretrained=True)

        >>> x = paddle.rand([1, 3, 224, 224])
        >>> out = model(x)

        >>> print(out.shape)
        paddle.Size([1, 1000])
r   r   r   r   r   s     r*   r   r         @ ]C>v>>r)   c                    [        SSU 40 UD6$ )a  DenseNet 161-layer model from
`"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`_.

Args:
    pretrained (bool, optional): Whether to load pre-trained weights. If True, returns a model pre-trained
        on ImageNet. Default: False.
    **kwargs (optional): Additional keyword arguments. For details, please refer to :ref:`DenseNet <api_paddle_vision_models_DenseNet>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of DenseNet 161-layer model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import densenet161

        >>> # Build model
        >>> model = densenet161()

        >>> # Build model and load imagenet pretrained weight
        >>> # model = densenet161(pretrained=True)

        >>> x = paddle.rand([1, 3, 224, 224])
        >>> out = model(x)

        >>> print(out.shape)
        paddle.Size([1, 1000])
r   r   r   r   s     r*   r   r     r   r)   c                    [        SSU 40 UD6$ )a  DenseNet 169-layer model from
`"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`_.

Args:
    pretrained (bool, optional): Whether to load pre-trained weights. If True, returns a model pre-trained
        on ImageNet. Default: False.
    **kwargs (optional): Additional keyword arguments. For details, please refer to :ref:`DenseNet <api_paddle_vision_models_DenseNet>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of DenseNet 169-layer model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import densenet169

        >>> # Build model
        >>> model = densenet169()

        >>> # Build model and load imagenet pretrained weight
        >>> # model = densenet169(pretrained=True)

        >>> x = paddle.rand([1, 3, 224, 224])
        >>> out = model(x)

        >>> print(out.shape)
        paddle.Size([1, 1000])
r   r   r   r   s     r*   r   r     r   r)   c                    [        SSU 40 UD6$ )a  DenseNet 201-layer model from
`"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`_.

Args:
    pretrained (bool, optional): Whether to load pre-trained weights. If True, returns a model pre-trained
        on ImageNet. Default: False.
    **kwargs (optional): Additional keyword arguments. For details, please refer to :ref:`DenseNet <api_paddle_vision_models_DenseNet>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of DenseNet 201-layer model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import densenet201

        >>> # Build model
        >>> model = densenet201()

        >>> # Build model and load imagenet pretrained weight
        >>> # model = densenet201(pretrained=True)
        >>> x = paddle.rand([1, 3, 224, 224])
        >>> out = model(x)

        >>> print(out.shape)
        paddle.Size([1, 1000])
r   r   r   r   s     r*   r   r     s    > ]C>v>>r)   c                    [        SSU 40 UD6$ )a  DenseNet 264-layer model from
`"Densely Connected Convolutional Networks" <https://arxiv.org/pdf/1608.06993.pdf>`_.

Args:
    pretrained (bool, optional): Whether to load pre-trained weights. If True, returns a model pre-trained
        on ImageNet. Default: False.
    **kwargs (optional): Additional keyword arguments. For details, please refer to :ref:`DenseNet <api_paddle_vision_models_DenseNet>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of DenseNet 264-layer model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import densenet264

        >>> # Build model
        >>> model = densenet264()

        >>> # Build model and load imagenet pretrained weight
        >>> # model = densenet264(pretrained=True)

        >>> x = paddle.rand([1, 3, 224, 224])
        >>> out = model(x)

        >>> print(out.shape)
        paddle.Size([1, 1000])
r   r   r   r   s     r*   r   r     r   r)   )
r   _DenseNetArchr   rX   r   r   r   Unpack[_DenseNetOptions]rZ   r   )F)r   r   r   r   rZ   r   )/
__future__r   r   typingr   typing_extensionsr   rq   r   paddle.base.param_attrr   	paddle.nnr   r	   r
   r   r   r   r   paddle.nn.initializerr   paddle.utils.downloadr   r   r   r   r   paddle._typingr   r   r   __all__r0   r'   Layerr2   ra   rw   r   r   r   r   r   r   r   r   r   r"   r)   r*   <module>r      s   #    $   ,   * ;)-$	M%9 % #*
& 0BHH >" "J# #Lbhh ("(( >Frxx FR
  '	
 ,  ? ?(@ ? ?H  ? ?(@ ? ?H  ? ?(@ ? ?H ??(@??F  ? ?(@ ? ?r)   