U
    ¯Ê¹jÌ  ã                   @   s`   d Z ddlZddlmZ ddlm  mZ ddlmZ e 	e
¡ZG dd„ dejƒZdd	d
„ZdS )zY Test Time Pooling (Average-Max Pool)

Hacked together by / Copyright 2020 Ross Wightman
é    N)Únné   )Úadaptive_avgmax_pool2dc                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚTestTimePoolHeadé   c                    s¨   t t| ƒ ¡  || _|| _| j ¡ }t|tjƒr8|| _	n`tj| jj
| jjddd�| _	| j	jj |jj | j	j ¡ ¡¡ | j	jj |jj | j	j ¡ ¡¡ | j d¡ d S )Nr   T)Úkernel_sizeÚbiasr   )Úsuperr   Ú__init__ÚbaseÚoriginal_poolZget_classifierÚ
isinstancer   ZConv2dÚfcZnum_featuresZnum_classesÚweightÚdataZcopy_ÚviewÚsizer   Zreset_classifier)Úselfr   r   Zbase_fc©Ú	__class__© úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/layers/test_time_pool.pyr
      s    
   ÿ""zTestTimePoolHead.__init__c                 C   sD   | j  |¡}tj|| jdd�}|  |¡}t|dƒ}| | d¡d¡S )Nr   )r   Zstrider   éÿÿÿÿ)	r   Zforward_featuresÚFZ
avg_pool2dr   r   r   r   r   )r   Úxr   r   r   Úforward   s
    

zTestTimePoolHead.forward)r   )Ú__name__Ú
__module__Ú__qualname__r
   r   Ú__classcell__r   r   r   r   r      s   r   Fc                 C   s´   d}t | dƒr| js| dfS |r6d| jkr6| jd }n
| jd }|d d |d kr¬|d d |d kr¬t dt|d dd … ƒt|dd … ƒf ¡ t| | jd d	�} d
}| |fS )NFÚdefault_cfgZtest_input_sizeZ
input_sizer   éþÿÿÿzETarget input size %s > pretrained default %s, using test time poolingZ	pool_size)r   T)Úhasattrr    Ú_loggerÚinfoÚstrr   )ÚmodelÚconfigZuse_test_sizeZtest_time_poolZdf_input_sizer   r   r   Úapply_test_time_pool'   s    
("ÿr(   )F)Ú__doc__ÚloggingZtorchr   Ztorch.nn.functionalZ
functionalr   Zadaptive_avgmax_poolr   Ú	getLoggerr   r#   ÚModuler   r(   r   r   r   r   Ú<module>   s   
