Ë
    –\;jH#  ã                   ó  — 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mZmZ d dlmZ d dlmZ g ZddiZd	„ Z G d
„ dej*                  «      Z G d„ dej*                  «      Z G d„ dej*                  «      Zdd„Zy)é    N)Únn)Ú	ParamAttr)ÚAdaptiveAvgPool2DÚ	AvgPool2DÚConv2DÚDropoutÚLinearÚ	MaxPool2D)ÚUniform)Úget_weights_path_from_urlÚ	googlenet)zWhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GoogLeNet_pretrained.pdparamsÚ 80c06f038e905c53ab32c40eca6e26aec                 óP   — d|dz  | z  z  dz  }t        t        | |«      ¬«      }|S )Ng      @é   g      à?)Úinitializer)r   r   )ÚchannelsÚfilter_sizeÚstdvÚ
param_attrs       úgG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/vision/models/googlenet.pyÚxavierr   (   s3   € Ø�; ‘> HÑ,Ñ-°#Ñ5€DÜ¤w°¨u°dÓ';Ô<€JØÐó    c                   ó(   ‡ — e Zd Z	 dˆ fd„	Zd„ Zˆ xZS )Ú	ConvLayerc           	      ó\   •— t         ‰| �  «        t        |||||dz
  dz  |d¬«      | _        y )Né   r   F)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingÚgroupsÚ	bias_attr)ÚsuperÚ__init__r   Ú_conv)ÚselfÚnum_channelsÚnum_filtersr   r    r"   Ú	__class__s         €r   r%   zConvLayer.__init__/   s:   ø€ ô 	‰ÑÔäØ$Ø$Ø#ØØ  1‘_¨Ñ*ØØô
ˆ�
r   c                 ó(   — | j                  |«      }|S )N)r&   )r'   ÚinputsÚys      r   ÚforwardzConvLayer.forward>   s   € Ø�J‰J�vÓˆØˆr   )r   r   ©Ú__name__Ú
__module__Ú__qualname__r%   r.   Ú__classcell__©r*   s   @r   r   r   .   s   ø„ àGHõ
ör   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú	Inceptionc	                 ó   •— t         ‰	| �  «        t        ||d«      | _        t        ||d«      | _        t        ||d«      | _        t        ||d«      | _        t        ||d«      | _        t        ddd¬«      | _	        t        ||d«      | _
        y )Nr   é   é   )r   r    r!   )r$   r%   r   Ú_conv1Ú_conv3rÚ_conv3Ú_conv5rÚ_conv5r
   Ú_poolÚ_convprj)
r'   Úinput_channelsÚoutput_channelsÚfilter1Úfilter3RÚfilter3Úfilter5RÚfilter5Úprojr*   s
            €r   r%   zInception.__init__D   s€   ø€ ô 	‰ÑÔä °¸Ó;ˆŒÜ  °¸1Ó=ˆŒÜ ¨'°1Ó5ˆŒÜ  °¸1Ó=ˆŒÜ ¨'°1Ó5ˆŒÜ¨1°QÀÔBˆŒ
ä! .°$¸Ó:ˆ�r   c                 óT  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }t        j                  ||||gd¬«      }	t        j                  |	«      }	|	S )Nr   ©Úaxis)r:   r;   r<   r=   r>   r?   r@   ÚpaddleÚconcatÚFÚrelu)
r'   r,   Úconv1Úconv3rÚconv3Úconv5rÚconv5ÚpoolÚconvprjÚcats
             r   r.   zInception.forwardZ   s�   € Ø—‘˜FÓ#ˆà—‘˜fÓ%ˆØ—‘˜FÓ#ˆà—‘˜fÓ%ˆØ—‘˜FÓ#ˆà�z‰z˜&Ó!ˆØ—-‘- Ó%ˆä�m‰m˜U E¨5°'Ð:ÀÔCˆÜ�f‰f�S‹kˆØˆ
