a
    dp&                     @   s  d Z ddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
mZmZ ddlmZmZmZmZmZmZ ddlmZ dd	d
eefddZddddddddd
eeddddd
d
fddZdddd	d
eefddZd
d
d
ddddddd	eeddddddd
d
fddZdS )z Transforms Factory
Factory methods for building image transforms for use with TIMM (PyTorch Image Models)

Hacked together by / Copyright 2019, Ross Wightman
    N)
transforms)IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STDDEFAULT_CROP_PCT)rand_augment_transformaugment_and_mix_transformauto_augment_transform)str_to_interp_modestr_to_pil_interp!RandomResizedCropAndInterpolationResizeKeepRatioCenterCropOrPadToNumpy)RandomErasing   bilinearFc                 C   sj   |dkrd}t j| t|dt | g}|r:|t g7 }n&|t  t jt|t|dg7 }t 	|S )Nrandomr   interpolationmeanstd)
r   Resizer	   
CenterCropr   ToTensor	NormalizetorchtensorCompose)img_sizer   use_prefetcherr   r   tfl r"   e/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/data/transforms_factory.pytransforms_noaug_train   s    r$   g      ?        g?r   const   c              	   C   s  t |pd}t |pd}t| |||dg}|dkrD|tj|dg7 }|dkr^|tj|dg7 }g }d}|r0t|tszJ |pd|v  }t| t tfrt| }n| }t	t
|d t d	d
 |	D d}|r|dkrt||d< |dr|t||g7 }n6|dr d|d< |t||g7 }n|t||g7 }|dur|st|tt frdt|dv srJ nt|fd }|tj| g7 }g }|r|t g7 }nH|t tjt|	t|
dg7 }|dkr|t||||dd |rt|t|t|fS t|| | S dS )af  
    If separate==True, the transforms are returned as a tuple of 3 separate transforms
    for use in a mixing dataset that passes
     * all data through the first (primary) transform, called the 'clean' data
     * a portion of the data through the secondary transform
     * normalizes and converts the branches above with the third, final transform
    )g{Gz?      ?)g      ?gUUUUUU?)scaleratior   r%   )pFZ3ag?c                 S   s   g | ]}t d td | qS    )minround.0xr"   r"   r#   
<listcomp>]       z-transforms_imagenet_train.<locals>.<listcomp>)Ztranslate_constZimg_meanr   r   ZrandZaugmixg333333?Ztranslate_pctN)      r5   r   cpu)mode	max_countZ
num_splitsZdevice)tupler   r   ZRandomHorizontalFlipZRandomVerticalFlip
isinstancestrlistr.   dictintr
   
startswithr   r   r   lenfloatZColorJitterr   r   r   r   r   appendr   r   )r   r)   r*   hflipvflipcolor_jitterauto_augmentr   r    r   r   re_probre_modere_countre_num_splitsseparateZforce_color_jitterZprimary_tflZsecondary_tflZdisable_color_jitterZimg_size_minZ	aa_paramsZ	final_tflr"   r"   r#   transforms_imagenet_train-   sd    



rM   c           
         s4   pt  t| ttfr>t| dks&J t fdd| D }nt|   }||f}|dkrztj|t	|dt
| g}nv|dkrdd |D }	t||dd	t| |	d
g}nD|d |d krtj|d t	|dg}n
t|g}|t
| g7 }|r|t g7 }n&|t tjt|t|dg7 }t|S )N   c                    s   g | ]}t |  qS r"   )mathfloorr0   crop_pctr"   r#   r3      r4   z,transforms_imagenet_eval.<locals>.<listcomp>Zsquashr   Zborderc                 S   s   g | ]}t d | qS r,   )r/   )r1   vr"   r"   r#   r3      r4   r(   )r   longest)fillr   r'   r   )r   r;   r:   r=   rA   rO   rP   r   r   r	   r   r   r   r   r   r   r   r   r   )
r   rR   	crop_moder   r    r   r   Z
scale_sizer!   rU   r"   rQ   r#   transforms_imagenet_eval   s<    	

rW   c                 C   s   t | ttfr| dd  }n| }|rP|rP|r4J dddlm} ||||
d}nx|rx|rx|rdJ dt||
|||d}nP|rt|||||||	|
||||||||d}n"|rJ d	t||
|||||d
}|S )Nz6Separate transforms not supported for TF preprocessingr   )TfPreprocessTransform)is_trainingsizer   z-Cannot perform split augmentation with no_aug)r   r    r   r   )r)   r*   rD   rE   rF   rG   r   r    r   r   rH   rI   rJ   rK   rL   z>Separate transforms not supported for validation preprocessing)r   r    r   r   rR   rV   )r;   r:   r=   Ztimm.data.tf_preprocessingrY   r$   rM   rW   )Z
input_sizerZ   r    Zno_augr)   r*   rD   rE   rF   rG   r   r   r   rH   rI   rJ   rK   rR   rV   Ztf_preprocessingrL   r   rY   Z	transformr"   r"   r#   create_transform   s`    
r\   )__doc__rO   r   Ztorchvisionr   Ztimm.data.constantsr   r   r   Ztimm.data.auto_augmentr   r   r   Ztimm.data.transformsr	   r
   r   r   r   r   Ztimm.data.random_erasingr   r$   rM   rW   r\   r"   r"   r"   r#   <module>   sx    

]
?