o
    )jt                     @   s~   d Z ddlZddlm  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gZG dd de
ZG dd	 d	ej
ZdS )
zSplit-Attention    N)nn)BatchNorm2dConv2dLinearModuleReLU)_pairSplAtConv2dc                       s@   e Zd ZdZ												
d fdd	Zdd Z  ZS )r	   zSplit-Attention Conv2d
       r   r   r   r   T      FN        c                    sJ  t t|   t|}|o|d dkp|d dk| _|| _t||	 |
 d}|	| _|| _|| _	|| _
| jrKt|||	 ||||f||	 |d|| _nt|||	 ||||f||	 |d|| _|d u| _| jro|||	 | _tdd| _t||d| jd| _| jr||| _t|||	 d| jd| _|dkrt|d	| _t|	|| _d S )
Nr   r       )groupsbiasT)Zinplace)r   r      )superr	   __init__r   rectifyrectify_avgmaxradixcardinalitychannelsdropblock_probr   convuse_bnbn0r   relufc1bn1fc2ZDropBlock2D	dropblockrSoftMaxrsoftmax)selfZin_channelsr   Zkernel_sizeZstridepaddingZdilationr   r   r   Zreduction_factorr   r   Z
norm_layerr   kwargsZinter_channels	__class__ n/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/cv/animal_recognition/splat.pyr      sb   	
	


zSplAtConv2d.__init__c           	      C   s  |  |}| jr| |}| jdkr| |}| |}|jd d \}}| jdkr:tj	||| j dd}t
|}n|}t|d}| |}| jrO| |}| |}| |}| ||ddd}| jdkrtj	||| j dd}t
dd t||D }| S || }| S )Nr   r   r   dimc                 S   s   g | ]\}}|| qS r,   r,   ).0Zattsplitr,   r,   r-   
<listcomp>i   s    z'SplAtConv2d.forward.<locals>.<listcomp>)r   r   r   r   r$   r    shaper   torchr2   sumFZadaptive_avg_pool2dr!   r"   r#   r&   viewzip
contiguous)	r'   xbatchZrchannelZsplitedgapZattenZattensoutr,   r,   r-   forwardO   s0   











zSplAtConv2d.forward)r
   r   r
   r   Tr   r   FFNr   )__name__
__module____qualname____doc__r   r?   __classcell__r,   r,   r*   r-   r	      s    <c                       s$   e Zd Z fddZdd Z  ZS )r%   c                    s   t    || _|| _d S )N)r   r   r   r   )r'   r   r   r*   r,   r-   r   q   s   

zrSoftMax.__init__c                 C   s\   | d}| jdkr'||| j| jddd}tj|dd}||d}|S t	|}|S )Nr   r   r0   r   r.   )
sizer   r8   r   Z	transposer7   ZsoftmaxZreshaper5   Zsigmoid)r'   r;   r<   r,   r,   r-   r?   v   s   


zrSoftMax.forward)r@   rA   rB   r   r?   rD   r,   r,   r*   r-   r%   o   s    r%   )rC   r5   Ztorch.nn.functionalr   Z
functionalr7   Ztorch.nnr   r   r   r   r   Ztorch.nn.modules.utilsr   __all__r	   r%   r,   r,   r,   r-   <module>   s   `