o
    + iw                     @  s  d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	Z	d dl
m  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 d dlmZ d d	lmZ d
diZg Zerid dl	mZ d dlmZ G dd deZG dd dej Z!G dd dej Z"dddZ#	d d!dd
Z$dS )"    )annotationsN)TYPE_CHECKING	TypedDict)NotRequiredUnpack)nn)	ParamAttr)Conv2DDropoutLinear	MaxPool2DReLU)Uniform)get_weights_path_from_urlalexnet)zUhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/AlexNet_pretrained.pdparamsZ 7f0f9f737132e02732d75a1459d98a43)Tensor)Size2c                   @  s   e Zd ZU ded< dS )_AlexNetOptionszNotRequired[int]num_classesN)__name__
__module____qualname____annotations__ r   r   h/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/vision/models/alexnet.pyr   .   s   
 r   c                      s.   e Zd Z		dd fddZdddZ  ZS )ConvPoolLayer   Ninput_channelsintoutput_channelsfilter_sizer   stridepaddingstdvfloatgroupsact
str | NonereturnNonec	           	        sh   t    |dkrt nd | _t||||||tt| |dtt| |dd| _tdddd| _	d S )NreluZinitializer)Zin_channelsZout_channelskernel_sizer!   r"   r%   weight_attr	bias_attr      r   )r,   r!   r"   )
super__init__r   r*   r	   r   r   _convr   _pool)	selfr   r   r    r!   r"   r#   r%   r&   	__class__r   r   r2   3   s   

zConvPoolLayer.__init__inputsr   c                 C  s,   |  |}| jd ur| |}| |}|S )N)r3   r*   r4   r5   r8   xr   r   r   forwardN   s
   



zConvPoolLayer.forward)r   N)r   r   r   r   r    r   r!   r   r"   r   r#   r$   r%   r   r&   r'   r(   r)   r8   r   r(   r   )r   r   r   r2   r;   __classcell__r   r   r6   r   r   2   s
    	r   c                      s8   e Zd ZU dZded< dd fddZdddZ  ZS )AlexNeta  AlexNet model from
    `"ImageNet Classification with Deep Convolutional Neural Networks"
    <https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.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.

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

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> from paddle.vision.models import AlexNet

            >>> alexnet = AlexNet()
            >>> x = paddle.rand([1, 3, 224, 224])
            >>> out = alexnet(x)
            >>> print(out.shape)
            [1, 1000]
    r   r     r(   r)   c                   s  t    || _dtd }tddddd|dd	| _dtd
 }tddddd|dd	| _dtd }tdddddt	t
| |dt	t
| |dd| _dtd }tdddddt	t
| |dt	t
| |dd| _dtd }tddddd|dd	| _| jdkrdtd }tddd| _tddt	t
| |dt	t
| |dd| _tddd| _tddt	t
| |dt	t
| |dd| _td|t	t
| |dt	t
| |dd| _d S d S )Ng      ?ik  r/   @         r0   r*   )r&   i@        r   i  i  r+   )r!   r"   r-   r.   i     i 	  r   i $  g      ?Zdownscale_in_infer)pmodei   )Zin_featuresZout_featuresr-   r.   )r1   r2   r   mathsqrtr   _conv1_conv2r	   r   r   _conv3_conv4_conv5r
   _drop1r   _fc6_drop2_fc7_fc8)r5   r   r#   r6   r   r   r2   q   sf   
		
zAlexNet.__init__r8   r   c                 C  s   |  |}| |}| |}t|}| |}t|}| |}| jdkrStj	|ddd}| 
|}| |}t|}| |}| |}t|}| |}|S )Nr   r   )Z
start_axisZ	stop_axis)rJ   rK   rL   Fr*   rM   rN   r   paddleflattenrO   rP   rQ   rR   rS   r9   r   r   r   r;      s"   














zAlexNet.forward)r?   )r   r   r(   r)   r<   )r   r   r   __doc__r   r2   r;   r=   r   r   r6   r   r>   V   s
   
 6r>   archstr
pretrainedboolkwargsUnpack[_AlexNetOptions]r(   c                 K  sZ   t di |}|r+| tv sJ |  dtt|  d t|  d }t|}|| |S )NzJ model do not have a pretrained model now, you should set pretrained=Falser   r   r   )r>   
model_urlsr   rV   load	load_dict)rY   r[   r]   modelZweight_pathparamr   r   r   _alexnet   s   


rd   Fc                 K  s   t d| fi |S )a  AlexNet model from
    `"ImageNet Classification with Deep Convolutional Neural Networks"
    <https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.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:`AlexNet <api_paddle_vision_AlexNet>`.

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

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> from paddle.vision.models import alexnet

            >>> # Build model
            >>> model = alexnet()

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

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

            >>> print(out.shape)
            [1, 1000]
    r   )rd   )r[   r]   r   r   r   r      s   !)rY   rZ   r[   r\   r]   r^   r(   r>   )F)r[   r\   r]   r^   r(   r>   )%
__future__r   rH   typingr   r   Ztyping_extensionsr   r   rV   Zpaddle.nn.functionalr   Z
functionalrU   Zpaddle.base.param_attrr   Z	paddle.nnr	   r
   r   r   r   Zpaddle.nn.initializerr   Zpaddle.utils.downloadr   r_   __all__r   Zpaddle._typingr   r   ZLayerr   r>   rd   r   r   r   r   r   <module>   s.   $
g