
    2gF                         d dl mZ d dlmZmZ d dlmZ d dlm	Z	 d dl
Z
d dlmc mZ  e
j                         d        Z e
j                         d        Zy)    N)pcaremove_axes)tokenize)seed_everythingc                    t        | j                        t        |j                        cxk(  rt        |j                        cxk(  rdk(  sJ  J t        d       t        |j	                  d      |j	                  d      g      \  \  }}}t        j                  ddd      \  }}|d   j                  | j                  ddd      j                         j                                |d   j                  d       |d   j                  |d   j                  ddd      j                         j                                |d   j                  d       |d   j                  |d   j                  ddd      j                         j                                |d   j                  d	       t        |       t        j                  d
       t        j                          y )N   r            figsize   ImagezOriginal FeatureszUpsampled Featuresztmp.png)lenshaper   r   	unsqueezepltsubplotsimshowpermutedetachcpu	set_titler   savefigshow)imagelrhrlr_feats_pcahr_feats_pca_figaxs           2/home/cameronsmith/repos/FeatUp/featup/plotting.py
plot_featsr&   	   sd   u{{s288}BBHHBBBBBA&)2<<?BLLO*L&M# \<!ll1a1GCqELLq!Q'..04467qEOOGqELLa((Aq188:>>@AqEOO'(qELLa((Aq188:>>@AqEOO()OKK	HHJ    c                 |   t        |j                        t        |j                        cxk(  rt        |j                        cxk(  rdk(  sJ  J t        j                  ddd      \  }}t        j                  d      }t        |      j                  |j                        }| j                  j                  |      j                         j                  t        j                        }	t        |	j                        dk(  sJ t        j                  dt        j                  |j                  t        j                        d      t        j                  |	d            }
t        j                  dt        j                  |j                  t        j                        d      t        j                  |	d            }|
|
j!                         z
  |
j#                         |
j!                         z
  z  }||j!                         z
  |j#                         |j!                         z
  z  } ||j%                         j'                               } ||j%                         j'                               }|d   j)                  |j+                  dd	d      j-                         j%                                |d   j/                  d
       |d   j)                  |       |d   j/                  d| d       |d	   j)                  |       |d	   j/                  d| d       t1        |       t        j2                         S )Nr   r	   r
   r   turboz	chw,c->hwr   )dimr   r   zOriginal Similarity to ""zUpsampled Similarity to ")r   r   r   r   get_cmapr   todevicemodelencode_textsqueezetorchfloat32einsumF	normalizeminmaxr   numpyr   r   r   r   r   r   )r/   r   lr_featshr_feats
text_queryr#   r$   cmaptext
text_featslr_simshr_simslr_sims_normhr_sims_norm
lr_heatmap
hr_heatmaps                   r%   plot_lang_heatmapsrF      s[   u{{s8>>2Nc(..6INQNNNNll1a1GC<< D J""8??3D((.668;;EMMJJz A%%llQ[[U]]!;CQ[[Q[abEceGllQ[[U]]!;CQ[[Q[abEceG gkkm+0MNLgkkm+0MNLl&&(..01Jl&&(..01JqELLq!Q'..04467qEOOGqELLqEOO/
|2>?qELLqEOO0B?@O88:r'   )matplotlib.pyplotpyplotr   featup.utilr   r    featup.featurizers.maskclip.clipr   pytorch_lightningr   r2   torch.nn.functionalnn
functionalr5   no_gradr&   rF    r'   r%   <module>rQ      sR     ( 5 -        r'   