
    Ng#                         d Z ddlZddlT ddlmZ ddlmZ ddlm	Z	 ddl
Z
dZ G d	 d
          Z G d d          ZdddddddeeddddddfdZdS )zT Object detection loader/collate

Hacked together by / Copyright 2020 Ross Wightman
    N   )*)RandomErasing)AnchorLabeler)OrderedDistributedSamplerd   c                   *    e Zd ZdZdddedfdZd ZdS )DetectionFastCollatea   A detection specific, optimized collate function w/ a bit of state.

    Optionally performs anchor labelling. Doing this here offloads some work from the
    GPU and the main training process thread and increases the load on the dataloader
    threads.

    Nc                     |ph d}pt          |df|df|f          fd|D             | _        || _        || _        d S )N>   clsbboxbbox_ignore   )r   r   r   c                 @    i | ]}|t          |                    S ))fillshape)dict).0kinstance_fillinstance_shapess     N/var/www/html/ai-engine/env/lib/python3.11/site-packages/effdet/data/loader.py
<dictcomp>z1DetectionFastCollate.__init__.<locals>.<dictcomp>"   s/    kkkXYa=PQ@R!S!S!Skkk    )r   instance_infomax_instancesanchor_labeler)selfinstance_keysr   r   r   r   s     ``  r   __init__zDetectionFastCollate.__init__   s     &G)G)G)G) [T#-1C-IY.[ .[ .[kkkkk]jkkk*,r   c                    t          |          }t                      }t                      }t          j        |g|d         d         j        R t          j                  }t          |          D ]H}||xx         t          j        ||         d                   z  cc<   i }||         d                                         D ]\  }}	| j	        
                    |d           }
|
t          j        |	                              t          j                  }	| j        y|dk    r9|f|
d         z   }t          j        ||
d         t          j                  }|||<   n||         }t          |	j        d         | j                  }|	d|         ||d|f<   |dv r|	||<   |dk    rt#          |	t$          t&          f          rQ|t          |	          f}t#          |	d         t(          t*          j        f          rt          j        nt          j        }n<|f}t#          |	t(          t*          j        f          rt          j        nt          j        }t          j        ||          }|||<   n||         }t          j        |	|j                  ||<   | j        | j                            |d         |d         d	
          \  }}}|dk    rt9          t;          ||                    D ]f\  }\  }}t          j        |f|j        z   t          j                  |d| <   t          j        |f|j        z   t          j                  |d| <   gt          j        |          |d<   t9          t;          ||                    D ]$\  }\  }}||d|          |<   ||d|          |<   %||d         |<   J|r|                    |           ||fS )Nr   )dtyper   r   r   )r   r   r   r   F)filter_valid
