AIGCmagic社區知識星球是國內首個以AIGC全棧技術與商業變現為主線的學習交流平臺,涉及AI繪畫、AI視頻、大模型、AI多模態、數字人以及全行業AIGC賦能等100+應用方向。星球內部包含海量學習資源、專業問答、前沿資訊、內推招聘、AI課程、AIGC模型、AIGC數據集和源碼等干貨。

截至目前,星球內已經累積了2000+AICG時代的前沿技術、干貨資源以及學習資源;涵蓋了600+AIGC行業商業變現的落地實操與精華報告;完整構建了以AI繪畫、AI視頻、大模型、AI多模態以及數字人為核心的AIGC時代五大技術方向架構,其中包含近500萬字完整的AIGC學習資源與實踐經驗。
論文鏈接:Janus/janus_pro_tech_report.pdf at main · deepseek-ai/Janus · GitHub
前言
Janus 是 DeepSeek 團隊提出的一個統一多模態理解與生成的模型,能夠在單一模型中實現圖像理解和文本到圖像生成的雙重任務。在多模態理解方面,Janus可以處理圖像描述、視覺問答(VQA)、地標識別、文字識別等多種任務;在多模態生成方面,Janus也可以根據輸入的文本描述生成高質量的圖片。Janus-Pro是其最新的升級版本。
Janus的核心創新點在于將多模態理解與生成的視覺編碼進行解耦,從而緩解了這兩個任務潛在存在的沖突。Janus-Pro在此基礎上,優化訓練策略(包括增加訓練步數、調整數據配比等)、增加數據(包括使用合成數據等)、擴大模型規模(擴大到70億參數),從而同時提高了模型的多模態理解和生成能力。
Janus 模型架構
Janus和Janus-Pro結構一致,均使用兩個獨立的編碼器來理解和生成圖像,而不像之前的做法依賴單個編碼器來處理這兩項任務。對于圖像理解,Janus 使用 SigLIP 編碼器將圖像轉換為豐富的語義特征;而對于圖像生成,Janus 使用 VQ Tokenizer 將圖像轉換為離散標記。這種解耦的設計帶來兩個收益:
1)將多模態理解與生成的視覺編碼解耦,緩解了多模態理解和生成不同粒度需求的沖突;
2)理解和生成任務都可以分別采用各領域最先進的編碼技術,可輸入其他模態例如點云或音頻數據,并使用統一的Transformer進行處理。
對于純文本理解、多模態理解和視覺生成任務,Janus采用獨立的編碼方法將原始輸入轉換為特征,然后通過統一的自回歸 Transformer 進行處理。具體來說:
文本理解:使用大語言模型(LLM)內置的分詞器將文本轉換為離散的 ID,并獲取每個 ID 對應的特征表示。
多模態理解:使用 SigLIP 視覺編碼器從圖像中提取高維語義特征。這些特征從 2D 網格展平為 1D 序列,并通過一個兩層MLP的理解適配器Adaptor將這些圖像特征映射到 LLM 的輸入空間。
視覺生成:使用 VQ Tokenizer將圖像轉換為離散的 ID。將 ID 序列展平為 1D 后,使用一個生成適配器Adaptor將每個 ID 對應的碼本嵌入映射到 LLM 的輸入空間。然后,將這些特征序列連接起來,形成一個多模態特征序列,隨后輸入到 LLM 中進行處理。
在純文本理解和多模態理解任務中,Janus都是使用 LLM 內置的預測頭進行文本預測;而在視覺生成任務中,Janus使用隨機初始化的預測頭進行圖像預測。整個模型是使用 Next-Token-Prediction 的方式進行訓練的,采用 causal attention mask,和 LLM 的訓練方式一致,遵循自回歸框架。
Janus代碼解析
代碼目錄:PaddleMIX/paddlemix/models/janus at develop · PaddlePaddle/PaddleMIX · GitHub
(1)文本生成代碼
調用模型的 generate 方法生成回答。
輸入參數包括:
- input_ids: 文本輸入的 token ID 序列。
- inputs_embeds: 處理后的嵌入向量。
- position_ids: 位置 ID 序列。
- attention_mask: 注意力掩碼,用于指示哪些位置是有效的輸入。
- pad_token_id, bos_token_id, eos_token_id: 分別表示填充、開始和結束的特殊 token ID。
- max_new_tokens: 最大生成的新 token 數量,這里設置為 128。
- do_sample: 是否使用采樣生成文本,這里設置為 False,表示使用貪婪解碼。
- use_cache: 是否使用緩存機制加速生成。
(2)圖像生成代碼
1.方法: generate
2.參數:
- mmgpt:JanusMultiModalityCausalLM類就是一個Janus模型的實例,負責生成圖像和文本。
- vl_chat_processor: 多模態對話處理器,用于處理文本和圖像的輸入。
- prompt: 輸入的文本提示,用于引導圖像生成。
- temperature: 采樣溫度,控制生成的隨機性。值越低,生成結果越穩定。
- parallel_size: 并行生成的圖像數量。
- cfg_weight: Classifier-Free Guidance(CFG)權重,用于控制條件生成和無條件生成的混合比例。
- image_token_num_per_image: 每張圖像對應的 token 數量。
- img_size: 生成圖像的尺寸。
- patch_size: 圖像分割的 patch 尺寸。
3.步驟:
1)文本處理:使用vl_chat_processor的分詞器將文本提示編碼為輸入ID,然后轉換為Paddle張量。
2)初始化token:創建一個用于存儲輸入token和生成圖像token的張量。對于并行生成的每個樣本,都復制輸入token,并在奇數索引的樣本中插入填充token。
3)輸入Embedding:將token轉換為模型可以理解的Embedding形式。
4)生成圖像token:通過一個循環,逐步生成圖像的每個token。在每個步驟中:
- ·更新position id 以反映當前token生成的位置序號。
- ·使用模型的語言模型部分生成下一個token的概率分布。
- ·根據條件和無條件生成的 logits 以及溫度調整概率分布。
- ·使用paddle.multinomial根據調整后的概率分布采樣下一個token。
- ·使用生成的token生成圖像Embedding,并更新輸入Embedding以用于下一次迭代。
5)解碼圖像:將生成的圖像token解碼為圖像數據。
6)后處理和保存:將解碼后的圖像數據標準化為0-255之間的整數,并保存為JPEG文件。
Janus快速體驗
飛槳星河社區教程鏈接:
【PaddleMIX】快速體驗DeepSeek的多模態理解生成模型 - 飛槳AI Studio星河社區
我們以Janus-Pro-1B為例,在單卡V100上只需7G顯存即可推理完成圖像理解和圖像生成。
下載 PaddleMIX代碼庫:
# clone PaddleMIX代碼庫
git clone https://github.com/PaddlePaddle/PaddleMIX.gitcd PaddleMIX
安裝PaddlePaddle環境
# 提供三種 PaddlePaddle 安裝命令示例,也可參考PaddleMIX主頁的安裝教程進行安裝# 3.0.0b2版本安裝示例 (CUDA 11.8)
python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/# Develop 版本安裝示例
python -m pip install paddlepaddle-gpu==0.0.0.post118 -f https://www.paddlepaddle.org.cn/whl/linux/gpu/develop.html# sh 腳本快速安裝
sh build_paddle_env.sh
安裝PaddleMIX環境
# 提供兩種 PaddleMIX 依賴安裝命令示例# pip 安裝示例,安裝paddlemix、ppdiffusers、項目依賴、paddlenlp
python -m pip install -e . --user
python -m pip install -e ppdiffusers --user
python -m pip install -r requirements.txt --user
python -m pip install paddlenlp==3.0.0b3 --user# sh 腳本快速安裝
sh build_env.sh
圖像理解命令
# Janus/Janus-Pro understanding
python paddlemix/examples/janus/run_understanding_inference.py \--model_path="deepseek-ai/Janus-Pro-1B" \--image_file="paddlemix/demo_images/examples_image1.jpg" \--question="描述一下這個圖片。" \--dtype="bfloat16"
結果:
這張圖片展示了一只紅熊貓,它正趴在木板上,背景是一些樹枝和綠色的樹葉。紅熊貓的毛色主要是棕色和白色,它的耳朵和臉部有明顯的白色毛發,眼睛周圍有白色的斑紋。紅熊貓看起來非常可愛,它似乎在休息或觀察周圍的環境。
圖像生成命令
# Janus/Janus-Pro generation
python paddlemix/examples/janus/run_generation_inference.py \--model_path="deepseek-ai/Janus-Pro-1B" \--prompt="江邊有一艘船。" \--dtype="bfloat16"
結果:
PaddleMIX中已經復現了Janus 和 Janus-Pro 的推理流程,通過解析代碼我們也更深入地理解模型的實現細節和技術創新,跟著教程鏈接一起動手實踐一下吧!
推薦閱讀
AIGCmagic社區介紹:
2025年《AIGCmagic社區知識星球》五大AIGC方向全新升級!
AI多模態核心架構五部曲:
AI多模態模型架構之模態編碼器:圖像編碼、音頻編碼、視頻編碼
AI多模態模型架構之輸入投影器:LP、MLP和Cross-Attention
AI多模態模型架構之LLM主干(1):ChatGLM系列
AI多模態模型架構之LLM主干(2):Qwen系列
AI多模態模型架構之LLM主干(3):Llama系列 ?
2025年《AIGCmagic社區知識星球》五大AIGC方向全新升級!
AI多模態模型架構之模態生成器:Modality Generator
AI多模態實戰教程:
AI多模態教程:從0到1搭建VisualGLM圖文大模型案例
AI多模態教程:Mini-InternVL1.5多模態大模型實踐指南
AI多模態教程:Qwen-VL升級版多模態大模型實踐指南
AI多模態實戰教程:面壁智能MiniCPM-V多模態大模型問答交互、llama.cpp模型量化和推理
技術交流
加入「AIGCmagic社區」,一起交流討論,涉及AI視頻、AI繪畫、數字人、多模態、大模型、傳統深度學習、自動駕駛等多個不同方向,可私信或添加微信號:【lzz9527288】,備注不同方向邀請入群!
更多精彩內容,盡在「AIGCmagic社區」,關注了解全棧式AIGC內容!