o
    *j                     @   s   d dl Z d dlZd dlZd dlmZ d dlm  mZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ dd
dZG dd dejZdd Zdd ZejejejdG dd deZdS )    N)init)models)Models)
TorchModel)MODELS)Tasks   ư>c                 C   s&   t t | | |dd| S )N)   r
         ?)FZadaptive_avg_pool2drelupow)xpeps r   |/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/cv/pedestrian_attribute_recognition/model.pygem   s   &r   c                       s.   e Zd Zd	 fdd	Zdd Zdd Z  ZS )
GeMr   r	   c                    s.   t t|   ttd| | _|| _d S )Nr
   )	superr   __init__nn	ParametertorchZonesr   r   )selfr   r   	__class__r   r   r      s   
zGeM.__init__c                 C   s   t || j| jdS )N)r   r   )r   r   r   r   r   r   r   r   forward    s   zGeM.forwardc                 C   s<   | j jd d d| jj d  d d t| j d S )N(zp=z{:.4f}r   z, zeps=))r   __name__formatr   datatoliststrr   )r   r   r   r   __repr__#   s   zGeM.__repr__r   r	   )r"   
__module____qualname__r   r   r'   __classcell__r   r   r   r   r      s    r   c                 C   s   | j j}|ddkrtj| jjddd d S |ddkr2tj| jjddd t| jjd d S |d	dkrLt	| jjd
d t| jjd d S d S )NConvr   Zfan_in)amodeLinearZfan_out        BatchNorm1dr   g{Gz?)
r   r"   findr   Zkaiming_normal_weightr$   	constant_biasnormal_m	classnamer   r   r   weights_init_kaiming(   s   r;   c                 C   sp   | j j}|ddkrtj| jjdd t| jjd |ddkr6tj| jjdd t| jjd d S d S )Nr0   r-   gMbP?)Zstdr1   r,   )	r   r"   r3   r   r7   r4   r$   r5   r6   r8   r   r   r   weights_init_classifier4   s   r<   )module_namec                       s*   e Zd ZdZd fdd	Zdd Z  ZS )PedestrainAttributez,Pedestrian Attribute Recognition model.
    3   c                    s   t t| jdi | tjdd}t |_t |_	|| _
ttddtd| _	| j	t td|| _| jt dS )zinitialize the pedestrian attribute recognition model.

        Args:
            num_classes (int): the number of attributes.
        F)Z
pretrainedi   i   Nr   )r   r>   r   r   Zresnet50r   avgpoolr   Z
Sequentialfcmodelr0   r2   applyr;   
classifierr<   )r   Znum_classeskwargsZmodel_ftr   r   r   r   E   s   
zPedestrainAttribute.__init__c                 C   s   | j |}| j |}| j |}| j |}| j |}| j |}| j |}| j |}| j 	|}|
d}| |}| |}|S )z
        Args:
            x (`torch.Tensor`): batched image tensor,
                shape of each tensor is [N, 3, H, W].

        Return:
            `labels [N, num_classes] of the attributes`
        r
   )rB   Zconv1Zbn1r   ZmaxpoolZlayer1Zlayer2Zlayer3Zlayer4r@   flattenrA   rD   r   r   r   r   r   U   s   



zPedestrainAttribute.forward)r?   )r"   r)   r*   __doc__r   r   r+   r   r   r   r   r>   >   s    r>   r(   )osnumpynpr   Ztorch.nnr   Ztorch.nn.functionalZ
functionalr   r   Ztorchvisionr   Zmodelscope.metainfor   Z'modelscope.models.base.base_torch_modelr   Zmodelscope.models.builderr   Zmodelscope.utils.constantr   r   Moduler   r;   r<   Zregister_moduleZ pedestrian_attribute_recognitionr>   r   r   r   r   <module>   s(   