label_cls_label_bbox_label_num_positives)lenr   torchzerosr   uint8range
from_numpyitemsr   gettofloat32r   fullminr   
isinstancetuplelistfloatnpfloatingint32int64tensorr#   label_anchors	enumeratezipupdate)r   batch
batch_sizetargetlabeler_outputs
img_tensorilabeler_inputstktvr   r   target_tensornum_elemr#   cls_targetsbox_targetsnum_positivesjctbts                        r   __call__zDetectionFastCollate.__call__&   s   ZZ
&&[*!AuQx{/@!A!AUUU
z"" 5	J 5	JAqMMMU-eAhqk:::MMMN(1+++-- "S "SB $ 2 6 6r4 @ @ ,)"--00u}0EEB*266%/MM'4J$JE,1JumF>S[`[h,i,i,iM)6F2JJ,22JM#&rx{D4F#G#G79!H*~a8m44 0013N2. Avv%b5$-88 k%/R$9E5?1r{G[5\5\$mEMMbgbmEE %/KE5?UBKDX5Y5Y$jEMM_d_jE(-E(G(G(G%2r

(.r
',|Bm>Q'R'R'RM!$$".:>:M:[:["6*N5,APU ;\ ;W ;W7[-66'0[+1N1N'O'O K K8B<AK'MBH4EK=I =I =I(8Q(8(89=B['MBH4EM>K >K >K(9a(9(9::=B[=T=TO$9:#,Sk-J-J#K#K ? ?KAxB;=O$4$4$45a8<>O$5!$5$56q99<I 56q9 	+MM/***6!!r   )__name__
__module____qualname____doc__MAX_NUM_INSTANCESr!   rR    r   r   r
   r
      sR           +- - - ->" >" >" >" >"r   r
   c                   X    e Zd ZeedddfdZd Zd Zed             Z	ed             Z
d	S )
PrefetchLoader        pixelr   c                    || _         t          j        d |D                                                                           dddd          | _        t          j        d |D                                                                           dddd          | _        |dk    rt          |||          | _        d S d | _        d S )Nc                     g | ]}|d z  S    rX   r   xs     r   
<listcomp>z+PrefetchLoader.__init__.<locals>.<listcomp>r   s    !8!8!8a!c'!8!8!8r   r      c                     g | ]}|d z  S r_   rX   ra   s     r   rc   z+PrefetchLoader.__init__.<locals>.<listcomp>s   s     6 6 6QS 6 6 6r   r[   )probabilitymode	max_count)	loaderr)   r<   cudaviewmeanstdr   random_erasing)r   ri   rl   rm   re_probre_modere_counts          r   r!   zPrefetchLoader.__init__i   s     L!8!84!8!8!899>>@@EEaAqQQ	< 6 6# 6 6 677<<>>CCAq!QOOR<<"/G']e"f"f"fD"&Dr   c              #     K   t           j                                        }d}| j        D ]\  }}t           j                            |          5  |                    d          }|                                                    | j                                      | j	                  }d |
                                D             }| j        |                     ||          }d d d            n# 1 swxY w Y   |s||fV  nd}t           j                                                            |           |}|}||fV  d S )NTnon_blockingc                 B    i | ]\  }}||                     d           S )Trs   )rj   )r   r   vs      r   r   z+PrefetchLoader.__iter__.<locals>.<dictcomp>   s,    \\\1q!&&d&";";\\\r   F)r)   rj   Streamri   streamr7   sub_rl   div_rm   r.   rn   current_streamwait_stream)r   rx   first
next_inputnext_targetinputrC   s          r   __iter__zPrefetchLoader.__iter__y   s     ""$$'+{ 	! 	!#J""6** N N'__$_??
'--//44TY??DDTXNN
\\HYHYH[H[\\\&2!%!4!4Z!M!MJN N N N N N N N N N N N N N N  Vm####J%%''33F;;;E FFVms   BC11C5	8C5	c                 *    t          | j                  S N)r(   ri   r   s    r   __len__zPrefetchLoader.__len__   s    4;r   c                     | j         j        S r   )ri   samplerr   s    r   r   zPrefetchLoader.sampler       {""r   c                     | j         j        S r   )ri   datasetr   s    r   r   zPrefetchLoader.dataset   r   r   N)rS   rT   rU   IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STDr!   r   r   propertyr   r   rX   r   r   rZ   rZ   g   s         '$' ' ' '   .      # # X# # # X# # #r   rZ   FTr[   r\   bilinearrl   c           	         t          |t                    r|dd          }n|}||}n-|rt          ||||	|
|          }nt          ||||	|
|          }|| _        d }|r;|r*t
          j        j        j        	                    |           }nt          |           }|pt          |          }t
          j        j                            | ||d u o|||||          }|r*|rt          ||
||||          }nt          ||
|          }|S )N)interpolationuse_prefetcher
fill_colorrl   rm   )r   )rB   shufflenum_workersr   
pin_memory
collate_fn)rl   rm   ro   rp   rq   )rl   rm   )r4   r5   transforms_coco_traintransforms_coco_eval	transformr)   utilsdatadistributedDistributedSamplerr   r
   
DataLoaderrZ   )r   
input_sizerB   is_trainingr   ro   rp   rq   r   r   rl   rm   r   r   pin_memr   transform_fnr   img_sizer   r   ri   s                         r   create_loaderr      sz   ( *e$$ bcc? !		 	-+-%  II -+-%  I "GG 9 	9k&2EEgNNGG 088GR3>RRRJ[((4/K )  F  @ 	@#F3Y`kstttFF#F3???FMr   )rV   torch.utils.datar)   
transformsrn   r   effdet.anchorsr   timm.data.distributed_samplerr   osrW   r
   rZ   r   r   r   rX   r   r   <module>r      s            ) ) ) ) ) ) ( ( ( ( ( ( C C C C C C 				 U" U" U" U" U" U" U" U"p2# 2# 2# 2# 2# 2# 2# 2#r  " %L L L L L Lr   