与海洋
#python #datascience #computervision

为什么

我想要更多的自定义选项来为论文论文绘制数字。我花了一段时间才弄清楚这一点,所以我想我会分享。

如何

我假设您已经有一个具有计算嵌入和可视化的五十一个数据集。如果没有

我已经保存了所有东西,因此在绘制之前,我加载了数据集和compute_visualization结果:

import fiftyone as fo

# load dataset
dataset = fo.load_dataset("dataset_name")

# load computed visualisation
results = dataset.load_brain_results("vis_name")

我有一个称为“ ware_type”的示例字段,我想用作Seaborn情节中的hue。为了获取每个示例的信息,我写了一个简单的功能:

def get_vehicle_type(sample_id):
    return dataset[sample_id]["vehicle_type"]

接下来,我将results.points转换为pandas dataframe,然后从fiftyone数据集中获取“ ware_type”信息。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# turn results.points into dataframe
df_viz = pd.DataFrame(results.points, columns=["x", "y"])
# get sample ids for each sample
df_viz["sample_id"] = results.sample_ids

# use sample id to get the sample field info I need
df_viz["vehicle_type"] = df_viz["sample_id"].apply(get_vehicle_type)

最后,我使用seaborn绘制结果:

sns.scatterplot(data=df_viz, x='x', y='y', 
hue='vehicle_type', palette='mako_r', 
alpha=.9, s=1, edgecolor='none')
plt.title('Image Uniqueness')
plt.axis('off')
plt.show()

Seaborn允许对情节的外观进行更大的控制。由于我不需要互动,因此这是为我的纸创建统一图的理想解决方案。

最后结果

A scatter plot showing different clusters of similar images

额外:计算嵌入和可视化

import fiftyone.zoo as foz

# compute embeddings
model = foz.load_zoo_model("mobilenet-v2-imagenet-torch")
embeddings = dataset.compute_embeddings(model)

# pickle embeddings for later use, this the computation takes a while
with open('embeddings.pkl', 'wb') as file:
    pickle.dump(embeddings, file)

# Compute visualization
results = fob.compute_visualization(
    dataset, embeddings=embeddings, seed=42, brain_key="vis_name"
)