
    Ng<              O       ~   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZ ddlZddlZddlZddlmZmZ dd	lmZmZ dd
lmZmZ ddlmZ ddlmZ ddlm Z   ej!        e"          Z#d Z$d Z% G d d          Z&dIdZ'dddddddddddddddddddeeddddddddej(         ej)        d          dddddf$deeef         dee*ee*e*f         ee*e*e*f         f         de*de+d e+d!e,d"e-d#e*d$e+d%ee-         d&eee,e,f                  d'eee,e,f                  d(e,d)e,d*e,d+ee,         d,e,d-e,d.ee-         d/e*d0e*d1e-d2ee,d3f         d4ee,d3f         d5e*d6e+d7ee,         d8ee-         d9ee*         d:ee
         d;e+d<e+d=ej.        d>ej)        d?e+d@e+dAe+dBe-dCe+fNdDZ/ G dE dFej0        j1        j2                  Z3 G dG dHe4          Z5dS )Ja   Loader Factory, Fast Collate, CUDA Prefetcher

Prefetcher and Fast Collate inspired by NVIDIA APEX example at
https://github.com/NVIDIA/apex/commit/d5e2bb4bdeedd27b1dfaf5bb2b24d6c000dee9be#diff-cf86c282ff7fba81fad27a559379d5bf

Hacked together by / Copyright 2019, Ross Wightman
    N)suppress)partial)repeat)CallableOptionalTupleUnion   )IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)IterableImageDatasetImageDataset)OrderedDistributedSamplerRepeatAugSampler)RandomErasing)FastCollateMixup)create_transformc           	      6   t          | d         t                    sJ t          |           }t          | d         d         t                    rt          | d         d                   }||z  }t          j        |t          j                  }t          j        |g| d         d         d         j        R t          j                  }t          |          D ]}t          | |         d                   |k    sJ t          |          D ]S}| |         d         ||||z  z   <   ||||z  z   xx         t          j	        | |         d         |                   z  cc<   T||fS t          | d         d         t          j                  rt          j        d | D             t          j                  }t          |          |k    sJ t          j        |g| d         d         j        R t          j                  }t          |          D ]0}||xx         t          j	        | |         d                   z  cc<   1||fS t          | d         d         t          j                  rt          j        d | D             t          j                  }t          |          |k    sJ t          j        |g| d         d         j        R t          j                  }t          |          D ])}||                             | |         d                    *||fS J )zd A fast collation function optimized for uint8 images (np array or torch) and int64 targets (labels)r   )dtyper
   c                     g | ]
}|d          S r
    .0bs     L/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/data/loader.py
<listcomp>z fast_collate.<locals>.<listcomp>/       444!444    c                     g | ]
}|d          S r   r   r   s     r   r   z fast_collate.<locals>.<listcomp>6   r   r   )
isinstancetuplelentorchzerosint64shapeuint8range
from_numpynpndarraytensorTensorcopy_)batch
batch_sizeinner_tuple_sizeflattened_batch_sizetargetsr-   ijs           r   fast_collater7      s   eAh&&&&&UJ%(1+u%%  uQx{++),<<+2%+FFF2JU1Xa[^5IJJRWR]^^^z"" 	O 	OAuQx{##'77777+,, O O.3AhqkA
N*+q1z>)***e.>uQx{1~.N.NN****O w	E!HQK	,	, ,44e444EKHHH7||z))))j=58A;+<==U[QQQz"" 	7 	7A1III)%(1+666IIIIw	E!HQK	.	. ,44e444EKHHH7||z))))j=58A;+<==U[QQQz"" 	) 	)A1IOOE!HQK((((wr   c                 p   t          | t          t          f          st          t          | |                    } n{t	          |           |k    rKt          j        |                                           }|f|z  } t          	                    d|  d           nt	          |           |k    s
J d            | S )Nz@Pretrained mean/std different shape than model, using avg value .z-normalization stats must match image channels)
r!   r"   listr   r#   r+   meanitem_loggerwarning)xnx_means      r   adapt_to_chsrB   @   s    a%'' L&A,,	Q1""IM_[\___````1vv{{{K{{{Hr   c            
           e Zd Zeed ej        d          ej        dddddf
