
    ёiM                       S SK Jr  S SKrS SKJrJr  S SKJr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  S SKJr  S S	KJr  S
SKJr  \(       a  S SK	Jr   " S S\5      r/ rSS0r " S S\
R:                  5      r " S S\
R:                  5      r " S S\
R:                  5      r  " S S\
R:                  5      r! " S S\
R:                  5      r" " S S\
R:                  5      r# " S S\
R:                  5      r$ S      S!S jjr%g)"    )annotationsN)TYPE_CHECKING	TypedDict)NotRequiredUnpack)nn)	ParamAttr)AdaptiveAvgPool2D	AvgPool2DDropoutLinear	MaxPool2D)Uniform)get_weights_path_from_url   )ConvNormActivation)Tensorc                  *    \ rS rSr% S\S'   S\S'   Srg)_InceptionV3Options(   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/inceptionv3.pyr   r   (   s    %%$$r    r   inception_v3)z>https://paddle-hapi.bj.bcebos.com/models/inception_v3.pdparams 649a4547c3243e8b59c656f41fe330b8c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )InceptionStem7   c           	       > [         TU ]  5         [        SSSSS[        R                  S9U l        [        SSSSS[        R                  S9U l        [        SSSS[        R                  S9U l        [        SSSS	9U l	        [        SS
SS[        R                  S9U l
        [        S
SSS[        R                  S9U l        g )N       r   r   in_channelsout_channelskernel_sizestridepaddingactivation_layer   @   r+   r,   r-   r/   r0   )r-   r.   r/   P      )super__init__r   r   ReLUconv_1a_3x3conv_2a_3x3conv_2b_3x3r   max_poolconv_3b_1x1conv_4a_3x3)self	__class__s    r!   r7   InceptionStem.__init__8   s    -WW
 .WW
 .WW
 "a1E-WW
 .WW
