a *fv@sddlZddlZddlmZmZmZmZddlZddlm Z ddlm Z ddlm Z ddlmZddlmZddlmZdd lmZmZmZd d ZGd d d ZdS)N)AnyDictListTuple)MetadataCatalog)detection_utils) transforms)ROIAlign)BoxMode) PathManager)DensePoseDataRelative DensePoseListDensePoseTransformDatacCsNtt}t||}|rJtj|jjddd}| || dt ||S)NFchoice)expand sample_stylez2DensePose-specific augmentation used in training: ) logging getLogger__name__utilsbuild_augmentationTRandomRotationINPUTROTATION_ANGLESappendinfostr)cfgis_trainloggerresultZrandom_rotationr"J/data1/chongzheng_p23/Projects/CatVTON-hf/densepose/data/dataset_mapper.pyrs    rc@sNeZdZdZd ddZddZddZeee e fe e e fd d d Z d S) DatasetMapperzA A customized version of `detectron2.data.DatasetMapper` TcCst|||_|jj|_|jjp.|jjo.|jjj |_ |jj |_ |jj|_ |jjrVJd|j rr|rrt|jj|_nd|_|j rdd|jj|jjD}t|dksJt|d}t||_||_dS)Nznot supported yetcSsg|]}t|jqSr")rgetZdensepose_transform_src).0dsr"r"r# ;sz*DatasetMapper.__init__..r)r augmentationrFORMAT img_formatMODELMASK_ON DENSEPOSE_ONROI_DENSEPOSE_HEADCOARSE_SEGM_TRAINED_BY_MASKSmask_on KEYPOINT_ON keypoint_on densepose_onLOAD_PROPOSALSrcreate_keypoint_hflip_indicesDATASETSTRAINkeypoint_hflip_indicesTESTlenr get_local_pathrloaddensepose_transform_datar)selfrrZdensepose_transform_srcsZdensepose_transform_data_fpathr"r"r#__init__&s,     zDatasetMapper.__init__cs<t|}tj|djd}t||tj|\}|j ddt | ddd d|d<js~|d d|S|d D](}js|d djs|d dqfd d |d D}jrވ|tj|dd}dd |D}|r&tdd|Ds&t||j|_||j|d<|S)z Args: dataset_dict (dict): Metadata of one image, in Detectron2 Dataset format. Returns: dict: a format that builtin models in detectron2 accept file_name)formatNrfloat32image annotations segmentation keypointsc s8g|]0}|dddkrtj|jdqS)iscrowdr)r9)r%_transform_denseposertransform_instance_annotationsr9r&obj image_shaper?rr"r#r(hs z*DatasetMapper.__call__..bitmask) mask_formatcSsg|]}|dqS) densepose)r%rMr"r"r#r(wcss|]}|duVqdSNr"r&vr"r"r# xrTz)DatasetMapper.__call__.. instances)copydeepcopyr read_imager+check_image_sizerapply_transform_gensr)shapetorch as_tensor transposeastyperpopr1r3$_add_densepose_masks_as_segmentationannotations_to_instancesallr gt_boxes gt_denseposenonempty)r? dataset_dictrFannoannosrYZdensepose_annotationsr"rOr#__call__Ls6       zDatasetMapper.__call__cCsV|js |St|\}}|r@t|dd}|||j||d<nt|d|d<|S)NT)cleanuprS)r4r Zvalidate_annotationZapply_transformr>Zcleanup_annotation)r? annotationris_validZreason_not_validZdensepose_datar"r"r#rKs   z"DatasetMapper._transform_densepose)rGimage_shape_hwcCs|D]}d|vsd|vrqt|dj}d||djdk<|j\}}tjdd|d|dftjd}ddt|d|d tjD\}} } } t | | | |fd dd d  |j ddg|jR| } tj |d tji} | | | | || f<| dk|d<qdS)NrSrHrDr)dtypecss|]}|VqdSrU)itemrVr"r"r#rXszEDatasetMapper._add_densepose_masks_as_segmentation..bbox bbox_modeg?T)alignedrsg?)r` zeros_likesegmr_tensorrEr convertXYXY_ABSr forwardviewsqueezezeros)r?rGrrrNZsegm_dpZsegm_hZsegm_wZ bbox_segm_dpx0y0x1y1Z segm_alignedZ image_maskr"r"r#res"  z2DatasetMapper._add_densepose_masks_as_segmentationN)T)r __module__ __qualname____doc__r@rnrKrrrrrintrer"r"r"r#r$!s  &4r$)rZrtypingrrrrr`Zdetectron2.datarrrrrZdetectron2.layersr detectron2.structuresr detectron2.utils.file_ior Zdensepose.structuresr r rrr$r"r"r"r#s