Ë
    –\;j¶%  ã                   óü   — d dl Z d dlmc mZ d dl mZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZ g ZdddœZ G d	„ d
ej                   «      Z G d„ dej                   «      Z G d„ dej                   «      Zd„ Zdd„Zdd„Zy)é    N)Únn)Ú	ParamAttr)ÚAdaptiveAvgPool2DÚConv2DÚDropoutÚ	MaxPool2D)Úget_weights_path_from_url)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                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚMakeFireConvc           	      ón   •— t         ‰| �  «        t        ||||t        «       t        «       ¬«      | _        y )N)ÚpaddingÚweight_attrÚ	bias_attr)ÚsuperÚ__init__r   r   Ú_conv)ÚselfÚinput_channelsÚoutput_channelsÚfilter_sizer   Ú	__class__s        €úhG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/vision/models/squeezenet.pyr   zMakeFireConv.__init__%   s0   ø€ Ü‰ÑÔÜØØØØÜ!›Ü“kô
ˆ�
ó    c                 óR   — | j                  |«      }t        j                  |«      }|S )N)r   ÚFÚrelu)r   Úxs     r   ÚforwardzMakeFireConv.forward0   s!   € Ø�J‰J�q‹MˆÜ�F‰F�1‹IˆØˆr   )r   ©Ú__name__Ú
__module__Ú__qualname__r   r"   Ú__classcell__©r   s   @r   r   r   $   s   ø„ õ	
ör   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚMakeFirec                 ó’   •— t         ‰| �  «        t        ||d«      | _        t        ||d«      | _        t        ||dd¬«      | _        y )Né   é   )r   )r   r   r   r   Ú_conv_path1Ú_conv_path2)r   r   Úsqueeze_channelsÚexpand1x1_channelsÚexpand3x3_channelsr   s        €r   r   zMakeFire.__init__7   sK   ø€ ô 	‰ÑÔÜ! .Ð2BÀAÓFˆŒ
Ü'Ð(8Ð:LÈaÓPˆÔÜ'ØÐ0°!¸Qô
ˆÕr   c                 óš   — | j                  |«      }| j                  |«      }| j                  |«      }t        j                  ||gd¬«      S )Nr,   ©Úaxis)r   r.   r/   ÚpaddleÚconcat)r   Úinputsr!   Úx1Úx2s        r   r"   zMakeFire.forwardE   sE   € Ø�J‰J�vÓˆØ×Ñ˜aÓ ˆØ×Ñ˜aÓ ˆÜ�}‰}˜b "˜X¨AÔ.Ð.r   r#   r(   s   @r   r*   r*   6   s   ø„ ô
ö/r   r*   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )Ú
SqueezeNeta  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:: python

            >>> 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)
            [1, 1000]
    c           
      ój  •— t         ‰| �  «        || _        || _        || _        ddg}||v sJ d|› d|› �«       ‚| j                  dk(  rÒt        ddddt        «       t        «       ¬	«      | _        t        ddd
¬«      | _	        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        nÒt        dddddt        «       t        «       ¬«      | _        t        ddd
¬«      | _	        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t        dddd«      | _        t'        dd¬«      | _        t        d|dt        «       t        «       ¬«      | _        t-        d«      | _        y )Nú1.0ú1.1zsupported versions are z but input version is r-   é`   é   é   )Ústrider   r   r   )Úkernel_sizerC   r   é   é@   é€   é    é   é0   éÀ   i€  i   r,   )rC   r   r   r   g      à?Údownscale_in_infer)ÚpÚmode)r   r   )r   r   ÚversionÚnum_classesÚ	with_poolr   r   r   r   Ú_poolr*   Ú_conv1Ú_conv2Ú_conv3Ú_conv4Ú_conv5Ú_conv6Ú_conv7Ú_conv8r   Ú_dropÚ_conv9r   Ú	_avg_pool)r   rO   rP   rQ   Úsupported_versionsr   s        €r   r   zSqueezeNet.__init__m   s*  ø€ Ü‰ÑÔØˆŒØ&ˆÔØ"ˆŒà# U˜^ÐàÐ)Ñ)ð	Yà$Ð%7Ð$8Ð8NÈwÈiÐXó	YØ)ð �<‰<˜5Ò ÜØØØØÜ%›KÜ#›+ôˆDŒJô #¨q¸ÀAÔFˆDŒJÜ" 2 r¨2¨rÓ2ˆDŒKÜ" 3¨¨B°Ó3ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆD�KäØØØØØÜ%›KÜ#›+ôˆDŒJô #¨q¸ÀAÔFˆDŒJÜ" 2 r¨2¨rÓ2ˆDŒKÜ" 3¨¨B°Ó3ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKÜ" 3¨¨C°Ó5ˆDŒKä˜sÐ)=Ô>ˆŒ
ÜØ�˜a¬Y«[ÄIÃKô
ˆŒô +¨1Ó-ˆ�r   c                 ó4  — | j                  |«      }t        j                  |«      }| j                  |«      }| j                  dk(  r«| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }nª| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  dkD  r"| j                  |«      }| j                  |«      }| j                   r?t        j                  |«      }| j#                  |«      }t%        j&                  |ddg¬«      }|S )Nr>   r   rB   r-   r4   )r   r   r    rR   rO   rS   rT   rU   rV   rW   rX   rY   rZ   rP   r[   r\   rQ   r]   r6   Úsqueeze)r   r8   r!   s      r   r"   zSqueezeNet.forward¤   s�  € Ø�J‰J�vÓˆÜ�F‰F�1‹IˆØ�J‰J�q‹MˆØ�<‰<˜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¨¨1 vÔ.ˆAàˆr   )iè  T)r$   r%   r&   Ú__doc__r   r"   r'   r(   s   @r   r<   r<   L   s   ø„ ñõ@5.ön"r   r<   c                 óÒ   — t        |fi |¤Ž}|rX| t        v s
J | › d�«       ‚t        t        |    d   t        |    d   «      }t        j                  |«      }|j                  |«       |S )NzJ model do not have a pretrained model now, you should set pretrained=Falser   r,   )r<   Ú
model_urlsr	   r6   ÚloadÚset_dict)ÚarchrO   Ú
pretrainedÚkwargsÚmodelÚweight_pathÚparams          r   Ú_squeezenetrl   É   sz   € Ü�wÑ) &Ñ)€EÙà”JÑð	_àˆVÐ]Ð^ó	_Øä/Ü�tÑ˜QÑ¤¨DÑ!1°!Ñ!4ó
ˆô —‘˜KÓ(ˆØ�‰�uÔà€Lr   c                 ó   — t        dd| fi |¤ŽS )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:: python

            >>> 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)
            [1, 1000]
    r   r>   ©rl   ©rg   rh   s     r   r   r   Ø   ó   € ô> �¨¨zÑD¸VÑDÐDr   c                 ó   — t        dd| fi |¤ŽS )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:: python

            >>> 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)
            [1, 1000]
    r   r?   rn   ro   s     r   r   r   ú   rp   r   )F)r6   Úpaddle.nn.functionalr   Ú
functionalr   Úpaddle.base.param_attrr   Ú	paddle.nnr   r   r   r   Úpaddle.utils.downloadr	   Ú__all__rc   ÚLayerr   r*   r<   rl   r   r   © r   r   Ú<module>rz      sz   ðó ß  Ð  Ý Ý ,ß CÓ CÝ ;à
€ððñ	€
ô�2—8‘8ô ô$/ˆr�x‰xô /ô,z�—‘ô zòzóEôDEr   