Ë
    –\;jC#  ã                   ó    — d dl Z d dl mZ d dlmZ ddlmZ g ZddiZ G d„ d	ej                  «      Z	 G d
„ dej                  «      Z
dd„Zdd„Zy)é    N)Únn)Úget_weights_path_from_urlé   )ÚConvNormActivationzmobilenetv1_1.0)zAhttps://paddle-hapi.bj.bcebos.com/models/mobilenetv1_1.0.pdparamsÚ 3033ab1975b1670bef51545feb65fc45c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚDepthwiseSeparablec                 óØ   •— t         ‰| �  «        t        |t        ||z  «      d|dt        ||z  «      ¬«      | _        t        t        ||z  «      t        ||z  «      ddd¬«      | _        y )Né   é   )Úkernel_sizeÚstrideÚpaddingÚgroupsr   )r   r   r   )ÚsuperÚ__init__r   ÚintÚ_depthwise_convÚ_pointwise_conv)ÚselfÚin_channelsÚout_channels1Úout_channels2Ú
num_groupsr   ÚscaleÚ	__class__s          €úiG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/vision/models/mobilenetv1.pyr   zDepthwiseSeparable.__init__    su   ø€ ô 	‰ÑÔä1ØÜ� Ñ%Ó&ØØØÜ�z EÑ)Ó*ô 
ˆÔô  2Ü� Ñ%Ó&Ü� Ñ%Ó&ØØØô 
ˆÕó    c                 óJ   — | j                  |«      }| j                  |«      }|S )N)r   r   )r   Úxs     r   ÚforwardzDepthwiseSeparable.forward<   s'   € Ø× Ñ  Ó#ˆØ× Ñ  Ó#ˆØˆr   )Ú__name__Ú
__module__Ú__qualname__r   r!   Ú__classcell__©r   s   @r   r	   r	      s   ø„ ô
ö8r   r	   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )ÚMobileNetV1aw  MobileNetV1 model from
    `"MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications" <https://arxiv.org/abs/1704.04861>`_.

    Args:
        scale (float, optional): Scale of channels in each layer. Default: 1.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 MobileNetV1 model.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> from paddle.vision.models import MobileNetV1

            >>> model = MobileNetV1()

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

            >>> print(out.shape)
            [1, 1000]
    c                 óŽ  •— t         ‰| �  «        || _        g | _        || _        || _        t        dt        d|z  «      ddd¬«      | _        | j                  t        t        d|z  «      dddd|¬«      d¬	«      }| j                  j                  |«       | j                  t        t        d|z  «      dd
dd|¬«      d¬	«      }| j                  j                  |«       | j                  t        t        d
|z  «      d
d
d
d|¬«      d¬	«      }| j                  j                  |«       | j                  t        t        d
|z  «      d
dd
d|¬«      d¬	«      }| j                  j                  |«       | j                  t        t        d|z  «      dddd|¬«      d¬	«      }| j                  j                  |«       | j                  t        t        d|z  «      dddd|¬«      d¬	«      }	| j                  j                  |	«       t        d«      D ]Z  }
| j                  t        t        d|z  «      dddd|¬«      dt        |
dz   «      z   ¬	«      }| j                  j                  |«       Œ\ | j                  t        t        d|z  «      dddd|¬«      d¬	«      }| j                  j                  |«       | j                  t        t        d|z  «      dddd|¬«      d¬	«      }| j                  j                  |«       |rt        j                  d«      | _        |dkD  r(t        j"                  t        d|z  «      |«      | _        y y )Nr   é    r   r   )r   Úout_channelsr   r   r   é@   )r   r   r   r   r   r   Úconv2_1)ÚsublayerÚnameé€   Úconv2_2Úconv3_1é   Úconv3_2Úconv4_1i   Úconv4_2é   Úconv5_i   Úconv5_6Úconv6r   )r   r   r   ÚdwslÚnum_classesÚ	with_poolr   r   Úconv1Úadd_sublayerr	   ÚappendÚrangeÚstrr   ÚAdaptiveAvgPool2DÚ
pool2d_avgÚLinearÚfc)r   r   r<   r=   Údws21Údws22Údws31Údws32Údws41Údws42ÚiÚtmpÚdws56Údws6r   s                 €r   r   zMobileNetV1.__init__^   s€  ø€ Ü‰ÑÔØˆŒ
ØˆŒ	Ø&ˆÔØ"ˆŒä'ØÜ˜R %™Z›ØØØô
ˆŒ
ð ×!Ñ!Ü'Ü  U¡
›OØ Ø ØØØôð ð "ó 