r   r/   r4   s   @r   r6   r6   C   s   ø„ ô;ö,r   r6   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ xZS )Ú	GoogLeNetao  GoogLeNet (Inception v1) model architecture from
    `"Going Deeper with Convolutions" <https://arxiv.org/pdf/1409.4842.pdf>`_.

    Args:
        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 GoogLeNet (Inception v1) model.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> from paddle.vision.models import GoogLeNet

            >>> # Build model
            >>> model = GoogLeNet()

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

            >>> print(out.shape, out1.shape, out2.shape)
            [1, 1000] [1, 1000] [1, 1000]
    c           
      ó¼  •— t         ‰| �  «        || _        || _        t	        dddd«      | _        t        dd¬«      | _        t	        ddd«      | _        t	        ddd«      | _	        t        ddddd	d
dd«      | _        t        ddd	d	dddd«      | _        t        dddddd
dd«      | _        t        dddddddd«      | _        t        ddd	d	dddd«      | _        t        dddddddd«      | _        t        ddddddd	d	«      | _        t        ddddddd	d	«      | _        t        ddddddd	d	«      | _        |r4t)        d«      | _        t-        dd¬«      | _        t-        dd¬«      | _        |dkD  rìt3        dd¬«      | _        t7        d |t9        d d«      ¬!«      | _        t	        dd	d«      | _        t7        d"d t9        d#d«      ¬!«      | _        t3        d$d¬«      | _         t7        d |t9        d d«      ¬!«      | _!        t	        dd	d«      | _"        t7        d"d t9        d#d«      ¬!«      | _#        t3        d$d¬«      | _$        t7        d |t9        d d«      ¬!«      | _%        y y )%Nr8   é@   é   r   )r   r    r   éÀ   é`   é€   é   é    é   ià  éÐ   é0   i   é    ép   éà   é   é�   i   i  i@  i@  i€  r9   r   gš™™™™™Ù?Údownscale_in_infer)ÚpÚmodei   )Úweight_attri€  i   gffffffæ?)&r$   r%   Únum_classesÚ	with_poolr   r&   r
   r?   Ú_conv_1Ú_conv_2r6   Ú_ince3aÚ_ince3bÚ_ince4aÚ_ince4bÚ_ince4cÚ_ince4dÚ_ince4eÚ_ince5aÚ_ince5br   Ú_pool_5r   Ú_pool_o1Ú_pool_o2r   Ú_dropr	   r   Ú_fc_outÚ_conv_o1Ú_fc_o1Ú_drop_o1Ú_out1Ú_conv_o2Ú_fc_o2Ú_drop_o2Ú_out2)r'   rn   ro   r*   s      €r   r%   zGoogLeNet.__init__‡   s@  ø€ Ü‰ÑÔØ&ˆÔØ"ˆŒä˜q " a¨Ó+ˆŒ
Ü¨1°QÔ7ˆŒ
Ü   R¨Ó+ˆŒÜ   S¨!Ó,ˆŒä   c¨2¨r°3¸¸BÀÓCˆŒÜ   c¨3°°S¸"¸bÀ"ÓEˆŒä   c¨3°°C¸¸RÀÓDˆŒÜ   c¨3°°S¸"¸bÀ"ÓEˆŒÜ   c¨3°°S¸"¸bÀ"ÓEˆŒÜ   c¨3°°S¸"¸bÀ"ÓEˆŒÜ   c¨3°°S¸"¸cÀ3ÓGˆŒä   c¨3°°S¸"¸cÀ3ÓGˆŒÜ   c¨3°°S¸"¸cÀ3ÓGˆŒáä,¨QÓ/ˆDŒLä%°!¸AÔ>ˆDŒMä%°!¸AÔ>ˆDŒMà˜Š?ä  3Ð-AÔBˆDŒJÜ!Ø�k¬v°d¸A«ôˆDŒLô
 & c¨3°Ó2ˆDŒMÜ   t¼ÀÀa»ÔIˆDŒKÜ# cÐ0DÔEˆDŒMÜ  k¼vÀdÈA»ÔOˆDŒJô & c¨3°Ó2ˆDŒMÜ   t¼ÀÀa»ÔIˆDŒKÜ# cÐ0DÔEˆDŒMÜ  k¼vÀdÈA»ÔOˆD�Jð# r   c                 óæ  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|||}}}| j                  r3| j                  |«      }| j                  |«      }| j!                  |«      }| j"                  dkD  �r| j%                  |«      }t'        j(                  |ddg¬«      }| j+                  |«      }| j-                  |«      }t'        j.                  |dd¬«      }| j1                  |«      }t3        j4                  |«      }| j7                  |«      }| j9                  |«      }| j;                  |«      }t'        j.                  |dd¬«      }| j=                  |«      }| j?                  |«      }| jA                  |«      }|||gS )Nr   r   r8   rJ   r   éÿÿÿÿ)Ú