dZd	 Z	d
 Z
ed             Zed             Zed             Zej        d             ZdS )PrefetchLoader   cudaF        constr
   r   c                 &   t          ||          }t          ||          }d|ddf}|| _        || _        |rt          j        }|| _        t          j        d |D             ||                              |          | _        t          j        d |D             ||                              |          | _	        |dk    rt          ||	|
||          | _        nd | _        t          j                                        o
|j        dk    | _        d S )Nr
   c                     g | ]}|d z  S    r   r   r?   s     r   r   z+PrefetchLoader.__init__.<locals>.<listcomp>g   s    ###QW###r   )devicer   c                     g | ]}|d z  S rK   r   rM   s     r   r   z+PrefetchLoader.__init__.<locals>.<listcomp>i   s    """QW"""r   rG   )probabilitymode	max_count
num_splitsrN   rF   )rB   loaderrN   r$   float16	img_dtyper-   viewr;   stdr   random_erasingrF   is_availabletypeis_cuda)selfrT   r;   rX   channelsrN   rV   fp16re_probre_modere_countre_num_splitsnormalization_shapes                r   __init__zPrefetchLoader.__init__N   s8    D(++3)) (Aq1 	&I"L##d###F)E E EEITJ]E^E^ 		<""c"""6D D DDHDI\D]D] 	R<<"/#"(# # #D #'Dz..00JV[F5Jr   c              #     K   d}| j         r?t          j                                        }t	          t          j        j        |          }n	d }t          }| j        D ]\  }} |            5  |                    | j	        d          }|                    | j	        d          }|                    | j
                                      | j                                      | j                  }| j        |                     |          }d d d            n# 1 swxY w Y   |s||fV  nd}|1t          j                                                            |           |}|}
