a
    dM                     @   s   d Z 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mZ deddd	fd
dZedd	fddZdddZdS )z,
helpers for extracting features from image
    N)check_download_url)InceptionV3)InceptionV3Wtorchscript_inceptionZcudaFTc                    s   | dkrVt  dkrdnd}t|d|d|    |rHtj   fdd}nP| d	krtd
gdd|    |rtj   fdd}nt	|  d|S )Nr   Windowsz./z/tmpT)downloadresize_insidec                    s    | S )N xmodelr	   Z/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/cleanfid/features.pymodel_fn       z#feature_extractor.<locals>.model_fnpytorch_inception   F)Zoutput_blocksZresize_inputc                    s    | d d  d dS )N   r   )Zsqueezer
   r   r	   r   r      r   z" feature extractor not implemented)
platformsystemr   toevaltorchnnZDataParallelr   
ValueError)namedevicer   use_dataparallelpathr   r	   r   r   feature_extractor   s    r    c                 C   sP   | dkrt dd||d}n2| dkr4t dd||d}n| dkrLt dd||d}|S )	NZlegacy_pytorchr   F)r   r   r   r   Zlegacy_tensorflowr   Tclean)r    )moder   r   Z
feat_modelr	   r	   r   build_feature_extractor(   s    r#   r!   inception_v3testFIDc              	   C   s&  d}|dkrd}|dkrd}nd| }|dkr|  d| | d| d| d	  }	| d	|	 }
tjtj}tj|d
}t||
d}t	|}|d |d  }}||fS |dkr"|  d| | d| d| d	  }	| d	|	 }
tjtj}tj|d
}t||
d}t	|}|d S d S )Nz(https://www.cs.cmu.edu/~clean-fid/stats/Zcustomnar$    _r&   z.npz/stats)Zlocal_folderurlmusigmaZKIDz_kid.npzZfeats)
lowerosr   dirnamecleanfid__file__joinr   npload)r   resr"   Z
model_nameseedsplitZmetricbase_urlZmodel_modifierrel_pathr,   Zmod_pathZstats_folderZfpathr+   r-   r.   r	   r	   r   get_reference_statistics5   s.    $

$
r<   )r!   r$   r   r%   r&   )__doc__r0   r   numpyr5   r   r2   Zcleanfid.downloads_helperr   Zcleanfid.inception_pytorchr   Zcleanfid.inception_torchscriptr   r   r    r#   r<   r	   r	   r	   r   <module>   s   