start_axisÚ	stop_axis)!r&   r?   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   ro   r{   r|   r}   rn   r~   rL   Úsqueezer   r€   Úflattenr�   rN   rO   r‚   rƒ   r„   r…   r†   r‡   )	r'   r,   ÚxÚince4aÚince4dÚince5bÚoutÚout1Úout2s	            r   r.   zGoogLeNet.forward¸   sþ  € Ø�J‰J�vÓˆØ�J‰J�q‹MˆØ�L‰L˜‹OˆØ�L‰L˜‹OˆØ�J‰J�q‹Mˆà�L‰L˜‹OˆØ�L‰L˜‹OˆØ�J‰J�q‹Mˆà—‘˜a“ˆØ�L‰L˜Ó ˆØ�L‰L˜‹OˆØ—‘˜a“ˆØ�L‰L˜Ó ˆØ�J‰J�q‹Mˆà�L‰L˜‹OˆØ—‘˜a“ˆà  &¨&�4ˆTˆà�>Š>Ø—,‘,˜sÓ#ˆCØ—=‘= Ó&ˆDØ—=‘= Ó&ˆDà×Ñ˜aÓØ—*‘*˜S“/ˆCÜ—.‘. ¨A¨q¨6Ô2ˆCØ—,‘,˜sÓ#ˆCà—=‘= Ó&ˆDÜ—>‘> $°1ÀÔCˆDØ—;‘;˜tÓ$ˆDÜ—6‘6˜$“<ˆDØ—=‘= Ó&ˆDØ—:‘:˜dÓ#ˆDà—=‘= Ó&ˆDÜ—>‘> $°1ÀÔCˆDØ—;‘;˜tÓ$ˆDØ—=‘= Ó&ˆDØ—:‘:˜dÓ#ˆDà�T˜4Ð Ð r   )iè  T)r0   r1   r2   Ú__doc__r%   r.   r3   r4   s   @r   rY   rY   k   s   ø„ ñõ6/Pöb.!r   rY   c                 óÔ   — t        di |¤Ž}d}| rX|t        v s
J |› d�«       ‚t        t        |   d   t        |   d   «      }t        j                  |«      }|j                  |«       |S )a  GoogLeNet (Inception v1) model architecture from
    `"Going Deeper with Convolutions" <https://arxiv.org/pdf/1409.4842.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:`GoogLeNet <api_paddle_vision_models_GoogLeNet>`.

    Returns:
        :ref:`api_paddle_nn_Layer`. An instance of GoogLeNet (Inception v1) model.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> from paddle.vision.models import googlenet

            >>> # Build model
            >>> model = googlenet()

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

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

            >>> print(out.shape, out1.shape, out2.shape)
            [1, 1000] [1, 1000] [1, 1000]
    r   zJ model do not have a pretrained model now, you should set pretrained=Falser   r   © )rY   Ú
model_urlsr   rL   ÚloadÚset_dict)Ú
pretrainedÚkwargsÚmodelÚarchÚweight_pathÚparams         r   r   r   é   s   € ô< Ñ˜Ñ€EØ€DÙà”JÑð	_àˆVÐ]Ð^ó	_Øä/Ü�tÑ˜QÑ¤¨DÑ!1°!Ñ!4ó
ˆô —‘˜KÓ(ˆØ�‰�uÔØ€Lr   )F)rL   Úpaddle.nn.functionalr   Ú
functionalrN   Úpaddle.base.param_attrr   Ú	paddle.nnr   r   r   r   r	   r
   Úpaddle.nn.initializerr   Úpaddle.utils.downloadr   Ú__all__r˜   r   ÚLayerr   r6   rY   r   r—   r   r   Ú<module>r©      s|   ðó ß  Ð  Ý Ý ,÷÷ õ *Ý ;à
€ð ð ð€
òô�—‘ô ô*%�—‘ô %ôP{!�—‘ô {!ô|*r   