DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro
DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro

Модель R-1 от DeepSeek в последние несколько дней попала в заголовки мировых СМИ. Это доступная альтернатива модели o1 от OpenAI с открытым исходным кодом. Но еще до того, как шумиха вокруг R-1 улеглась, китайский стартап представил еще одну ИИ-модель с открытым исходным кодом под названием Janus-Pro.

DeepSeek утверждает, что Janus-Pro 7B превосходит Dall-E 3 и Stable Diffusion от OpenAI в нескольких бенчмарках. Но так ли она хороша на самом деле? Соответствует ли она заявленным характеристикам, или это всего лишь очередная модель, пользующаяся шумихой вокруг ИИ?

Давайте узнаем.

Что такое Janus-Pro?

Говоря простым языком, Janus-Pro - это мощная ИИ-модель, способная понимать изображения и текст, а также создавать изображения на основе текстовых описаний.

Janus-Pro - это улучшенная версия модели Janus, разработанная для унифицированного мультимодального понимания и генерации. Она имеет лучший метод обучения, больше данных и более крупную модель. Кроме того, она обеспечивает более стабильные результаты для коротких промптов, улучшенное визуальное качество, более подробные детали и возможность генерировать простой текст.

Посмотрите на несколько примеров ниже:

Промпт: The face of a beautiful girl

Изображение от DeepSeek
Изображение от DeepSeek

Новая модель также лучше справляется с рендерингом текстов.

Промпт: A clear image of a blackboard with a clean, dark green surface and the word ‘Hello’ written precisely and legibly in the center with bold, white chalk letters.

DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro
DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro

Серия Janus-Pro включает в себя два размера моделей: 1 миллиард и 7 миллиардов, показывая масштабируемость метода визуального кодирования и декодирования. Разрешение изображения, генерируемого обеими моделями, составляет 384 × 384.

Что касается коммерческого лицензирования, то данная модель доступна с разрешительной лицензией как для научного, так и для коммерческого использования.

Технические детали о Janus-Pro

Janus-Pro использует отдельные методы визуального кодирования для задач мультимодального понимания и визуальной генерации. Такая структура направлена на смягчение конфликтов между этими двумя задачами и повышение общей производительности.

DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro
DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro

Для мультимодального понимания Janus-Pro использует кодировщик SigLIP для извлечения высокоразмерных семантических признаков из изображений, которые затем сопоставляются с входным пространством LLM с помощью адаптера понимания.

Для визуальной генерации модель использует токенизатор VQ для преобразования изображений в дискретные идентификаторы, которые затем отображаются на входное пространство LLM с помощью адаптера генерации.

DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro
DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro

При выполнении инструкций по преобразованию текста в изображение Janus-Pro-7B набирает 0,80 балла в бенчмарке GenEval, опережая другие модели, такие как Dall-E 3 от OpenAI и Stability AI от Stable Diffusion 3 Medium.

Кроме того, Janus-Pro-7B набирает 84,19 балла в DPG-Bench, превосходя все другие методы и демонстрируя свою способность следовать четким инструкциям при генерации изображения из текста.

Лучше ли Janus-Pro, чем Dall-E 3 или Stable Diffusion?

Согласно внутренним бенчмаркам DeepSeek, модели Dall-E 3 и Stable Diffusion получили меньше баллов в бенчмарках GenEval и DPG-Bench.

Но я принимаю эту информацию с долей сомнения из-за того, как выглядят образцы изображений. Лучший способ доказать это - провести собственные тесты. Давайте посмотрим на некоторые примеры ниже:

Промпт: A photo of a herd of red sheep on a green field.

Janus-Pro
Janus-Pro
Dall-E 3
Dall-E 3

Промпт: A beautiful 35 year old woman of average build wearing a pink tulle dress sits on the ground in front of the Eiffel Tower. Soft light illuminates her face as she poses for a photo with Paris in the background in Chanel style. Her shoulder length brown hair is styled in loose waves that fall to one side.

Janus-Pro
Janus-Pro
Dall-E 3
Dall-E 3

Промпт: An image of a little boy holding a white board with the text “AI is awesome!”

Janus-Pro
Janus-Pro
Dall-E 3
Dall-E 3

Судя по приведенным выше примерам, Dall-E 3 явно работает лучше, чем Janus Pro. Пропорции лиц и тел на выходе Janus Pro заметно нарушены, а примеры рендеринга текста говорят о том, что и в этой области он испытывает трудности.