ˆð 	�	‰	×Ñ˜Ôà×!Ñ!Ü'Ü  U¡
›OØ Ø!ØØØôð ð "ó 

ˆð 	�	‰	×Ñ˜Ôà×!Ñ!Ü'Ü  e¡Ó,Ø!Ø!ØØØôð ð "ó 

ˆð 	�	‰	×Ñ˜Ôà×!Ñ!Ü'Ü  e¡Ó,Ø!Ø!ØØØôð ð "ó 

ˆð 	�	‰	×Ñ˜Ôà×!Ñ!Ü'Ü  e¡Ó,Ø!Ø!ØØØôð ð "ó 

ˆð 	�	‰	×Ñ˜Ôà×!Ñ!Ü'Ü  e¡Ó,Ø!Ø!ØØØôð ð "ó 

ˆð 	�	‰	×Ñ˜Ôä�q–ˆAØ×#Ñ#Ü+Ü # C¨%¡KÓ 0Ø"%Ø"%Ø"ØØôð ¤ A¨¡E£
Ñ*ð $ó 
ˆCð �I‰I×Ñ˜SÕ!ð ð ×!Ñ!Ü'Ü  e¡Ó,Ø!Ø"ØØØôð ð "ó 

ˆð 	�	‰	×Ñ˜Ôà× Ñ Ü'Ü  u¡Ó-Ø"Ø"ØØØôð ð !ó 

ˆð 	�	‰	×Ñ˜ÔáÜ ×2Ñ2°1Ó5ˆDŒOà˜Š?Ü—i‘i¤ D¨5¡LÓ 1°;Ó?ˆD�Gð r   c                 ó   — | j                  |«      }| j                  D ]
  } ||«      }Œ | j                  r| j                  |«      }| j                  dkD  r't        j                  |d«      }| j                  |«      }|S )Nr   r   )r>   r;   r=   rD   r<   ÚpaddleÚflattenrF   )r   r    Údwss      r   r!   zMobileNetV1.forwardé   sm   € Ø�J‰J�q‹MˆØ—9”9ˆCÙ�A“‰Að ð �>Š>Ø—‘ Ó"ˆAà×Ñ˜aÒÜ—‘˜q !Ó$ˆAØ—‘˜“
ˆAØˆr   )ç      ð?iè  T)r"   r#   r$   Ú__doc__r   r!   r%   r&   s   @r   r(   r(   B   s   ø„ ñõ6I@öVr   r(   c                 óÐ   — t        d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   rR   ÚloadÚ	load_dict)ÚarchÚ
pretrainedÚkwargsÚmodelÚweight_pathÚparams         r   Ú
_mobilenetrb   ÷   sx   € ÜÑ!˜&Ñ!€EÙà”JÑð	_àˆVÐ]Ð^ó	_Øä/Ü�tÑ˜QÑ¤¨DÑ!1°!Ñ!4ó
ˆô —‘˜KÓ(ˆØ�‰˜Ôà€Lr   c                 ó<   — t        dt        |«      z   | fd|i|¤Ž}|S )a°  MobileNetV1 from
    `"MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications" <https://arxiv.org/abs/1704.04861>`_.

    Args:
        pretrained (bool, optional): Whether to load pre-trained weights. If True, returns a model pre-trained
            on ImageNet. Default: False.
        scale (float, optional): Scale of channels in each layer. Default: 1.0.
        **kwargs (optional): Additional keyword arguments. For details, please refer to :ref:`MobileNetV1 <api_paddle_vision_models_MobileNetV1>`.

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

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> from paddle.vision.models import mobilenet_v1

            >>> # Build model
            >>> model = mobilenet_v1()

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

            >>> # build mobilenet v1 with scale=0.5
            >>> model_scale = mobilenet_v1(scale=0.5)

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

            >>> print(out.shape)
            [1, 1000]
    Úmobilenetv1_r   )rb   rB   )r]   r   r^   r_   s       r   Úmobilenet_v1re     s4   € ôD Øœ˜U›Ñ# ZñØ7<ðØ@Fñ€Eð €Lr   )F)FrU   )rR   r   Úpaddle.utils.downloadr   Úopsr   Ú__all__rY   ÚLayerr	   r(   rb   re   rX   r   r   Ú<module>rj      sW   ðó Ý Ý ;å $à
€ð ð ð€
ô ˜Ÿ™ô  ôFr�"—(‘(ô rójô %r   