Модель 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
Новая модель также лучше справляется с рендерингом текстов.
Промпт: 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.
Серия Janus-Pro включает в себя два размера моделей: 1 миллиард и 7 миллиардов, показывая масштабируемость метода визуального кодирования и декодирования. Разрешение изображения, генерируемого обеими моделями, составляет 384 × 384.
Что касается коммерческого лицензирования, то данная модель доступна с разрешительной лицензией как для научного, так и для коммерческого использования.
Технические детали о Janus-Pro
Janus-Pro использует отдельные методы визуального кодирования для задач мультимодального понимания и визуальной генерации. Такая структура направлена на смягчение конфликтов между этими двумя задачами и повышение общей производительности.
Для мультимодального понимания Janus-Pro использует кодировщик SigLIP для извлечения высокоразмерных семантических признаков из изображений, которые затем сопоставляются с входным пространством LLM с помощью адаптера понимания.
Для визуальной генерации модель использует токенизатор VQ для преобразования изображений в дискретные идентификаторы, которые затем отображаются на входное пространство LLM с помощью адаптера генерации.
При выполнении инструкций по преобразованию текста в изображение 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.
Промпт: 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.
Промпт: An image of a little boy holding a white board with the text “AI is awesome!”
Судя по приведенным выше примерам, Dall-E 3 явно работает лучше, чем Janus Pro. Пропорции лиц и тел на выходе Janus Pro заметно нарушены, а примеры рендеринга текста говорят о том, что и в этой области он испытывает трудности.
Вполне возможно, что я что-то упускаю - возможно, для улучшения результатов требуются особые параметры или тонкая настройка. Однако при настройках по умолчанию результат кажется неудовлетворительным.
Как получить доступ к Janus-Pro?
DeepSeek выпустила Janus в открытый доступ на HuggingFace, чтобы поддержать более широкий и разнообразный спектр исследований как в научных, так и в коммерческих сообществах.
Janus-1.3B: Hugging Face
JanusFlow-1.3B: Hugging Face
Janus-Pro-1B: Hugging Face
Janus-Pro-7B: Hugging Face link
Обратите внимание, что модель Janus-Pro с 7 миллиардами параметров может съесть почти 15 гигабайт вашей внутренней памяти.
Если вы не хотите запускать модель на собственном оборудовании, вы можете просто запустить демо-версию Gradio на HuggingFace.
Пользоваться им довольно просто. Просто опишите изображение, которое вы хотите сгенерировать, и нажмите на кнопку «Generate image». Скорость генерации зависит от количества пользователей, одновременно использующих приложение.
Также вы можете попробовать функцию мультимодального понимания, загрузив изображение и попросив ИИ описать его. Вот пример:
Промпт: Explain this meme
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 уже позиционирует себя как грозного разрушителя в ИИ-гонке. Несмотря на существующие ограничения по качеству, их стремление к доступным, открытым инновациям, несомненно, заставит лидеров отрасли искать способы адаптации.
Друзья, буду рад, если вы подпишетесь на мой телеграм-канал про нейросети, чтобы не пропускать анонсы статей, и канал с советами для тех, кто только учится работать с нейросетями - я стараюсь делиться только полезной информацией.