Team Ai
Apppublic

David310/Detect_AI-generated_Image

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

2�sf�M�@sddlmZddlmZmZddlZddlZddlm	m3Zddlm	Z	Gdd�de	j�Z
Gdd�de	j�ZGd	d4�d5e	j�ZGdd�de	j�ZGd
d�de	j�ZGdd�de	j�ZGdd�de	j�ZGdd�de	j�ZGdd�de	j�Ze	jd�dd�Zed�dd�ZdS)�)�OrderedDict)�Tuple�UnionN)�nncs2eZdZdZd�fdd�	Zejd�dd�Z�ZS)	�6Bottleneck��cs0t���tj||ddd�|_t�|�|_tjdd�|_tj||dddd�|_	t�|�|_7tjdd�|_|dkrzt�|�nt�
�|_tj|||jddd�|_t�||j�|_tjdd�|_d|_||_|dks�||tjk�r,t�tdt�|�fd	tj|||jdddd8�fdt�||j�fg��|_dS)NrF)�biasT��inplace�)�paddingr	z-1�0)�strider	�1)�super�__init__r�Conv2d�conv1�BatchNorm2d�bn1�ReLU�relu1�conv2�bn2�relu2�	AvgPool2d�Identity�avgpool�	expansion�conv3�bn3�relu3�9downsamplerr�10Sequentialr)�self�inplanes�planesr��	__class__��9/root/autodl-tmp/UniversalFakeDetect/models/clip/model.pyr
s&11�zBottleneck.__init__��xcCst|}|�|�|�|���}|�|�|�|���}|�|�}|�|�|��}|j	dk	r^|�	|�}||7}|�12|�}|S�N)rrrrrrrr!r r#r")r%r-�identity�outr*r*r+�forward*s13141516zBottleneck.forward)r)	�__name__�17__module__�__qualname__rr�torch�Tensorr1�
__classcell__r*r*r(r+r18srcs2eZdZdeeeed��fdd�
Zdd�Z�ZS)�AttentionPool2dN)�spacial_dim�	embed_dim�	num_heads�19output_dimcstt���t�t�|dd|�|d�|_t�||�|_t�||�|_	t�||�|_20t�||pd|�|_||_dS)N�r��?)
rrr�	Parameterr5�randn�positional_embedding�Linear�k_proj�q_proj�v_proj�c_projr;)r%r9r:r;r<r(r*r+r;s21$zAttentionPool2d.__init__cCs�|jdd��ddd�}tj|jddd�|gdd�}||jdd�ddd�f�|j�}tj	|dd�|||j22d|j|jj
|jj
|jj
dt�|jj|jj|jjg�ddd	d|jj
|jjd|jd	d23�\}}|�d�S)Nr=)�	start_dimrrT��dim�keepdim�rI�����F)�query�key�value�embed_dim_to_checkr;�
q_proj_weight�
k_proj_weight�
v_proj_weight�in_proj_weight�in_proj_bias�bias_k�bias_v�
add_zero_attn�	dropout_p�out_proj_weight�
out_proj_bias�use_separate_proj_weight�training�need_weights)�flatten�permuter5�cat�meanrA�to�dtype�F�multi_head_attention_forward�shaper;rD�weightrCrEr	rFr]�squeeze)r%r-�_r*r*r+r1Ds2$24�25zAttentionPool2d.forward)N)r2r3r4�intrr1r7r*r*r(r+r8:s	r8cs4eZdZdZd�fdd�	Zddd�Zd	d26�Z�ZS)
�ModifiedResNeta�27    A ResNet class that is similar to torchvision's but contains the following changes:28    - There are now 3 "stem" convolutions as opposed to 1, with an average pool instead of a max pool.29    - Performs anti-aliasing strided convolutions, where an avgpool is prepended to convolutions with stride > 130    - The final pooling layer is a QKV attention instead of an average pool31    ���@csRt���||_||_tjd|dddddd�|_t�|d�|_tj	dd�|_32tj|d|ddddd�|_t�|d�|_tj	dd�|_
tj|d|dddd�|_t�|�|_tj	dd�|_t�d�|_||_|�||d	�|_|j|d|ddd33�|_|j|d|ddd34�|_|j|d|ddd35�|_|d
}t|d
|||�|_dS)Nrr=rF)�kernel_sizerr
r	Tr36)ror
r	r)rr�� )rrr<�input_resolutionrrrrrrrrrrr r!r"rr�	_inplanes�_make_layer�layer1�layer2�layer3�layer4r8�attnpool)r%�layersr<�headsrr�widthr:r(r*r+rfs(37zModifiedResNet.__init__rcCsHt|j||�g}|tj|_td|�D]}|�t|j|��q&tj|�S)Nr)rrsr�range�appendrr$)r%r'�blocksrrzrjr*r*r+rt�s38zModifiedResNet._make_layercsZ�fdd�}|��jjj�}||�}��|�}��|�}��|�}��|�}��|�}|S)NcsP������|���}������|���}������|���}��	|�}|Sr.)39rrrrrrr"r!r rr,�r%r*r+�stem�s4041z$ModifiedResNet.forward.<locals>.stem)	�typerrhrdrurvrwrxry)r%r-r�r*r�r+r1�s4243444546zModifiedResNet.forward)rmrn)r)r2r3r4�__doc__rrtr1r7r*r*r(r+rl^s47	rlcs(eZdZdZejd��fdd�Z�ZS)�	LayerNormz*Subclass torch's LayerNorm to handle fp16.r,cs$|j}t��|�tj��}|�|�Sr.)rdrr1r�r5�float32)r%r-�	orig_type�retr(r*r+r1�szLayerNorm.forward)r2r3r4r�r5r6r1r7r*r*r(r+r��sr�c@seZdZejd�dd�ZdS)�	QuickGELUr,cCs|t�d|�S)Ng�Zd;�?)r5�sigmoid�r%r-r*r*r+r1�szQuickGELU.forwardN)r2r3r4r5r6r1r*r*r*r+r��sr�csJeZdZd48eeejd��fdd�
Zejd�dd�Zejd�dd	�Z�Z	S)�ResidualAttentionBlockN)�d_model�n_head�	attn_maskc49srt���t�||�|_t|�|_t�tdt�	||d�fdt50�fdt�	|d|�fg��|_t|�|_||_
dS)N�c_fcr�gelurF)rrr�MultiheadAttention�attnr��ln_1r$rrBr��mlp�ln_2r�)r%r�r�r�r(r*r+r�s5152�5354zResidualAttentionBlock.__init__r,cCs>|jdk	r|jj|j|jd�nd|_|j|||d|jd�dS)N�rd�deviceF)r^r�r)r�rcrdr�r�r�r*r*r+�	attention�s$z ResidualAttentionBlock.attentioncCs,||�|�|��}||�|�|��}|Sr.)r�r�r�r�r�r*r*r+r1�szResidualAttentionBlock.forward)N)55r2r3r4rkr5r6rr�r1r7r*r*r(r+r��s
r�cs<eZdZdeeeejd��fdd�
Zejd�dd�Z�ZS)	�TransformerN�r|rzr{r�cs<t����|_||_tj���fdd�t|�D��|_dS)Ncsg|]}t�����qSr*)r�)�.0rj�r�r{r|r*r+�56<listcomp>�sz(Transformer.__init__.<locals>.<listcomp>)rrr|rzrr$r}�	resblocks)r%r|rzr{r�r(r�r+r�s57zTransformer.__init__r,cCs@i}t|j���D]$\}}||�}|d|dt|�<q||fS)Nr�layer)�	enumerater��children�str)r%r-r0�idxr�r*r*r+r1�s58zTransformer.forward)N)	r2r3r4rkr5r6rr1r7r*r*r(r+r��sr�cs<eZdZeeeeeed��fdd�Zejd�dd�Z�ZS)�VisionTransformer�rr�59patch_sizer|rzr{r<cs�t���||_||_tjd|||dd�|_|d}t�|t�	|��|_60t�|t�	||dd|��|_t|�|_
t|||�|_t|�|_t�|t�	||��|_dS)NrF)�in_channels�out_channelsrorr	��r=r)rrrrr<rrrr?r5r@�class_embeddingrAr��ln_prer��transformer�ln_post�proj)r%rrr�r|rzr{r<�scaler(r*r+r�s61$6263zVisionTransformer.__init__r,c	Cs�|�d|jd|jd|jd�}|�|�}|�|jd|jdd�}|�ddd�}tj|j�|j�tj	|jdd|jd|j|j64d�|gdd�}||j�|j�}|�|�}|�ddd�}|�
|�\}}|�ddd�}|�|d	d	�dd	d	�f�}||d65<|jd	k	�r||j}||d<t�|d66�|d<d
|dgd|dgd|dgfD]4}|�|d�|d<|d|d|d7<�qP|d|j|d<|S)u�67        原代码这里的x是4个dimension,即batchsize*RGBchannels*224*22468        若只输入一张图片,因为没有batchsize维度,需要在最前面加一个维度,见下面第一行代码69        rL����������rrr=r�rKNZbefore_projection�after_projection�70res_outputg�������?Zlayer19g333333�?Zlayer21r>Zlayer23)�reshapergrr`r5rar�rcrd�zerosr�rAr�r�r�r��71zeros_like)r%r-r0Zlayer_outputr*r*r+r1�s*"72@7374& 75zVisionTransformer.forward)	r2r3r4rkrr5r6r1r7r*r*r(r+r��sr�cs|eZdZeeeeeeeefefeeeeeeed�76�fdd�Zdd�Zdd�Ze	dd	��Z77d78d�Zdd
�Zdd�Z
�ZS)�CLIP)79r:�image_resolution�
vision_layers�vision_width�vision_patch_size�context_length�80vocab_size�transformer_width�transformer_heads�transformer_layerscs�t���||_t|ttf�r@|dd}t|||||d�|_n|d}t||||||d�|_t	||81|	|�82�d�|_||_t
�||�|_t
�t�|j|��|_t|�|_t
�t�||��|_t
�t�g�t�d��|_|��dS)Nrqrn)rzr<r{rrr|r�r�g$I�$I�,@)rrr��83isinstance�tuple�listrl�visualr�r��build_attention_maskr�r�r�	Embedding�token_embeddingr?r5�emptyrAr��ln_final�text_projection�ones�np�log�logit_scale�initialize_parameters)r%r:r�r�r�r�r�r�r�r�r�Zvision_headsr(r*r+r"sB84�85�	�86z
CLIP.__init__c	Cs�tjj|jjdd�tjj|jdd�t|jt�r�|jj	dk	r�|jj	j87jd}tjj|jj	jj|d�tjj|jj	j
j|d�tjj|jj	jj|d�tjj|jj	j88j|d�|jj|jj|jj|jjfD],}|��D]\}}|�d�r�tj�|�q�q�|jjdd|jjd}|jjd}d|jjd}|jjD]\}tjj|jj|d�tjj|jjj|d�tjj|jjj|d�tjj|jj89j|d��q8|jdk	�r�tjj|j|jjdd�dS)Ng{�G�z�?)�stdg{�G�z�?r�z90bn3.weightr=) r�init�normal_r�rhrAr�r�rlryrF�in_featuresrDrCrErurvrwrx�named_parameters�endswith�zeros_r�r|rzr�r�rT�out_projr�r�r�)	r%r�Zresnet_block�name�paramZproj_stdZattn_stdZfc_std�blockr*r*r+r�Ys. 91zCLIP.initialize_parameterscCs,t�|j|j�}|�td��|�d�|S)Nz-infr)r5r�r��fill_�float�triu_)r%�maskr*r*r+r�vs92zCLIP.build_attention_maskcCs|jjjjSr.)r�rrhrdr�r*r*r+rd~sz93CLIP.dtypecCs|�|�|j��Sr.)r�r�rd)r%�imager*r*r+�encode_image�szCLIP.encode_imagecCs�|�|��|j�}||j�|j�}|�ddd�}|�|�}|�ddd�}|�|��|j�}|t�|j	d�|j94dd�f|j}|S)Nrrr=rLrK)r�r�rdrAr`r�r�r5�arangerg�argmaxr�)r%�textr-r*r*r+�encode_text�s95&zCLIP.encode_textcCs�|�|�}|�|�}|dt|jd�|dt|jd�|dt|jd�d}||jddd�}||jddd�}|j��}|||��}|��}||fS)Nr�rr=rTrH)r�r�r�r��normr��exp�t)r%r�r�Zimage_featuresZ
text_featuresr��logits_per_imageZlogits_per_textr*r*r+r1�s9697F98zCLIP.forward)r2r3r4rkrrrr�r��propertyrdr�r�r1r7r*r*r(r+r�!s$�799r�)�modelcCsdd�}|�|�dS)z+Convert applicable model parameters to fp16cSs�t|tjtjtjf�r@|jj��|j_|jdk	r@|jj��|j_t|tj	�r�dd�dD�d�D]"}t100||�}|dk	r^|j��|_q^dD],}t||�r�t101||�}|dk	r�|j��|_q�dS)	NcSsg|]}|�d��qS)Z_proj_weightr*)r��sr*r*r+r��szEconvert_weights.<locals>._convert_weights_to_fp16.<locals>.<listcomp>)�in�q�k�vrUrVrW)r�r�)rUrVrW)r�r�Conv1drrBrh�data�halfr	r��getattr�hasattr)�l�attr�tensorr�r*r*r+�_convert_weights_to_fp16�s102103104105z1convert_weights.<locals>._convert_weights_to_fp16N)�apply)r�r�r*r*r+�convert_weights�sr���106state_dictcstd�k}|rb�djd}tdd����D��}�djd}t�djddd	�}||}nl�fd107d�dD�}t|�}�djd}t�d
jddd	�}d}|dd�d
jdks�t�|d}�djd}	�djd}108�djd}�djd}|d}
ttdd��D���}t|	|||||109|||
|�110}dD]}|�k�rB�|=�qBt|�|�	��|�111�S)Nzvisual.projzvisual.conv1.weightrcSs$g|]}|�d�r|�d�r|�qS)zvisual.z.attn.in_proj_weight)�112startswithr��r�r�r*r*r+r��s113114zbuild_model.<locals>.<listcomp>rLzvisual.positional_embeddingrr>cs&g|]�tt�fdd��D����qS)c3s,|]$}|�d����r|�d�dVqdS)zvisual.layer�.r=N�r��splitr���br*r+�	<genexpr>�sz)build_model.<locals>.<listcomp>.<genexpr>)�len�set)r�r�rr+r��s)rr=rrzvisual.layer1.0.conv1.weightz$visual.attnpool.positional_embeddingr=rqr�rAztoken_embedding.weightzln_final.weightrncss&|]}|�d�r|�d�dVqdS)ztransformer.resblocksr�r=Nrr�r*r*r+r�s115zbuild_model.<locals>.<genexpr>)rrr�r�)rgr�keys�roundr��AssertionErrorrr�r��load_state_dict�eval)r�Zvitr�r�r�Z	grid_sizer��counts�output_widthr:r�r�r�r�r�r�rNr*r�r+�build_model�sL116�117118119r)�collectionsr�typingrr�numpyr�r5Ztorch.nn.functionalr�120functionalre�Modulerr8rlr�r�r�r�r�r�r��dictrr*r*r*r+�<module>s"0$?	M121