Team Ai
Apppublic

xdecoder/Instruct-X-Decoder

sourceHugging Faceafl-3.0updated 3y agoView on Hugging Face
163likes
loss.cpython-38.pyc92 linesDownload Raw Back to __pycache__
1U

2E$�c�!�@s�ddlZddlmZddlZddlmmZddlm	Z3ddlmZm
Z
ddlmZe�Zdd�Zdd�Zd	d4�Zdd�Zddd�Zddd�Zdd�Zdd�Zd dd�Zd!dd�Zd"dd�Zdd�ZdS)#�N)�log)�	rearrange�repeat)�SoftTargetCrossEntropycCs5tj��S)N)�torch�distributed�is_initialized�r	r	�//data/arXiv/demo/Demo/xdecoder/language/loss.py�is_dist_initialized
srcCst�rtj��SdS)N�)rrr�get_world_sizer	r	r	r6r
s7r
cCst�rt��SdS)Nr)r�dist�get_rankr	r	r	r8rsrcsPt�dkrL�fdd�tt��D�}tj�|���|tj��<tj|dd���S)Nrcsg|]}t����qSr	)r�9zeros_like��.0�_��xr	r10�11<listcomp>sz#all_gather_grad.<locals>.<listcomp>r��dim)r
�rangerr�12all_gatherr�cat)r�all_xr	rr13�all_gather_grads14rrc	Cs�|t|d�}|t|d�}|jd}|jd}|jd}tt�|�|�d�d�}tt�|�|�d�d�}	t|d�}15t|d�}|16t|���}|t|17���}
tjtj	||||tj18|19jd�t�t
�d��|20j�}|t|d	�ttj||21j|22jd�d23�9}t|d�}tjtj	||||tj24|jd�t�t
�d��|j�}|t|	d�ttj||j|25jd�d
�9}t|d�}|��jdd�}t|||�}t||
|�}d||}|S)z�26    Args:27        image_feat (torch.Tensor): shape [B, L1, C] # B: batch_size, L1: 1, C: 25628        text_feat (torch.Tensor): shape [B, L2, C] # B:batch_size, L2: number of selected nouns, C: 25629 30    Returns:31    zb l c -> b c lrrzb l2 l1 -> b l1 l2zb l1 l2 -> b l2 l1zb l c -> (b l) c)�dtype�device)�num_classeszb l1 l2 -> b l1 1 l2 1zb1 b2 -> b1 1 b2 1 1z"b1 l1 b2 l2 w -> (b1 l1) (w b2 l2)zb l2 l1 -> b l2 1 l1 1zb2 b1 -> b2 1 b1 1 1z"b2 l2 b1 l1 w -> (b2 l2) (w b1 l1)�d��maxg�?)r�shaper�	ones_like�sizer�t�F�one_hot�ones�longrrr
�torr�eye�exp�clamp�soft_cross_entropy)�32image_feat�	text_feat�temperatureZdist_per_imgZ
dist_per_text�batchZimg_len�text_lenZpos_labels_batch_imgZpos_labels_batch_textZimage_xZtext_xZlogits_per_imgZlogits_per_textZlabels_per_imgZlabels_per_text�logit_scale�loss_img�	loss_text�lossr	r	r33�vl_multilabel_contrastive_loss"sL3435363738���39���40r:cCsvt|�}t|�}t�||���}|��jdd�}tj|jd|jd�}t	�41|||�}t	�42||��|�}||dS�Nr!r"r�r�)rr�matmulr'r.r/�aranger$rr(�
cross_entropy�r1r2r3�logitsr6�gt�loss1�loss2r	r	r43�vl_contrastive_loss]srFcCs(t�}|dkr|gSt�|�}tj�|�}t�|��|�}t�|�	�g��44�}dd�t|�D�}t�
||�dd�|D�}t|�}g}	|D]}45|	�tj|fd��46��q�||kr�tj||fd��47�}tj||fdd�}t�
|	|�g}t||	�D]0\}
}|������d|
�}|�t�|��q�|S)	z�48    Run all_gather on arbitrary picklable data (not necessarily tensors)49    Args:50        data: any picklable object51    Returns:52        list[data]: list of data gathered from each rank53    rcSsg|]}t�dg����qS)r)r�54LongTensor�cudarr	r	r55r�sz%all_gather_pickle.<locals>.<listcomp>cSsg|]}t|����qSr	)�int�item)rr&r	r	r56r�s)r&rrN)r
�pickle�dumpsr�ByteStorage�from_buffer�57ByteTensorr,rG�numelrHrrrr#�appendr�zip�cpu�numpy�tobytes�loads)�datar�58world_size�buffer�storage�tensor�59local_size�	size_list�max_size�tensor_listr�padding�	data_listr&r	r	r60�all_gather_pickleps.61rbcsVt�dkrN|j�t|����}�fdd�|D�}||tj��<tj|dd�}n|}|S)Nrcsg|]}|����qSr	)r,)rrr<r	r62r�sz.all_gather_arbitary_tensor.<locals>.<listcomp>rr)r
rrbrSrrrr)r[Ztensor_batchr	r<r63�all_gather_arbitary_tensor�s64rccCsvt|�}t|�}t�||���}|��jdd�}tj|jd|jd�}t	�65|||�}t	�66||��|�}||dSr;)rcrr>r'r.r/r?r$rr(r@rAr	r	r67�ql_contrastive_loss�srdcCs(t�||���}|��jdd�|}|S)Nr!r")rr>r'r.r/)r1r2r3rBr	r	r68�
vl_similarity�srecs�t|�}t���t|�j�}t�|��t�����}tj|jdt	|�f�jd�}����t�69��fdd�|D��}t��D]\}}	d|||�|	�<q|t�
||���}70|71|��jdd�}72t|73|�}t|74��|��|��jdd	d75��}d|d|}
|
S)
Nrr<csg|]}���|��qSr	)�index)r�txt�r2Z
text_hash_allr	r76r�sz-ql_multi_contrastive_loss.<locals>.<listcomp>rr!r"�����T)�keepdimgffffff�?g333333�?)rcrbrrr�unique�tolist�zerosr$�len�stack�	enumeraterfr>r'r.r/r0�sum)r1r2Z	text_hashr3Ztext_hash_batchZtext_hash_all_uniquerCZtext_feat_unique�idxrgrBr7r8r9r	rhr77�ql_multi_contrastive_loss�s 7879$rscCs�t|���}t|���}||jddd�d}||jddd�d}|j}t�||���}|��jdd�}tj	|j80d|jd�}	t�
|||	�}81t�
||��|	�}|82|d	S)83NriT)rrjgH�����z>r!r"rr<r=)r�84contiguous�normr6rr>r'r.r/r?r$rr(r@)Zimage_feat_inpZ
text_feat_inp�lang_enc�trainingr1r2r3rBr6rCrDrEr	r	r85�!image_text_contrastive_loss_queue�srx)r)r)r)r)r)rK�	distutilsrrZtorch.nn.functional�nn�86functionalr(Ztorch.distributedrrZeinopsrrZ	timm.lossrr0rr
rrr:rFrbrcrdrersrxr	r	r	r87�<module>s&88;89*90
9192