||fV  d S )NT)stream)rN   non_blockingF)r\   r$   rF   Streamr   rg   r   rT   torN   rV   sub_r;   div_rX   rY   current_streamwait_stream)r]   firstrg   stream_context
next_inputnext_targetinputtargets           r   __iter__zPrefetchLoader.__iter__v   s     < 	&Z&&((F$UZ%6vFFFNNF%N'+{ 	! 	!#J!! A A']]$+D]QQ
)nnDKdnSS']]4>::??	JJOOPTPXYY
&2!%!4!4Z!@!@JA A A A A A A A A A A A A A A  Vm####!
))++77???E FFVms   +BDD	D	c                 *    t          | j                  S N)r#   rT   r]   s    r   __len__zPrefetchLoader.__len__   s    4;r   c                     | j         j        S rw   )rT   samplerrx   s    r   r{   zPrefetchLoader.sampler       {""r   c                     | j         j        S rw   )rT   datasetrx   s    r   r~   zPrefetchLoader.dataset   r|   r   c                 f    t          | j        j        t                    r| j        j        j        S dS )NFr!   rT   
collate_fnr   mixup_enabledrx   s    r   r   zPrefetchLoader.mixup_enabled   s-    dk,.>?? 	;)775r   c                 j    t          | j        j        t                    r|| j        j        _        d S d S rw   r   )r]   r?   s     r   r   zPrefetchLoader.mixup_enabled   s7    dk,.>?? 	534DK"000	5 	5r   N)__name__
__module____qualname__r   r   r$   rN   float32re   ru   ry   propertyr{   r~   r   setterr   r   r   rD   rD   L   s        
 '$5<''m&K &K &K &KP  >      # # X# # # X#   X 5 5 5 5 5r   rD   allc                    t           j        j                                        }|j        | k    sJ t          |t                    rW ||          }t          j        |           t          j	        |           t          j                            |dz             d S |dv sJ |dk    r)t          j                            |j        dz             d S d S )Nl    )r   partr   )r$   utilsdataget_worker_infoidr!   r   randomseedmanual_seedr+   )	worker_idworker_seedingworker_infor   s       r   _worker_initr      s    +"2244K>Y&&&&.(++ 
=~k**D$
	t{+,,,,,0000 U""INN;+{;<<<<< #"r   FrG   rH   g      ?g?bilinearrF   Tr~   
input_sizer1   is_trainingno_augr`   ra   rb   re_splittrain_crop_modescaleratiohflipvflipcolor_jittercolor_jitter_probgrayscale_probgaussian_blur_probauto_augmentnum_aug_repeatsnum_aug_splitsinterpolationr;   .rX   num_workersdistributedcrop_pct	crop_modecrop_border_pixelsr   
pin_memoryr_   rV   rN   use_prefetcheruse_multi_epochs_loaderpersistent_workersr   tf_preprocessingc'                 B   d}'|r|pd}'t          |fi d|d|d|	d|
d|d|d	|d
|d|d|d|d|d|d|d|d|d|d|d|d|d|d|'d|&d|"d|dk    | _        t          | t                    r|                     |           d}(|rtt          | t
          j        j        j                  sP|r>|rt          | |          }(nJt
          j        j        j
                            |           }(n t          |           }(n|dk    s
J d            |$|"rt          nt
          j        j        j        j        }t
          j        j        j        })|#rt"          })t%          |t          | t
          j        j        j                   o|(du o|||(|||t'          t(          |%           |$!	  	        }*	  |)| fi |*}+n5# t*          $ r(},|*                    d"            |)| fi |*}+Y d},~,nd},~,ww xY w|"r(|r|s|nd#}-t/          |+|||d         |!|| |-|||'$          }+|+S )%a
  

    Args:
        dataset: The image dataset to load.
        input_size: Target input size (channels, height, width) tuple or size scalar.
        batch_size: Number of samples in a batch.
        is_training: Return training (random) transforms.
        no_aug: Disable augmentation for training (useful for debug).
        re_prob: Random erasing probability.
        re_mode: Random erasing fill mode.
        re_count: Number of random erasing regions.
        re_split: Control split of random erasing across batch size.
        scale: Random resize scale range (crop area, < 1.0 => zoom in).
        ratio: Random aspect ratio range (crop ratio for RRC, ratio adjustment factor for RKR).
        hflip: Horizontal flip probability.
        vflip: Vertical flip probability.
        color_jitter: Random color jitter component factors (brightness, contrast, saturation, hue).
            Scalar is applied as (scalar,) * 3 (no hue).
        color_jitter_prob: Apply color jitter with this probability if not None (for SimlCLR-like aug
        grayscale_prob: Probability of converting image to grayscale (for SimCLR-like aug).
        gaussian_blur_prob: Probability of applying gaussian blur (for SimCLR-like aug).
        auto_augment: Auto augment configuration string (see auto_augment.py).
        num_aug_repeats: Enable special sampler to repeat same augmentation across distributed GPUs.
        num_aug_splits: Enable mode where augmentations can be split across the batch.
        interpolation: Image interpolation mode.
        mean: Image normalization mean.
        std: Image normalization standard deviation.
        num_workers: Num worker processes per DataLoader.
        distributed: Enable dataloading for distributed training.
        crop_pct: Inference crop percentage (output size / resize size).
        crop_mode: Inference crop mode. One of ['squash', 'border', 'center']. Defaults to 'center' when None.
        crop_border_pixels: Inference crop border of specified # pixels around edge of original image.
        collate_fn: Override default collate_fn.
        pin_memory: Pin memory for device transfer.
        fp16: Deprecated argument for half-precision input dtype. Use img_dtype.
        img_dtype: Data type for input image.
        device: Device to transfer inputs and targets to.
        use_prefetcher: Use efficient pre-fetcher to load samples onto device.
        use_multi_epochs_loader:
        persistent_workers: Enable persistent worker processes.
        worker_seeding: Control worker random seeding at init.
        tf_preprocessing: Use TF 1.0 inference preprocessing for testing model ports.

    Returns:
        DataLoader
    r      r   r   r   r   r   r   r   r   r   r   r   r   r   r;   rX   r   r   r   r`   ra   rb   rc   r   r   separate)r   N)num_repeatszORepeatAugment not currently supported in non-distributed or IterableDataset use)r   )	r1   shuffler   r{   r   r   	drop_lastworker_init_fnr   r   rG   )
