
    ёi'                       S SK Jr  S SKJrJr  S SKJrJr  S SKrS SK	J
s  Jr  S SKJ
r
  S SKJr  S SKJrJrJrJr  S SKJr  \(       a  S S	KJr  S S
KJr   " S S\5      r/ rSSS.r " S S\
R8                  5      r " S S\
R8                  5      r " S S\
R8                  5      r          SS jr  S     SS jjr! S     SS jjr"g)    )annotations)TYPE_CHECKING	TypedDict)NotRequiredUnpackN)nn)	ParamAttr)AdaptiveAvgPool2DConv2DDropout	MaxPool2D)get_weights_path_from_url)Tensor)Size2c                  *    \ rS rSr% S\S'   S\S'   Srg)_SqueezeNetOptions#   zNotRequired[int]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/squeezenet.pyr   r   #   s    %%$$r   r   )z[https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SqueezeNet1_0_pretrained.pdparams 30b95af60a2178f03cf9b66cd77e1db1)z[https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SqueezeNet1_1_pretrained.pdparams a11250d3a1f91d7131fd095ebbf09eee)squeezenet1_0squeezenet1_1c                  N   ^  \ rS rSr S         SU 4S jjjrSS jrSrU =r$ )MakeFireConv6   c           	     h   > [         TU ]  5         [        UUUU[        5       [        5       S9U l        g )N)paddingweight_attr	bias_attr)super__init__r   r	   _conv)selfinput_channelsoutput_channelsfilter_sizer'   	__class__s        r   r+   MakeFireConv.__init__7   s2     	!k

r   c                T    U R                  U5      n[        R                  " U5      nU$ )N)r,   Frelu)r-   xs     r   forwardMakeFireConv.forwardH   s!    JJqMFF1Ir   )r,   )r   )
r.   intr/   r9   r0   r   r'   r   returnNone)r6   r   r:   r   r   r   r   r   r+   r7   r   __classcell__r1   s   @r   r$   r$   6   sL     

 
 	

 
 

 
" r   r$   c                  J   ^  \ rS rSr          SU 4S jjrSS jrSrU =r$ )MakeFireN   c                   > [         TU ]  5         [        XS5      U l        [        X#S5      U l        [        X$SSS9U l        g )N      )r'   )r*   r+   r$   r,   _conv_path1_conv_path2)r-   r.   squeeze_channelsexpand1x1_channelsexpand3x3_channelsr1   s        r   r+   MakeFire.__init__O   sB     	!.AF
'(8aP'!Q
r   c                    U R                  U5      nU R                  U5      nU R                  U5      n[        R                  " X4/SS9$ )NrC   axis)r,   rE   rF   paddleconcat)r-   inputsr6   x1x2s        r   r7   MakeFire.forward]   sC    JJva a }}bXA..r   )r,   rE   rF   )
r.   r9   rG   r9   rH   r9   rI   r9   r:   r;   rP   r   r:   r   r<   r>   s   @r   r@   r@   N   sB    

 
  	

  
 

/ /r   r@   c                  n   ^  \ rS rSr% SrS\S'   S\S'   S\S'    S       SU 4S	 jjjrSS
 jrSrU =r	$ )
SqueezeNetd   a  SqueezeNet model from
`"SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size"
<https://arxiv.org/pdf/1602.07360.pdf>`_.

Args:
    version (str): Version of SqueezeNet, which can be "1.0" or "1.1".
    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 SqueezeNet model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import SqueezeNet

        >>> # build v1.0 model
        >>> model = SqueezeNet(version='1.0')

        >>> # build v1.1 model
        >>> # model = SqueezeNet(version='1.1')

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

        >>> print(out.shape)
        paddle.Size([1, 1000])
strversionr9   r   boolr   c           
     D  > [         TU ]  5         Xl        X l        X0l        SS/nX;   d   SU SU 35       eU R                  S:X  a  [        SSSS[        5       [        5       S	9U l        [        SSS
S9U l	        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        O[        SSSSS[        5       [        5       S9U l        [        SSS
S9U l	        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        [        SSSS5      U l        ['        SSS9U l        [        SUS[        5       [        5       S9U l        [-        S5      U l        g )N1.01.1zsupported versions are z but input version is rD   `         )strider(   r)   r   )kernel_sizera   r'      @             0      i  i   rC   )ra   r'   r(   r)   g      ?downscale_in_infer)pmode)r(   r)   )r*   r+   rY   r   r   r   r	   r,   r   _poolr@   _conv1_conv2_conv3_conv4_conv5_conv6_conv7_conv8r   _drop_conv9r
   	_avg_pool)r-   rY   r   r   supported_versionsr1   s        r   r+   SqueezeNet.__init__   s"    	&"#U^, 	
%&8%99OPWyY	
, <<5 %K#+DJ #qAFDJ"2r2r2DK"3B3DK"3C5DK"3C5DK"3C5DK"3C5DK"3C5DK"3C5DK%K#+DJ #qAFDJ"2r2r2DK"3B3DK"3C5DK"3C5DK"3C5DK"3C5DK"3C5DK"3C5DKs)=>
aY[IK
 +1-r   c                B   U R                  U5      n[        R                  " U5      nU R                  U5      nU R                  S:X  a  U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nOU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  S:  a"  U R                  U5      nU R                  U5      nU R                   (       a>  [        R                  " U5      nU R#                  U5      n[$        R&                  " USS/S9nU$ )Nr\   r   r`   rD   rL   )r,   r4   r5   rm   rY   rn   ro   rp   rq   rr   rs   rt   ru   r   rv   rw   r   rx   rN   squeeze)r-   rP   r6   s      r   r7   SqueezeNet.forward   s   JJvFF1IJJqM<<5 AAAAAA

1AAAAAAAAA

1AAAAAAA

1AAAAA

1AAAAAAAAAa

1AAA>>q	Aq!Aq1v.Ar   )rx   r,   rn   ro   rp   rq   rr   rs   rt   ru   rw   rv   rm   r   rY   r   )i  T)rY   rX   r   r9   r   rZ   r:   r;   rT   )
r   r   r   r   __doc__r   r+   r7   r   r=   r>   s   @r   rV   rV   d   sW    @ LO HL7.7.),7.@D7.	7. 7.r" "r   rV   c                    [        U4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$ )NzJ model do not have a pretrained model now, you should set pretrained=Falser   rC   )rV   
model_urlsr   rN   loadset_dict)archrY   
pretrainedkwargsmodelweight_pathparams          r   _squeezenetr      s|     w)&)Ez! 	
f^_	
! 0tQD!1!!4
 K(uLr   c                    [        SSU 40 UD6$ )a  SqueezeNet v1.0 model from
`"SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size"
<https://arxiv.org/pdf/1602.07360.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:`SqueezeNet <api_paddle_vision_models_SqueezeNet>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of SqueezeNet v1.0 model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import squeezenet1_0

        >>> # build model
        >>> model = squeezenet1_0()

        >>> # build model and load imagenet pretrained weight
        >>> # model = squeezenet1_0(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!          B zDVDDr   c                    [        SSU 40 UD6$ )a  SqueezeNet v1.1 model from
`"SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size"
<https://arxiv.org/pdf/1602.07360.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:`SqueezeNet <api_paddle_vision_models_SqueezeNet>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of SqueezeNet v1.1 model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import squeezenet1_1

        >>> # build model
        >>> model = squeezenet1_1()

        >>> # build model and load imagenet pretrained weight
        >>> # model = squeezenet1_1(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   rX   rY   rX   r   rZ   r   Unpack[_SqueezeNetOptions]r:   rV   )F)r   rZ   r   r   r:   rV   )#
__future__r   typingr   r   typing_extensionsr   r   rN   paddle.nn.functionalr   
functionalr4   paddle.base.param_attrr	   	paddle.nnr
   r   r   r   paddle.utils.downloadr   r   paddle._typingr   r   __all__r   Layerr$   r@   rV   r   r!   r"   r   r   r   <module>r      s   #
 2       , C C ;$%Y %
 	
288 0/rxx /,@ @F
  )	
 * !E!E(B!E!EJ !E!E(B!E!Er   