Окружение
| Пакет | Назначение |
|---|---|
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 | Насколько сильно модель следует промпту; слишком большие значения дают артефакты. |
model | ID модели на 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 и укажите её явно.