Вполне возможно, что я что-то упускаю - возможно, для улучшения результатов требуются особые параметры или тонкая настройка. Однако при настройках по умолчанию результат кажется неудовлетворительным.

Как получить доступ к Janus-Pro?

DeepSeek выпустила Janus в открытый доступ на HuggingFace, чтобы поддержать более широкий и разнообразный спектр исследований как в научных, так и в коммерческих сообществах.

Обратите внимание, что модель Janus-Pro с 7 миллиардами параметров может съесть почти 15 гигабайт вашей внутренней памяти.

DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro
DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro

Если вы не хотите запускать модель на собственном оборудовании, вы можете просто запустить демо-версию Gradio на HuggingFace.

DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro
DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro

Пользоваться им довольно просто. Просто опишите изображение, которое вы хотите сгенерировать, и нажмите на кнопку «Generate image». Скорость генерации зависит от количества пользователей, одновременно использующих приложение.

Также вы можете попробовать функцию мультимодального понимания, загрузив изображение и попросив ИИ описать его. Вот пример:

Промпт: Explain this meme

DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro
DeepSeek выпустила собственный ИИ-генератор изображений Janus-Pro

This image is a humorous comparison between two types of visual encoding methods, using the popular "buff Doge vs. Cheems" meme format. 1. **Decoupling Visual Encoding (Buff Doge)**: - The left side of the image shows a muscular, buff Doge, representing a strong and robust method of visual encoding. This could symbolize a more powerful or efficient approach to encoding visual information, such as deep learning models or advanced neural networks that can handle complex visual tasks.

2. **Single Visual Encoder (Cheems)**: - The right side of the image shows a smaller, less muscular Doge sitting down, representing a simpler or less powerful method of visual encoding. This could symbolize a traditional or less advanced approach, such as a single neural network or a basic encoding method that may not perform as well as more complex systems.

### Overall Meaning: The meme humorously contrasts the strength and efficiency of two different methods of visual encoding. The buff Doge represents a more advanced, powerful, and robust method, while the Cheems represents a simpler, less powerful one. This could be interpreted as a commentary on the evolution of visual encoding techniques, with deep learning and neural networks being seen as more advanced and effective compared to traditional methods.

Он точен, и я вижу в нем отличный инструмент для автокапчи или добавления alt-текстов к фотографиям.

Разработчики могут скачать модель и запустить ее на своем компьютере. Вот пример фрагмента кода для генерирования изображения из текста:

import os
import PIL.Image
import torch
import numpy as np
from transformers import AutoModelForCausalLM
from janus.models import MultiModalityCausalLM, VLChatProcessor

# specify the path to the model
model_path = "deepseek-ai/Janus-Pro-7B"
vl_chat_processor: VLChatProcessor = VLChatProcessor.from_pretrained(model_path)
tokenizer = vl_chat_processor.tokenizer

vl_gpt: MultiModalityCausalLM = AutoModelForCausalLM.from_pretrained(
    model_path, trust_remote_code=True
)
vl_gpt = vl_gpt.to(torch.bfloat16).cuda().eval()

conversation = [
    {
        "role": "<|User|>",
        "content": "A stunning princess from kabul in red, white traditional clothing, blue eyes, brown hair",
    },
    {"role": "<|Assistant|>", "content": ""},
]

sft_format = vl_chat_processor.apply_sft_template_for_multi_turn_prompts(
    conversations=conversation,
    sft_format=vl_chat_processor.sft_format,
    system_prompt="",
)
prompt = sft_format + vl_chat_processor.image_start_tag