r    c                    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$ )N)r9   r:   r;   r<   r=   r>   )r?   xs     r!   forwardInceptionStem.forwardb   ss    QQQMM!QQMM!r    )r9   r:   r;   r=   r>   r<   )returnNonerC   r   rF   r   r   r   r   r   r7   rD   r   __classcell__r@   s   @r!   r%   r%   7   s    (
T r    r%   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )
InceptionAm   c                  > [         TU ]  5         [        USSS[        R                  S9U l        [        USSS[        R                  S9U l        [        SSSS[        R                  S9U l        [        USSS[        R                  S9U l        [        SSS	S[        R                  S9U l	        [        SSS	S[        R                  S9U l
        [        S	SSS
S9U l        [        UUSS[        R                  S9U l        g )Nr2   r1   r   r3   0      r   `   r(   Fr-   r.   r/   	exclusive)r6   r7   r   r   r8   	branch1x1branch5x5_1branch5x5_2branch3x3dbl_1branch3x3dbl_2branch3x3dbl_3r   branch_poolbranch_pool_conv)r?   num_channelspool_featuresr@   s      r!   r7   InceptionA.__init__n   s   +$WW
 .$WW
 .WW
 1$WW
 1WW
 1WW
 %!Q%
 !3$&WW!
r    c                D   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[        R                  " X#XE/SS9nU$ Nr1   )axis)
rU   rV   rW   rX   rY   rZ   r[   r\   paddleconcat)r?   rC   rU   	branch5x5branch3x3dblr[   s         r!   rD   InceptionA.forward   s    NN1%	$$Q'	$$Y/	**1-**<8**<8&&q)++K8MM<=A
 r    )rU   rX   rY   rZ   rV   rW   r[   r\   )r]   intr^   rh   rF   rG   rH   rI   rK   s   @r!   rM   rM   m   s    8
t r    rM   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )
InceptionB   c           	     D  > [         TU ]  5         [        USSSS[        R                  S9U l        [        USSS[        R                  S9U l        [        SS	SS[        R                  S9U l        [        S	S	SSS[        R                  S9U l        [        SSS
9U l
        g )N  r(   r   r   r*   r2   r1   r3   rR   r-   r.   )r6   r7   r   r   r8   	branch3x3rX   rY   rZ   r   r[   r?   r]   r@   s     r!   r7   InceptionB.__init__   s    +$WW
 1$WW
 1WW
 1WW
 %1=r    c                    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[
        R                  " X#U/SS9nU$ ra   )ro   rX   rY   rZ   r[   rc   rd   )r?   rC   ro   rf   r[   s        r!   rD   InceptionB.forward   sj    NN1%	**1-**<8**<8&&q)MM9K@qIr    )ro   rX   rY   rZ   r[   r]   rh   rF   rG   rH   rI   rK   s   @r!   rj   rj      s    ">H r    rj   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )
InceptionC   c           	       > [         TU ]  5         [        USSS[        R                  S9U l        [        UUSSS[        R                  S9U l        [        UUSSS[        R                  S9U l        [        USSSS	[        R                  S9U l        [        UUSS[        R                  S9U l	        [        UUSS	[        R                  S9U l
        [        UUSS[        R                  S9U l        [        UUSS	[        R                  S9U l        [        USSS[        R                  S9U l        [        S
SSSS9U l        [        USSS[        R                  S9U l        g )Nr5   r1   r   r3   r*   r1      r   r(   rz   r1   r(   r   r(   FrS   )r6   r7   r   r   r8   rU   branch7x7_1branch7x7_2branch7x7_3branch7x7dbl_1branch7x7dbl_2branch7x7dbl_3branch7x7dbl_4branch7x7dbl_5r   r[   r\   )r?   r]   channels_7x7r@   s      r!   r7   InceptionC.__init__   s   +$WW
 .$%WW
 .$%WW
 .$WW
 1$%WW
 1$%WW
 1$%WW
 1$%WW
 1$WW
 %!Q%
 !3$WW!
r    c                   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U R                  U5      n[        R                  " X#XE/SS9nU$ ra   )rU   r~   r   r   r   r   r   r   r   r[   r\   rc   rd   )r?   rC   rU   	branch7x7branch7x7dblr[   s         r!   rD   InceptionC.forward?  s    NN1%	$$Q'	$$Y/	$$Y/	**1-**<8**<8**<8**<8&&q)++K8MM<=A
 r    )rU   r~   r   r   r   r   r   r   r   r[   r\   )r]   rh   r   rh   rF   rG   rH   rI   rK   s   @r!   rv   rv      s    P
d r    rv   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )
InceptionDiV  c           	       > [         TU ]  5         [        USSS[        R                  S9U l        [        SSSSS[        R                  S9U l        [        USSS[        R                  S9U l        [        SSS	S
[        R                  S9U l        [        SSSS[        R                  S9U l	        [        SSSSS[        R                  S9U l
        [        SSS9U l        g )Nr5   r1   r   r3   @  r(   r   r*   ry   r{   r|   r}   rn   )r6   r7   r   r   r8   branch3x3_1branch3x3_2branch7x7x3_1branch7x7x3_2branch7x7x3_3branch7x7x3_4r   r[   rp   s     r!   r7   InceptionD.__init__W  s    -$WW
 .WW
 0$WW
 0WW
 0WW
 0WW
 %1=r    c                "   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[        R                  " X#U/SS9nU$ ra   )	r   r   r   r   r   r   r[   rc   rd   )r?   rC   ro   branch7x7x3r[   s        r!   rD   InceptionD.forward  s    $$Q'	$$Y/	((+((5((5((5&&q)MM9;?aHr    )r   r   r   r   r   r   r[   rt   rH   rI   rK   s   @r!   r   r   V  s    0>d r    r   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )
InceptionEi  c                  > [         TU ]  5         [        USSS[        R                  S9U l        [        USSS[        R                  S9U l        [        SSSS[        R                  S9U l        [        SSSS	[        R                  S9U l        [        US
SS[        R                  S9U l	        [        S
SSS[        R                  S9U l
        [        SSSS[        R                  S9U l        [        SSSS	[        R                  S9U l        [        SSSSS9U l        [        USSS[        R                  S9U l        g )Nr   r1   r   r3   rm   )r1   r(   )r   r1   )r(   r1   )r1   r   i  r(   FrS   r5   )r6   r7   r   r   r8   rU   r   branch3x3_2abranch3x3_2brX   rY   branch3x3dbl_3abranch3x3dbl_3br   r[   r\   rp   s     r!   r7   InceptionE.__init__  sU   +$WW
 .$WW
 /WW
 /WW
 1$WW
 1WW
  2WW 
  2WW 
 %!Q%
 !3$WW!
r    c                   U R                  U5      nU R                  U5      nU R                  U5      U R                  U5      /n[        R
                  " USS9nU R                  U5      nU R                  U5      nU R                  U5      U R                  U5      /n[        R
                  " USS9nU R                  U5      nU R                  U5      n[        R
                  " X#XE/SS9nU$ ra   )rU   r   r   r   rc   rd   rX   rY   r   r   r[   r\   )r?   rC   rU   ro   rf   r[   s         r!   rD   InceptionE.forward  s    NN1%	$$Q'	i(i(
	 MM)!4	**1-**<8  .  .
 }}\:&&q)++K8MM<=A
 r    )
rU   r   r   r   rX   rY   r   r   r[   r\   rt   rH   rI   rK   s   @r!   r   r     s    E
N 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	$ )InceptionV3i  a  Inception v3 model from
`"Rethinking the Inception Architecture for Computer Vision" <https://arxiv.org/pdf/1512.00567.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 Inception v3 model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import InceptionV3

        >>> inception_v3 = InceptionV3()

        >>> x = paddle.rand([1, 3, 299, 299])
        >>> out = inception_v3(x)

        >>> print(out.shape)
        paddle.Size([1, 1000])
rh   r   boolr   c           
       > [         TU ]  5         Xl        X l        / SQ/ SQ/S// SQ/ SQ/S/SS/S	.U l        U R                  S
   nU R                  S   nU R                  S   nU R                  S   nU R                  S   n[        5       U l        [        R                  " 5       U l	        [        [        US   5      5       H6  n[        US   U   US   U   5      n	U R                  R                  U	5        M8     [        [        U5      5       H+  n[        XX   5      n
U R                  R                  U
5        M-     [        [        US   5      5       H6  n[        US   U   US   U   5      nU R                  R                  U5        M8     [        [        U5      5       H+  n[!        Xh   5      nU R                  R                  U5        M-     [        [        U5      5       H+  n[#        Xx   5      nU R                  R                  U5        M-     U(       a  [%        S5      U l        US:  aT  [)        SSS9U l        S[,        R.                  " S5      -  n[1        SU[3        [5        U* U5      S9[3        5       S9U l        g g )N)r5         )r)   r2   r2   r   )   r   r   r   )      r   r5   r   i      )inception_ainception_binception_cinception_dinception_er   r   r   r   r   r   r1   g?downscale_in_infer)pmodeg      ?g      @)initializer)weight_attr	bias_attr)r6   r7   r   r   layers_configr%   inception_stemr   	LayerListinception_block_listrangelenrM   appendrj   rv   r   r   r
   avg_poolr   dropoutmathsqrtr   r	   r   fc)r?   r   r   inception_a_listinception_c_listinception_b_listinception_d_listinception_e_listir   r   r   r   r   stdvr@   s                  r!   r7   InceptionV3.__init__  sp   &"+\:502FG5 $<
  --m<--m<--m<--m<--m<+o$&LLN!s+A./0A$ #A&(8(;A(>K %%,,[9	 1 s+,-A$%5%89K%%,,[9 . s+A./0A$ #A&(8(;A(>K %%,,[9	 1 s+,-A$%5%89K%%,,[9 . s+,-A$%5%89K%%,,[9 . -a0DM?"S/CDDL:..D%'4%2FG#+	DG r    c                4   U R                  U5      nU R                   H  nU" U5      nM     U R                  (       a  U R                  U5      nU R                  S:  a9  [
        R                  " USS/S9nU R                  U5      nU R                  U5      nU$ )Nr   r   )shape)	r   r   r   r   r   rc   reshaper   r   )r?   rC   inception_blocks      r!   rD   InceptionV3.forwardS  s    "#88O"A  9 >>a AaqT
3AQA
Ar    )r   r   r   r   r   r   r   r   )i  T)r   rh   r   r   rF   rG   rH   )
r   r   r   r   __doc__r   r7   rD   r   rJ   rK   s   @r!   r   r     s*    4 O8 8t r    r   c                    [        S0 UD6nS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$ )a  Inception v3 model from
`"Rethinking the Inception Architecture for Computer Vision" <https://arxiv.org/pdf/1512.00567.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:`InceptionV3 <api_paddle_vision_models_InceptionV3>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of Inception v3 model.

Examples:
    .. code-block:: pycon

        >>> import paddle
        >>> from paddle.vision.models import inception_v3

        >>> # Build model
        >>> model = inception_v3()

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

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

        >>> print(out.shape)
        paddle.Size([1, 1000])
r"   zJ model do not have a pretrained model now, you should set pretrained=Falser   r1   r   )r   
model_urlsr   rc   loadset_dict)
pretrainedkwargsmodelarchweight_pathparams         r!   r"   r"   b  s    @ !&!EDz! 	
f^_	
! 0tQD!1!!4
 K(uLr    )F)r   r   r   zUnpack[_InceptionV3Options]rF   r   )&
__future__r   r   typingr   r   typing_extensionsr   r   rc   r   paddle.base.param_attrr	   	paddle.nnr
   r   r   r   r   paddle.nn.initializerr   paddle.utils.downloadr   opsr   r   r   __all__r   Layerr%   rM   rj   rv   r   r   r   r"   r   r    r!   <module>r      s    # 

   , N N ) ; $%i %
   
3BHH 3lI IX0 0fg gT? ?D` `Fd"(( dP ,,(C,,r    