
    kh#                         d Z ddlZddl 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y)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y)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           	          |xs h d}|xs t        |df|df|f      }|D ci c]  }|t        |||          c}| _        || _        || _        y c c}w )N>   clsbboxbbox_ignore   )r   r   r   )fillshape)dictinstance_infomax_instancesanchor_labeler)selfinstance_keysinstance_shapesinstance_fillr   r   ks          N/var/www/teggl/fontify/venv/lib/python3.12/site-packages/effdet/data/loader.py__init__zDetectionFastCollate.__init__   sr     &G)G) [T#-1C-IY.[]jkXYa=PQ@R!SSk*, ls   Ac                 x   t        |      }t               }t               }t        j                  |g|d   d   j                  t        j
                        }t        |      D ]=  }||xx   t        j                  ||   d         z  cc<   i }||   d   j                         D ]  \  }}	| j                  j                  |d       }
|
t        j                  |	      j                  t        j                        }	| j                  r|dk(  r8|f|
d   z   }t        j                  ||
d   t        j                        }|||<   n||   }t        |	j                  d   | j                         }|	d| ||d|f<   |dv s|	||<   |dk(  rt#        |	t$        t&        f      rQ|t        |	      f}t#        |	d   t(        t*        j,                  f      rt        j                  nt        j.                  }nC|f}t#        |	t(        t*        j,                  f      rt        j                  nt        j0                  }t        j                  ||      }|||<   n||   }t        j2                  |	|j4                        ||<    | j                  )| j                  j7                  |d   |d   d	
      \  }}}|dk(  rt9        t;        ||            D ]z  \  }\  }}t        j                  |f|j                  z   t        j0                        |d| <   t        j                  |f|j                  z   t        j                        |d| <   | t        j                  |      |d<   t9        t;        ||            D ]  \  }\  }}||d|    |<   ||d|    |<     ||d   |<   @ |r|j=                  |       ||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   Z
&[[*!AuQx{/@/@!AU
z" 5	JAqMU--eAhqk::MN(1+++- "SB $ 2 2 6 6r4 @ ,))"-00u}}0EB**26%/MM'4J$JE,1JJumF>S[`[h[h,iM)6F2J,22JM#&rxx{D4F4F#G79!H~a8m4 013N2. Av%b5$-8%/R$9E5?1r{{G[5\EMMbgbmbmE %/KE5?UBKKDX5YEMM_d_j_jE(-E(G%2r
(.r
',||Bm>Q>Q'RM!$E"SH "".:>:M:M:[:["6*N5,APU ;\ ;W7[-6'0[+1N'O K8B<AKK'MBHH4EKK=I*QC(89=B[['MBHH4EMM>K+aS(9:K
 >C[[=TO$9:#,Sk-J#K ?KAxB;=Oj$45a8<>Ok!$56q9? =J 56q9k5	Jl MM/*6!!    )__name__
__module____qualname____doc__MAX_NUM_INSTANCESr   rN    rO   r   r
   r
      s"      +->"rO   r
   c                   J    e Zd ZeedddfdZd Zd Zed        Z	ed        Z
y	)
PrefetchLoader        pixelr   c                    || _         t        j                  |D cg c]  }|dz  	 c}      j                         j	                  dddd      | _        t        j                  |D cg c]  }|dz  	 c}      j                         j	                  dddd      | _        |dkD  rt        |||      | _        y d | _        y c c}w c c}w )N   r      rX   )probabilitymode	max_count)	loaderr%   r8   cudaviewmeanstdr   random_erasing)r   r`   rc   rd   re_probre_modere_countxs           r   r   zPrefetchLoader.__init__i   s     LL4!8a!c'!89>>@EEaAqQ	<<# 6QS 67<<>CCAq!QOR<"/G']e"fD"&D "9 6s   B?&Cc           
   #     K   t         j                  j                         }d}| j                  D ]  \  }}t         j                  j	                  |      5  |j                  d      }|j                         j                  | j                        j                  | j                        }|j                         D ci c]  \  }}||j                  d       }}}| j                  | j                  ||      }d d d        |sf nd}t         j                  j                         j                  |       |}|} f y c c}}w # 1 sw Y   UxY ww)NT)non_blockingF)r%   ra   Streamr`   streamr3   sub_rc   div_rd   r*   re   current_streamwait_stream)	r   rm   first
next_inputnext_targetr   vinputr?   s	            r   __iter__zPrefetchLoader.__iter__y   s4    ""$'+{{ 	!#J""6* N'__$_?
'--/44TYY?DDTXXN
HSHYHYH[\1q!&&d&";;\\&&2!%!4!4Z!MJN Vm#JJ%%'33F;E F	!" Vm ]N Ns2   AEA(E=E	
!E;AE	EE	Ec                 ,    t        | j                        S N)r$   r`   r   s    r   __len__zPrefetchLoader.__len__   s    4;;rO   c                 .    | j                   j                  S ry   )r`   samplerrz   s    r   r}   zPrefetchLoader.sampler       {{"""rO   c                 .    | j                   j                  S ry   )r`   datasetrz   s    r   r   zPrefetchLoader.dataset   r~   rO   N)rP   rQ   rR   IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STDr   rw   r{   propertyr}   r   rU   rO   r   rW   rW   g   sJ     '$' .  # # # #rO   rW   FTrX   rY   bilinearrc   c           	         t        |t              r|dd  }n|}||}n%|rt        ||||	|
|      }nt        ||||	|
|      }|| _        d }|rA|r4t
        j                  j                  j                  j                  |       }nt        |       }|xs t        |      }t
        j                  j                  j                  | ||d u xr |||||      }|r#|rt        ||
||||      }|S t        ||
|      }|S )N)interpolationuse_prefetcher
fill_colorrc   rd   )r   )r>   shufflenum_workersr}   
pin_memory
collate_fn)rc   rd   rf   rg   rh   )rc   rd   )r0   r1   transforms_coco_traintransforms_coco_eval	transformr%   utilsdatadistributedDistributedSamplerr   r
   
DataLoaderrW   )r   
input_sizer>   is_trainingr   rf   rg   rh   r   r   rc   rd   r   r   pin_memr   transform_fnr   img_sizer   r}   r`   s                         r   create_loaderr      s0   ( *e$bc? !	-+-%I -+-%I "GGkk&&22EEgNG 08GR3>RJ[[((4/K ) F #F3Y`kstF M $F3?FMrO   )rS   torch.utils.datar%   
transformsre   r   effdet.anchorsr   timm.data.distributed_samplerr   osrT   r
   rW   r   r   r   rU   rO   r   <module>r      sq      ) ( C 	 U" U"p2# 2#r  " %LrO   