@torch.inference_mode()
def generate(
    mmgpt: MultiModalityCausalLM,
    vl_chat_processor: VLChatProcessor,
    prompt: str,
    temperature: float = 1,
    parallel_size: int = 16,
    cfg_weight: float = 5,
    image_token_num_per_image: int = 576,
    img_size: int = 384,
    patch_size: int = 16,
):
    input_ids = vl_chat_processor.tokenizer.encode(prompt)
    input_ids = torch.LongTensor(input_ids)

    tokens = torch.zeros((parallel_size*2, len(input_ids)), dtype=torch.int).cuda()
    for i in range(parallel_size*2):
        tokens[i, :] = input_ids
        if i % 2 != 0:
            tokens[i, 1:-1] = vl_chat_processor.pad_id

    inputs_embeds = mmgpt.language_model.get_input_embeddings()(tokens)

    generated_tokens = torch.zeros((parallel_size, image_token_num_per_image), dtype=torch.int).cuda()

    for i in range(image_token_num_per_image):
        outputs = mmgpt.language_model.model(inputs_embeds=inputs_embeds, use_cache=True, past_key_values=outputs.past_key_values if i != 0 else None)
        hidden_states = outputs.last_hidden_state
        
        logits = mmgpt.gen_head(hidden_states[:, -1, :])
        logit_cond = logits[0::2, :]
        logit_uncond = logits[1::2, :]
        
        logits = logit_uncond + cfg_weight * (logit_cond-logit_uncond)
        probs = torch.softmax(logits / temperature, dim=-1)

        next_token = torch.multinomial(probs, num_samples=1)
        generated_tokens[:, i] = next_token.squeeze(dim=-1)

        next_token = torch.cat([next_token.unsqueeze(dim=1), next_token.unsqueeze(dim=1)], dim=1).view(-1)
        img_embeds = mmgpt.prepare_gen_img_embeds(next_token)
        inputs_embeds = img_embeds.unsqueeze(dim=1)

    dec = mmgpt.gen_vision_model.decode_code(generated_tokens.to(dtype=torch.int), shape=[parallel_size, 8, img_size//patch_size, img_size//patch_size])
    dec = dec.to(torch.float32).cpu().numpy().transpose(0, 2, 3, 1)

    dec = np.clip((dec + 1) / 2 * 255, 0, 255)

    visual_img = np.zeros((parallel_size, img_size, img_size, 3), dtype=np.uint8)
    visual_img[:, :, :] = dec

    os.makedirs('generated_samples', exist_ok=True)
    for i in range(parallel_size):
        save_path = os.path.join('generated_samples', "img_{}.jpg".format(i))
        PIL.Image.fromarray(visual_img[i]).save(save_path)

generate(
    vl_gpt,
    vl_chat_processor,
    prompt,
)

Я понимаю шумиху вокруг этой новой имиджевой модели. Люди утверждают, что это хорошая альтернатива Dall-E 3, но я с этим не согласен. Я сам пробовал Janus-Pro, но качество изображений оказалось не таким впечатляющим, как я думал.

Одно из ключевых ограничений - ограниченное разрешение - 384 × 384 пикселей. Кроме того, относительно низкое разрешение для генерации изображений в сочетании с потерями при восстановлении, вызванными токенизатором зрения, может привести к тому, что изображения не будут обладать той степенью детализации, которую ожидают многие пользователи.

Тем не менее, быстрое появление таких моделей с открытым исходным кодом, как Janus-Pro, свидетельствует о том, что DeepSeek уже позиционирует себя как грозного разрушителя в ИИ-гонке. Несмотря на существующие ограничения по качеству, их стремление к доступным, открытым инновациям, несомненно, заставит лидеров отрасли искать способы адаптации.

Друзья, буду рад, если вы подпишетесь на мой телеграм-канал про нейросети, чтобы не пропускать анонсы статей, и канал с советами для тех, кто только учится работать с нейросетями - я стараюсь делиться только полезной информацией.

Комментарии (8)


  1. blik13
    29.01.2025 08:42

    Шестипальцевая девушка на заглавном фото это приглашение в комменты?


    1. NeyroEntuziast Автор
      29.01.2025 08:42

      Конечно ). Тем более не так уж все так хорошо )


  1. Baofu91
    29.01.2025 08:42

    a chessboard, view from above, chess pieces are in a starting position, black and white, minimalistic

    Скрытый текст
    dall-e
    dall-e
    deepseek
    deepseek


  1. FreakII
    29.01.2025 08:42

    На Хабре объявлена неделя DeepSeek. Количество постов про китайский хлам увеличилось в двести раз


  1. gigimon
    29.01.2025 08:42

    Зато картинки от januspro выглядят хоть и с кучей артефактов, но похожи на фото, чем на нарисованное и очень сглаженное, как у dall-e


  1. F1eex
    29.01.2025 08:42

    Хочется примеров не людей или животных а техники. Например летящего самолета в небе над облаками. Интересно, сколько будет двигателей и крыльев)


    1. Rexvil
      29.01.2025 08:42

      демо-версию Gradio на HuggingFace.

      промт дословно из вашего комментария: flying plane in the sky above the clouds

      Скрытый текст

      единственное из пяти сгенерированных изображений, похожее на самолет


      1. F1eex
        29.01.2025 08:42

        Что ж, пока что жаль. Stable Diffusion тоже делал красивые картинки людей, но вот сгенереная техника для кислотного полу гигеровского киберпанка годилась разве что. )