🔖 Справочник: CLIP и text-to-image

← К оглавлению урока

⚡ Минимум для старта

# Windows PowerShell
python -m venv venv
venv\Scripts\Activate.ps1
pip install torch torchvision pillow requests python-dotenv numpy
pip install git+https://github.com/openai/CLIP.git
pip install huggingface_hub

Окружение

ПакетНазначение
torch, torchvisionТензоры и запуск модели CLIP на CPU/GPU.
git+https://github.com/openai/CLIP.gitОфициальный Python-пакет OpenAI CLIP с модулем clip.
PillowОткрытие и сохранение изображений (PIL.Image).
requestsЗагрузка картинок по URL и низкоуровневый HTTP-запрос к API.
python-dotenvЧтение HF_TOKEN из .env.
huggingface_hubСовременный клиент InferenceClient для text-to-image.
⚠️ Важно: пакет clip из PyPI может быть не тем, что нужен для кода урока. Для OpenAI CLIP используйте установку из официального GitHub-репозитория: pip install git+https://github.com/openai/CLIP.git.

CLIP: ключевые конструкции

КонструкцияЧто делает
device = "cuda" if torch.cuda.is_available() else "cpu"Выбирает GPU, если доступен, иначе CPU.
model, preprocess = clip.load("ViT-B/32", device=device)Загружает модель CLIP и функцию подготовки изображения.
clip.tokenize(text_queries)Токенизирует список текстовых описаний.
model.encode_text(text_inputs)Преобразует текст в векторы.
model.encode_image(image_inputs)Преобразует изображения в векторы.
features /= features.norm(dim=-1, keepdim=True)Нормализует векторы для корректного сравнения.
text_features @ image_features.TМатричное умножение: попарное сходство текстов и изображений.
.softmax(dim=-1)Превращает оценки в относительные вероятности внутри выбранного набора вариантов.
Softmax — относительная оценка. Если сравнить картинку только с метками «dog» и «cat», модель выберет одну из них даже для картинки с машиной. Добавляйте нормальные альтернативы.

Hugging Face токен

# .env
HF_TOKEN=hf_ваш_токен

Токен не пишут прямо в коде и не коммитят. Добавьте .env в .gitignore.

Text-to-image через Hugging Face

ПараметрНазначение
prompt / inputsОсновное текстовое описание изображения.
negative_promptЧто модель должна избегать.
num_inference_stepsКоличество шагов денойзинга: больше обычно качественнее, но медленнее.
guidance_scaleНасколько сильно модель следует промпту; слишком большие значения дают артефакты.
modelID модели на Hugging Face Hub или у выбранного провайдера.
# generate_hf.py — современный клиент HF
import os
from huggingface_hub import InferenceClient

client = InferenceClient(
    provider="fal-ai",
    api_key=os.environ["HF_TOKEN"],
)

image = client.text_to_image(
    "Astronaut riding a horse, cinematic lighting",
    model="black-forest-labs/FLUX.1-dev",
)
image.save("generated.png")
⚠️ Hugging Face Inference Providers быстро меняются: провайдер, доступность модели и права токена зависят от аккаунта и текущих лимитов. Если нужна именно Stable Diffusion/SDXL, выберите доступную Stable Diffusion модель на Hub и укажите её явно.