o
    ۷i                     @   sp  U d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	d dl
Zd dlm  m  mZ d dlm  mZ d dlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ d dlmZ ed ee Z!e  Z"G dd dZ#da$e#e%d< 	ddejej&B e'B de'de'de(fddZ)	ddejej&B e'B de'e*e' B de'deee(e+f ed f fddZ,dS )    N)Image)tqdm)TupleUnion   )_IMAGE_EXTENSIONS)get_metrics_verbose   )current_platform)disable_print)init_loggerignorec                   @   sT   e Zd Ze rejnddfdefddZe	 de
j
ejB dedefd	d
ZdS )ImageRewardScorecpuNimagereward_model_pathc              
   C   s   || _ |d u rtjdd }tj|d| _tj|d| _|d ur2tj	| j|| jd
| j | _n
t	d
| j | _ttjdtjjdtdt tjtjdd	td
dg| _d S )NIMAGEREWARD_MODEL_DIRzmed_config.jsonzImageReward.pt)download_root
med_configzImageReward-v1.0   )interpolationT)scale)g3<4'?gwgM?gy{ ?)gB91?gwt.?g	U?)deviceosenvirongetpathjoinr   imagereward_pathRMloadtoimagereward_modelTComposeResizeInterpolationModeBICUBIC
CenterCropToImageToDtypetorchfloat32	Normalizereward_transform)selfr   r    r/   T/home/ubuntu/vllm_env/lib/python3.10/site-packages/cache_dit/metrics/image_reward.py__init__   s:   
zImageRewardScore.__init__imgpromptreturnc                 C   s   t |tjr|d}nt |tjrt|d}nt|d}t 7 t	
|d| j}| |}| jjj|gddddd| j}| j|j|j|}W d    | S 1 saw   Y  | S )NRGBr   
max_lengthTi   pt)padding
truncationr6   return_tensors)
isinstancer   convertnpndarray	fromarrayopenr*   no_gradTFpil_to_tensor	unsqueezer    r   r-   r!   blip	tokenizer
score_gard	input_idsattention_maskitem)r.   r2   r3   img_pil
img_tensor
img_rewardinputsscorer/   r/   r0   compute_reward_scoreF   s0   



z%ImageRewardScore.compute_reward_score)__name__
__module____qualname__r
   is_accelerator_availabledevice_typestrr1   r*   rA   r   r=   r>   floatrP   r/   r/   r/   r0   r      s    
'
r   image_reward_score_instancer2   r3   r   r4   c                 C   sP   t d u rt  t|da W d    n1 sw   Y  t d us"J t | |S )Nr   )rX   r   r   rP   )r2   r3   r   r/   r/   r0   compute_reward_score_imge   s   rZ   img_dirpromptsNNc                    sF  t j rt|tst j|st ||ddfS dd }t   fddt	D }dd |D }t
||d}t j|rd	 t|d	d
d}dd | D }W d    n1 s[w   Y  | }tt|t|}|d | }|d | }g }tt|||t  dD ]\}	}
|t|	|
|d q|dkrt||fS dS )NrY   r   c                 S   s"   t d| }|rt|dS | S )Nz	(\d+)\D*$r   )researchintgroup)filenamematchr/   r/   r0   natural_sort_key   s   z.compute_reward_score.<locals>.natural_sort_keyc                    s&   g | ]}  d |D ]}|qqS )z*.{})rglobformat).0extfiler[   r/   r0   
<listcomp>   s   & z(compute_reward_score.<locals>.<listcomp>c                 S      g | ]}|  qS r/   )as_posix)rg   ri   r/   r/   r0   rk          )keyrzutf-8)encodingc                 S   rl   r/   )strip)rg   liner/   r/   r0   rk      rn   )totaldisabler   r]   )r   r   isdirr;   listisfilerZ   pathlibPathr   sortedr@   	readlinescopyminlenr   zipr   appendr=   mean)r[   r\   r   rd   	img_filesfprompts_load	vaild_lenreward_scoresimg_filer3   r/   rj   r0   rP   t   sT   


rP   )N)-r   r^   ry   warningsnumpyr=   PILr   r   r*   ImageRewardr   $torchvision.transforms.v2.functional
transformsv2
functionalrB   torchvision.transforms.v2r"   typingr   r   configr   r   	platformsr
   utilsr   cache_dit.loggerr   filterwarningsrQ   loggerDISABLE_VERBOSEr   rX   __annotations__r>   rV   rW   rZ   rw   r`   rP   r/   r/   r/   r0   <module>   sT   
 
D

