重要提示

您正在查看 NeMo 2.0 文档。此版本对 API 和一个新库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 中的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档

美学分类器#

概述#

美学分类器可用于评估图像的主观质量。NeMo Curator 集成了 改进的美学预测器,该预测器输出 0-10 的分数,其中 10 表示美观。

用例#

按美学质量过滤在生成图像管道中很常见。例如,Stable Diffusion 在训练期间逐步按美学分数进行过滤。

先决条件#

请务必查看图像管理入门页面,以安装您需要的一切。

用法#

美学分类器是一个线性分类器,它将 OpenAI CLIP ViT-L/14 图像嵌入作为输入。此模型可通过 vit_large_patch14_clip_quickgelu_224.openai 标识符在 TimmImageEmbedder 中获得。首先,我们可以计算这些嵌入,然后我们可以执行分类。

from nemo_curator import get_client
from nemo_curator.datasets import ImageTextPairDataset
from nemo_curator.image.embedders import TimmImageEmbedder
from nemo_curator.image.classifiers import AestheticClassifier

client = get_client(cluster_type="gpu")

dataset = ImageTextPairDataset.from_webdataset(path="/path/to/dataset", id_col="key")

embedding_model = TimmImageEmbedder(
    "vit_large_patch14_clip_quickgelu_224.openai",
    pretrained=True,
    batch_size=1024,
    num_threads_per_worker=16,
    normalize_embeddings=True,
)
aesthetic_classifier = AestheticClassifier()

dataset_with_embeddings = embedding_model(dataset)
dataset_with_aesthetic_scores = aesthetic_classifier(dataset_with_embeddings)

# Metadata will have a new column named "aesthetic_score"
dataset_with_aesthetic_scores.save_metadata()

主要参数#

  • batch_size=-1 是可选的批大小参数。默认情况下,它将一次处理碎片中的所有嵌入。由于美学分类器是线性模型,因此通常可以。

性能注意事项#

由于美学模型非常小,您可以将其与嵌入模型同时加载到 GPU 上,并在计算嵌入后直接执行推理。查看此示例

from nemo_curator import get_client
from nemo_curator.datasets import ImageTextPairDataset
from nemo_curator.image.embedders import TimmImageEmbedder
from nemo_curator.image.classifiers import AestheticClassifier

client = get_client(cluster_type="gpu")

dataset = ImageTextPairDataset.from_webdataset(path="/path/to/dataset", id_col="key")

embedding_model = TimmImageEmbedder(
    "vit_large_patch14_clip_quickgelu_224.openai",
    pretrained=True,
    batch_size=1024,
    num_threads_per_worker=16,
    normalize_embeddings=True,
    classifiers=[AestheticClassifier()],
)

dataset_with_aesthetic_scores = embedding_model(dataset)

# Metadata will have a new column named "aesthetic_score"
dataset_with_aesthetic_scores.save_metadata()

其他资源#