Team Ai
Apppublic

David310/Detect_AI-generated_Image

sourceHugging Faceupdated 2y agoView on Hugging Face
4likes
validate.cpython-38.pyc63 linesDownload Raw Back to __pycache__
1U

2��^fy&�3@sddlZddlmZddlZddlZddlZddlmZddlZddl	Z4ddlmZm
Z
mZddlmZddlZddlmZddlmZddlZddlmZddlmZdd	lmZdd5lmZddlZddlZddlm Z dZ!dd
�Z"dddgdddgd�Z#dddgdddgd�Z$dd�Z%dd�Z&dd �Z'd!d"�Z(d_d$d%�Z)d&d'd(d)d*gfd+d,�Z*d`d.d/�Z+Gd0d1�d1e�Z,e-d2k�rej.ej/d3�Z0e0j1d4e2dd5d6�e0j1d7e2dd5d6�e0j1d8e2dd9d6�e0j1d:e3d;d<d6�e0j1d=e2d>d?�e0j1d@e2dAd?�e0j1dBe2dCd-d6�e0j1dDe3dEd?�e0j1dFe3ddGd6�e0j1dHe3ddId6�e0�4�Z5ej6�7e5j8��rXe�9e5j8�e�:e5j8�ee5j;�Z<ej=e5j>dJdK�Z?e<j@�Ae?�eBdL�e<�C�e<�D�e5jEdk�s�e5jFdk�s�e5jGdk�r�eZneHe5jEe5jFe5jGdM�gZeD�],ZIe"�e,eIdNeIdOeIdPe5jJe5j;e5jKe5jLdQ�ZMejNjOjPeMe5jQd#dRdS�ZRe)e<eRdTdU�\ZSZTZUZVZWZXZYZZe[ej6�\e5j8dV�dW��.Z]e]�^eIdXdYe2e_eSdZd[��d\�W5QRXe[ej6�\e5j8d]�dW��ZZ]e]�^eIdXdYe2e_eTdZd[��d^e2e_eUdZd[��d^e2e_eVdZd[��d\�W5QRX�q�dS)a�N)�arg)�average_precision_score�precision_recall_curve�accuracy_score)�Dataset)�	get_model)�Image)�tqdm)�BytesIO)�deepcopy)�
DATASET_PATHS)�gaussian_filtercCs0t�t�tj�t�tj�t�t�t�dS�N)�torch�manual_seed�SEED�cuda�np�random�seed�rr�0/root/autodl-tmp/UniversalFakeDetect/validate.py�set_seeds6rg7ףp=8�?g�v��/�?g�C�l���?g3<�4'��?gwg��M�?gy{�� �?)�imagenet�clipgZd;�O�?gy�&1��?g�������?g��B�91�?g�w�t.��?g��	U��?cCs�|jd}|d|d���||d|���kr^|d|d���||d|���dSd}d}|D]D}t|�}d|||k<d|||k<||k��|}||krj|}|}qj|S)z=We assume first half is real 0, and the second half is fake 1r��)�shape�max�minr�sum)�y_true�y_pred�NZbest_acc�9best_thres�thres�temp�accrrr�find_best_threshold-s10(,r(cCs<t�}|j|d|d�t�|�}t�|�}|��t�|�S)N�jpeg)�format�quality)r11�saver�openr�array�close�	fromarray)�imgr+�outrrr�png2jpgEs1213r3cCs�t�|�}t|dd�dd�df|dd�dd�df|d�t|dd�dd�df|dd�dd�df|d�t|dd�dd�df|dd�dd�df|d�t�|�S)Nr)�output�sigmarr)rr.r
rr0)r1r5rrr�
gaussian_blurOs1415222r6cCsTt||dk||dk|k�}t||dk||dk|k�}t|||k�}|||fS)Nrr)r)r!r"r%�r_acc�f_accr'rrr�
calculate_accZsr9Fc	Cs�t���bgg}}tdt|��|D]<\}}|��}|�||��������|�|�����q(W5QRXt	�16|�t	�17|�}}t||�}t||d�\}	}18}|s�||	|19|fSt
||�}t|||�\}
}}||	|20||
|||fS)NzLength of dataset: %dg�?)r�no_grad�print�lenr�extend�sigmoid�flatten�tolistrr.rr9r()�model�loader�21find_thresr!r"r1�labelZin_tens�ap�r_acc0�f_acc0�acc0r$�r_acc1�f_acc1�acc1rrr�validateas22232425rLZpngZjpgZJPEGr)ZbmpcCs`g}t�|�D]L\}}}|D]<}|�d�d|kr|tj�||�kr|�tj�||��qq|S)N�.r)�os�walk�split�path�join�append)Zrootdir�must_containZextsr2�r�d�f�filerrr�recursively_read�s$rY�c	sJd|kr<t|d��}t�|�}W5QRX�fdd�|D�}n26t|��}|S)Nz.pickle�rbcsg|]}�|kr|�qSrr)�.0�item�rTrr�27<listcomp>�szget_list.<locals>.<listcomp>)r-�pickle�loadrY)rQrTrWZ28image_listrr^r�get_list�s29rbc@s.eZdZd30dd�Zdd�Zdd�Zdd	�ZdS)�RealFakeDatasetNcCs|dkst�||_||_t|�tkrFt|�tkrF|�||||�\}}	n@g}g}	t||�D],\}31}|�|32|||�\}}
||7}|	|
7}	qX||	|_i|_|D]}d|j|<q�|	D]}d|j|<q�|�	��33d�r�dnd}t�t�
d�t��tjt|t|d�g�|_dS)N)�wang2020Zoursrrrr��)�mean�std)�AssertionError�jpeg_quality�gaussian_sigma�type�str�	read_path�zip�34total_list�labels_dict�lower�35startswith�36transformsZComposeZ37CenterCropZToTensorZ	Normalize�MEAN�STD�	transform)�self�	real_path�	fake_path�	data_mode�38max_sample�archrirj�	real_list�	fake_listZreal_pZfake_pZreal_lZfake_l�iZ	stat_fromrrr�__init__�s.3940�zRealFakeDataset.__init__cCs�|dkr"t|dd�}t|dd�}nt|�}t|�}|dk	r�|t|�ksR|t|�kr^d}td�t�|�t�|�|d|�}|d|�}t|�t|�ks�t�||fS)NrdZ0_realr^Z1_fake�dz,not enough images, max_sample falling to 100r)rbr<r;r�shufflerh)rwrxryrzr{r}r~rrrrm�s4142zRealFakeDataset.read_pathcCs43t|j�Sr)r<ro)rwrrr�__len__�szRealFakeDataset.__len__cCsb|j|}|j|}t�|��d�}|jdk	r:t||j�}|jdk	rPt||j�}|�	|�}||fS)NZRGB)44rorprr-�convertrjr6rir3rv)rw�idxZimg_pathrDr1rrr�__getitem__�s4546474849zRealFakeDataset.__getitem__)NN)�__name__�50__module__�__qualname__r�rmr�r�rrrrrc�s�51*rc�__main__)Zformatter_classz--real_pathzdir name or a pickle)rk�default�helpz--fake_pathz--data_modezwang2020 or oursz--max_samplei�z3only check this number of images for both fake/realz--archZres50)rkr�z--ckptz#./pretrained_weights/fc_weights.pthz--result_folder�resultz--batch_size�z--jpeg_qualityzL100, 90, 80, ... 30. Used to test robustness of our model. Not apply if Nonez--gaussian_sigmazF0,1,2,3,4.     Used to test robustness of our model. Not apply if None�cpu)�map_locationzModel loaded..)rxryrzrxryrz)rirj�)�52batch_sizer��num_workersT)rCzap.txt�a�keyz: r�r�53zacc0.txtz  )F)rZ)`�argparse�astrrN�csvrZtorchvision.transformsrs�torch.utils.data�numpyrZsklearn.metricsrrrr�sysZmodelsr�PILrr`r	�ior54�copyrZ
dataset_pathsrr�shutilZscipy.ndimage.filtersr
rrrtrur(r3r6r9rLrYrbrcr��ArgumentParserZArgumentDefaultsHelpFormatter�parser�add_argumentrl�int�55parse_args�optrQ�existsZ
result_folder�rmtree�makedirsr|rAraZckpt�56state_dict�fc�load_state_dictr;�evalrrxryrz�dictZdataset_pathr{rirj�dataset�utils�data�57DataLoaderr�rBrErFrGrHrIrJrKr$r-rRrW�write�roundrrrr�<module>s���	5859+	60
Z6162$63�	2