CoolFace
Apppublic

emilios/codeformer-face-restorization

sourceHugging Facemitupdated 3y agoView on Hugging Face
0likes
codeformer_joint_model.cpython-39.pyc82 linesDownload Raw Back to __pycache__
1a

2�p�e�;�@s�ddlZddlmZddlmZddlmZddlmZddl	m3Z4ddlmZddl
mZmZmZdd	lmZddlmmZd5dlmZe��Gdd
�d
e��ZdS)�N)�OrderedDict)�path)�tqdm)�
build_network)�6build_loss)�calculate_metric)�get_root_logger�imwrite�7tensor2img)�MODEL_REGISTRY�)�SRModelc@sneZdZdd�Zdd�Zdd�Zdd�Zdd8d�Zdd
�Zdd�Z	dd�Z9dd�Zdd�Zdd�Z
dd�ZdS)�CodeFormerJointModelcCs||d�|j�|_|d�|j�|_|d�|j�|_|jjd|_d|vrr|d�|j�|_|j�|jd�|_nd|_dS)N�gt�in�in_large_der�	latent_gt�����)	�to�devicer�input�input_large_de�shape�b�idx_gt�view)�self�data�r�7D:\code former\basicsr\models\codeformer_joint_model.py�	feed_dataszCodeFormerJointModel.feed_datacCs�t�}|jd}|�dd�|_|jdkr�|�d|j���t|jd��|j�|_|jd�dd�}|dur�|�	|j||jd�dd	�d10�n11|�12d�|j��|jdd�dd�dur�d
|_n^|j�dd�du�rt|jd��|j�|_
|j
��d	|_|j
��D]}d
|_�q13ntd��|�d|j���|�dd	�|_|�dd�|_|�dd	�|_|�dd�|_|�dd�|_t|jd�|_|�|j�|_|�|j�|jd�dd�}|du�r�|�	|j||jd�dd	��|j��|j��|�d��rt|d��|j�|_nd|_|�d��r@t|d��|j�|_nd|_|�d��rht|d��|j�|_|�dd	�|_|�d |j���|�d!d�|_ |�d"d#�|_!|�d$d�|_"|�#�|�$�dS)%N�train�	ema_decayrz+Use Exponential Moving Average with decay: �	network_gr�pretrain_network_g�
strict_load_gT�14params_ema�datasets�latent_gt_pathF�
network_vqganz?Shoule have network_vqgan config or pre-calculated latent code.z!Need to generate latent GT code: �use_hq_feat_loss�feat_loss_weight��?�cross_entropy_loss�entropy_loss_weightg�?�scale_adaptive_gan_weightg�������?Z	network_dZpretrain_network_dZ
strict_load_d�	pixel_opt�perceptual_optZgan_opt�
fix_generatorzfix_generator: �net_g_start_iter�net_d_itersr�net_d_start_iter)%r�opt�getr"�inforrr�	net_g_ema�load_network�	model_ema�eval�generate_idx_gt�hq_vqgan_fix�15parameters�
requires_grad�NotImplementedError�hq_feat_lossr+r-r.r/�net_d�model_to_device�
print_network�net_gr!r�cri_pix�cri_perceptual�cri_ganr2r3r4r5�setup_optimizers�setup_schedulers)r�logger�	train_opt�	load_path�paramrrr�init_training_settingssb1617"181920212223z+CodeFormerJointModel.init_training_settingscCsZtjj||dd�d}tjj||dd�d}t�|�t�|�d}t�|d|���}|S)NT)�retain_graphrg-C��6?g)�torch�autograd�grad�norm�clamp�detach)r�24recon_lossZg_loss�25last_layer�disc_weight_maxZrecon_gradsZg_grads�d_weightrrr�calculate_adaptive_weightks26z.CodeFormerJointModel.calculate_adaptive_weightcCs�|jd}g}|j��D]2\}}|jr2|�|�qt�}|�d|�d��q|d�d�}|j||fi|d��|_	|j27�|j	�|d�d�}|j||j��fi|d��|_
|j28�|j
�dS)Nr!zParams z will not be optimized.�optim_g�typeZoptim_d)r6rF�named_parametersr@�appendr�warning�pop�
get_optimizer�optimizer_g�29optimizersrCr?�optimizer_d)rrM�optim_params_g�k�vrL�30optim_typerrrrJss31 z%CodeFormerJointModel.setup_optimizers�cCs�d|dd�ddd�dd�fd|dd�ddd�dd�fd|dd�ddd�dd�f}|�d�}tj|||fddd	�}|S)32Ngŏ1w-!�?rgbX9���?rg�v��/�?��bilinearF)�mode�
align_corners)�	unsqueeze�F�interpolate)r�out�sizeZout_grayrrr�gray_resize_for_identity�s`33z-CodeFormerJointModel.gray_resize_for_identitycCs�t�}|j��D]34}d|_q|j��|jrd|j�|j	�}|j�35|�\}}}|d}|�|jd�|_
|dkrvd}	d}36n,|dkr�d}	d}37n|dkr�d}	d	}38nd39}	d}40||	d	kr�|j|j|41dd�\|_}}d}
n|j|jdd
�\}}d}
|j�r|jjj42j|j
|jdddgd�}d	}t�}||jd	k�r�||jk�r�d|jddv�r�|j�r|t�|��|d�|j}||7}||d<|j�r�t�|� d	dd�|j
�|j!}||7}||d<|
�s�|j"�r�|�"|j|j	�}||7}||d<|j#�r|�#|j|j	�}||7}||d<||j$k�r�|�|j�}|j%|ddd�}||}|j&�sf|jjj'j(dj)}|j*|||dd�}n:|jddd}|jjj+|j,dj)}|j*|||dd�}||j-9}||d<|||7}|||d<|�.�|j�/�|j0d	k�r�|j1|j0d�|
�s�||j$k�r�|j��D]}d|_�q|j2��|�|j	�}|j%|ddd�}||d <t�|���|d!<|�.�|�|j���}|j%|ddd�}||d"<t�|���|d#<|�.�|j2�/�|�3|�|_4dS)$NF�min_encoding_indicesri@�ri�8g�������?i��r�T)�w�	detach_16)�	code_only��)r�transformerr#�fix_modulesrl�l_feat_encoderr-�l_g_pix�43l_g_percep)�is_discr,)rZ�connect_listr[�l_g_gan)�decay�l_d_realZ44out_d_real�l_d_fakeZ45out_d_fake)5rrCr?r@rd�	zero_gradr=r>�encoderr�quantizerrrrFr�outputrrB�module�get_codebook_featrr4r3r6rR�meanrWr+r-rq�
cross_entropy�permuter.rGrHr5rIr2�	generator�blocks�weightr\�fuse_convs_dict�shiftr/�backward�stepr"r;rf�reduce_loss_dict�log_dict)r�current_iterrL�p�xr��_�quant_statsrvZsmall_per_nrx�logits�lq_featZlarge_de�
quant_feat_gt�	l_g_total�	loss_dictrr-r�r�Zfake_g_predr�rXrYr[Zlargest_fuse_sizeZreal_d_predr�Zfake_d_predr�rrr�optimize_parameters�s�46 4748495051z(CodeFormerJointModel.optimize_parameterscCs�t���zt|d�r8|j��|j|jdd�\|_}}n<t�}|�d�|j	��|j	|jdd�\|_}}|j	�52�Wd�n1s�0YdS)Nr9r)rxz+Do not have self.net_g_ema, use self.net_g.)rR�no_grad�hasattrr9r<rr�rrarFr!)rr�rLrrr�tests5354555657zCodeFormerJointModel.testcCs"|jddkr|�||||�dS)N�rankr)r6�nondist_validation)r�58dataloaderr��	tb_logger�save_imgrrr�dist_validation
sz$CodeFormerJointModel.dist_validationc	Cs,|jjd}|jd�d�du}|rBdd�|jdd��D�|_tt|�dd�}t|�D�]�\}}	t�	t�59|	dd	��d	}60|�|	�|��|�
�}t|d61g�}d|vr�t|dg�}
|`|`|`tj��|�r�|jd�rt�|jd
d|62|63�d|�d��}nj|jdd�rLt�|jd
d||64�d|jdd�d��}n*t�|jd
d||65�d|jd�d��}t||�|�r�|jdd��D].\}}t||
d�}|j|t||�7<�q�|�d�|�d|66���qZ|��|�r(|j��D]}|j||d<�q�|�|||�dS)N�name�val�metricscSsi|]67}|d�qS)rr)�.0�metricrrr�68<dictcomp>�z;CodeFormerJointModel.nondist_validation.<locals>.<dictcomp>�image)�total�unit�lq_pathr�resultr�is_trainr�
visualizationr�z.png�suffix)�img1�img2rzTest )�datasetr6r7�keys�metric_resultsr�len�	enumerate�osp�splitext�basenamer r��get_current_visualsr69r�lqr�rR�cuda�empty_cache�joinr	�items�dictr�update�set_description�close�_log_validation_metric_values)rr�r�r�r��dataset_name�with_metrics�pbar�idx�val_data�img_name�visuals�sr_img�gt_img�
save_img_pathr��opt_�metric_datar�rrrr�sR7071���7273z'CodeFormerJointModel.nondist_validationcCsxd|�d�}|j��D] \}}|d|�d|d�d�7}qt�}|�|�|rt|j��D]\}}|�d|��||�qVdS)NzValidation �74z	 # z: z.4fzmetrics/)r�r�rr8�75add_scalar)rr�r�r��log_strr��valuerLrrrr�Fs76z2CodeFormerJointModel._log_validation_metric_valuescCs.t�}|j����|d<|j����|d<|S)Nrr�)rrrW�cpur�)r�out_dictrrrr�Qsz(CodeFormerJointModel.get_current_visualscCsZ|jdkr*|j|j|jgd|ddgd�n|�|jd|�|�|jd|�|�||�dS)NrrF�paramsr&)�	param_keyrC)r"�save_networkrFr9rC�save_training_state)r�epochr�rrr�saveXs7778 zCodeFormerJointModel.saveN)rk)�__name__�79__module__�__qualname__r rPr\rJrur�r�r�r�r�r�r�rrrrrsM80u
4r)rR�collectionsr�osrr�r�
basicsr.archsrZbasicsr.lossesrZbasicsr.metricsr�
basicsr.utilsrr	r81�basicsr.utils.registryr�torch.nn.functional�nn�82functionalrq�sr_modelr
�registerrrrrr�<module>s