r;   rX   r^   rN   r_   rV   r`   ra   rb   rc   )r   	transformr!   r   set_loader_cfgr$   r   r   IterableDatasetr   r   DistributedSamplerr   r7   
dataloaderdefault_collate
DataLoaderMultiEpochsDataLoaderdictr   r   	TypeErrorpoprD   ).r~   r   r1   r   r   r`   ra   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   rX   r   r   r   r   r   r   r   r_   rV   rN   r   r   r   r   r   rc   r{   loader_classloader_argsrT   eprefetch_re_probs.                                                 r   create_loaderr      s   n M ,&+!(  K v (	
 e e e e "\ ,+ &~ .- "\ $m T  C!" #$ )%& .-'( )* +, -. $m/0 *)12 &~34  !##5G: '/00 8 	;777G w:gu{/?/OPP w 	9 S*7PPP+*6II'RR 088GG!###%v###%3d\\9I9T9d
;#.L -,w(8(HIIImgY]ombm|NKKK-
 
 
K6g5555 6 6 6,---g55556  
&1H&H77b]$'
 
 
 Ms   6	G   
G2
G--G2c                   *     e Zd Z fdZd Zd Z xZS )r   c                     t                      j        |i | d| _        | j        t	          | j                  | _        nt	          | j                  | _        d| _        t                                                      | _        d S )NFT)superre   _DataLoader__initializedbatch_sampler_RepeatSamplerr{   ru   iterator)r]   argskwargs	__class__s      r   re   zMultiEpochsDataLoader.__init__t  sy    $)&)))(-%%)$,77DLL!/0B!C!CD(,%((**r   c                 j    | j         t          | j                  nt          | j         j                  S rw   )r   r#   r{   rx   s    r   ry   zMultiEpochsDataLoader.__len__~  s-    $($6$>s4<   CHZHbDcDccr   c              #   t   K   t          t          |                     D ]}t          | j                  V  d S rw   )r)   r#   nextr   )r]   r5   s     r   ru   zMultiEpochsDataLoader.__iter__  sF      s4yy!! 	& 	&At}%%%%%%	& 	&r   )r   r   r   re   ry   ru   __classcell__)r   s   @r   r   r   r  sY        + + + + +d d d& & & & & & &r   r   c                       e Zd ZdZd Zd ZdS )r   zH Sampler that repeats forever.

    Args:
        sampler (Sampler)
    c                     || _         d S rw   )r{   )r]   r{   s     r   re   z_RepeatSampler.__init__  s    r   c              #   >   K   	 t          | j                  E d {V  rw   )iterr{   rx   s    r   ru   z_RepeatSampler.__iter__  s2      	*DL)))))))))	*r   N)r   r   r   __doc__re   ru   r   r   r   r   r     s<           * * * * *r   r   )r   )6r   loggingr   
contextlibr   	functoolsr   	itertoolsr   typingr   r   r   r	   r$   torch.utils.datanumpyr+   	constantsr   r   r~   r   r   distributed_samplerr   r   rY   r   mixupr   transforms_factoryr   	getLoggerr   r=   r7   rB   rD   r   r   rN   intboolfloatstrr   r   r   r   r   r   objectr   r   r   r   <module>r      s                        3 3 3 3 3 3 3 3 3 3 3 3          B B B B B B B B 7 7 7 7 7 7 7 7 L L L L L L L L ) ) ) ) ) ) # # # # # # 0 0 0 0 0 0
'
H
%
%     F	 	 	^5 ^5 ^5 ^5 ^5 ^5 ^5 ^5B= = = =( ")-/3/3!-1 "$&&* '"7!5!$(#',0)- !&+u|F33#(-#'#!&Or r|%99:r#uS#Xc3m0DDEr r 	r
 r r r r r "#r eUl+,r eUl+,r r r r  $E?!r" #r$ "%r& sm'r( )r* +r, -r. E3J/r0 5#:1r2 3r4 5r6 5/7r8 C=9r: %SM;r< X&=r> ?r@ ArB ;CrD ErF GrH "&IrJ !KrL MrN Or r r rj& & & & &EK,7 & & &(* * * * *V * * * * *r   