o e[ @sJddlZddlZddlmZddlmZddlmZGdddejZdS)N)nn) PathManager)normalize_embeddingsc sleZdZdZ ddedededeffdd Zed d Z d ej fd d Z ede fddZ ZS)VertexFeatureEmbeddera Class responsible for embedding vertex features. Mapping from feature space to the embedding space is a tensor of size [K, D], where K = number of dimensions in the feature space D = number of dimensions in the embedding space Vertex features is a tensor of size [N, K], where N = number of vertices K = number of dimensions in the feature space Vertex embeddings are computed as F * E = tensor of size [N, D] F num_vertices feature_dim embed_dimtrain_featurescs\tt||rtt|||_n |dt||tt|||_ | dS)a Initialize embedder, set random embeddings Args: num_vertices (int): number of vertices to embed feature_dim (int): number of dimensions in the feature space embed_dim (int): number of dimensions in the embedding space train_features (bool): determines whether vertex features should be trained (default: False) featuresN) superr__init__r ParametertorchTensorr register_buffer embeddingsreset_parameters)selfrrr r  __class__b/home/jovyan/fileviewer/workspace/yisol/IDM-VTON/densepose/modeling/cse/vertex_feature_embedder.pyr s   zVertexFeatureEmbedder.__init__cCs|j|jdS)N)r zero_rrrrrr-s z&VertexFeatureEmbedder.reset_parametersreturncCstt|j|jS)z Produce vertex embeddings, a tensor of shape [N, D] where: N = number of vertices D = number of dimensions in the embedding space Return: Full vertex embeddings, a tensor of shape [N, D] N)rrmmr rrrrrforward2s zVertexFeatureEmbedder.forwardfpathcCs|t|d.}t|}dD]}||vr+t||t||j t||j dqWddS1s7wYdS)zk Load data from a file Args: fpath (str): file path to load data from rb)r r)deviceN) ropenpickleloadgetattrcopy_rtensorfloattor )rrhFiledatanamerrrr#=s   "zVertexFeatureEmbedder.load)F)__name__ __module__ __qualname____doc__intboolr rno_gradrrrstrr# __classcell__rrrrr s"   r) r"rrdetectron2.utils.file_iorutilsrModulerrrrrs