AI多模態教程:DeepSeek多模態模型解析及實踐指南

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

AIGCmagic社區知識星球

截至目前,星球內已經累積了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內容!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71734.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71734.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71734.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【銀河麒麟高級服務器操作系統實例】虛擬機橋接網絡問題分析及處理

更多銀河麒麟操作系統產品及技術討論,歡迎加入銀河麒麟操作系統官方論壇 https://forum.kylinos.cn 了解更多銀河麒麟操作系統全新產品,請點擊訪問 麒麟軟件產品專區:https://product.kylinos.cn 開發者專區:https://developer…

使用騰訊ncnn加速推理yolo v9對比opencv dnn

前面博客 【opencv dnn模塊 示例(25) 目標檢測 object_detection 之 yolov9 介】 紹了 yolov9 詳細使用方式,重參數化、導出端到端模型,使用 torch、opencv、tensorrt 以及 paddle 的測試。 由于存在移動端推理部署的需求,需要進行加速處理&…

前端小食堂 | Day10 - 前端路由の時空裂隙

??? 今日穿梭指南:兩種維度の路由宇宙 1. Hash 模式:錨點の量子隧道 // 手動創建路由監聽器 window.addEventListener(hashchange, () => {const path = location.hash.slice(1) || /; console.log(進入哈希宇宙:, path); renderComponent(path); }); // 編程…

C語言學習筆記-進階(7)字符串函數3

1. strstr的使用和模擬實現 char * strstr ( const char * str1, const char * str2); Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. (函數返回字符串str2在字符串str1中第?次出現的位置&#x…

HarmonyOS Next 屬性動畫和轉場動畫

HarmonyOS Next 屬性動畫和轉場動畫 在鴻蒙應用開發中,動畫是提升用戶體驗的關鍵要素。通過巧妙運用動畫,我們能讓應用界面更加生動、交互更加流暢,從而吸引用戶的注意力并增強其使用粘性。鴻蒙系統為開發者提供了豐富且強大的動畫開發能力&…

PHP:phpstudy無法啟動MySQL服務問題解決

文章目錄 一、問題說明二、解決問題 一、問題說明 我的Windows10系統,之前安裝過MySQL5.7的版本。 然后,用phpstudy安裝MySQL8,并啟動MySQL8。 發生無法啟動的情況。 二、解決問題 1、刪除本地MySQL7的服務 net stop MySQL //這里的服務名…

Nginx(基礎安裝+配置文件)

目錄 一.Nginx基礎 1.基礎知識點 2.異步非阻塞機制 二.Nginx安裝 2.1安裝nginx3種方式 1.包管理工具安裝(yum/apt) 2.本地包安裝(rpm/dpkg) 3.源碼編譯安裝 3.1 源碼編譯安裝nginx流程(ubuntu) 1.…

C++ Windows下屏幕截圖

屏幕截圖核心代碼(如果要求高幀率,請使用DxGI): // RGB到YUV的轉換公式 #define RGB_TO_Y(r, g, b) ((int)((0.299 * (r)) (0.587 * (g)) (0.114 * (b)))) #define RGB_TO_U(r, g, b) ((int)((-0.169 * (r)) - (0.331 * (g)) …

修改jupyter notebook的工作空間

今天,我之前R配置jupyter工作空間,講了各種語言內核分配不同的工作空間,雖然是方便管理,但有個問題就是需要每次都進入C盤的配置文件找到notebook的工作空間設置路徑打開修改嘛。 因此,今天我編寫了一個python腳本&am…

江科大51單片機筆記【9】DS1302時鐘可調時鐘(下)

在寫代碼前,記得把上一節的跳線帽給插回去,不然LCD無法顯示 一.DS1302時鐘 1.編寫DS1302.c文件 (1)重新對端口定義名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因為…

電商行業門店管理軟件架構設計與數據可視化實踐

一、行業痛點與核心訴求 在電商多平臺運營成為主流的背景下,企業普遍面臨三大管理難題: ?數據碎片化:某頭部服飾品牌2023年運營報告顯示,其分布在8個平臺的162家門店,日均產生23萬條訂單數據,但財務部門需要5個工作日才能完成跨平臺利潤核算。?成本核算失真:行業調研…

創新算法!BKA-Transformer-BiLSTM黑翅鳶優化算法多變量時間序列預測

創新算法!BKA-Transformer-BiLSTM黑翅鳶優化算法多變量時間序列預測 目錄 創新算法!BKA-Transformer-BiLSTM黑翅鳶優化算法多變量時間序列預測預測效果基本介紹BKA-Transformer-BiLSTM黑翅鳶優化算法多變量時間序列預測一、引言1.1、研究背景和意義1.2、…

leetcode 95.不同的二叉搜索樹 Ⅱ

首先分析一下什么是二叉搜索樹。因為我本科學習數據結構的時候就是單純背了一下題庫,考試非常簡單。現在額外補充學一些之前自己沒有學過的內容。有序向量可以二分查找,列表可以快速插入和刪除。二叉搜索樹可以實現按照關鍵碼訪問。call by key .數據表現…

數據安全防線:備份文件的重要性與自動化實踐

在數字化時代,信息已成為企業運營和個人生活的核心資源。無論是企業的核心數據、客戶的敏感信息,還是個人的珍貴照片、重要文檔,這些數據一旦丟失或受損,都可能帶來不可估量的損失。因此,備份文件的重要性不言而喻&…

碰一碰發視頻系統之寫卡功能開發了,支持OEM

一、引言 在碰一碰發視頻系統中,NFC(Near Field Communication,近場通信)技術扮演著關鍵角色。其中,寫卡功能是實現用戶與系統便捷交互的重要環節,通過將特定的視頻相關信息寫入 NFC 標簽,用戶…

【數據結構初階第十八節】八大排序系列(上篇)—[詳細動態圖解+代碼解析]

看似不起眼的日復一日,總會在某一天讓你看到堅持的意義。??????云邊有個稻草人-CSDN博客 hello,好久不見! 目錄 一. 排序的概念及運用 1. 概念 2. 運用 3. 常見排序算法 二. 實現常見排序算法 1. 插入排序 (1&…

python爬蟲系列課程8:js瀏覽器window對象屬性

python爬蟲系列課程8:js瀏覽器window對象屬性 一、JavaScript的組成二、document常見屬性對象三、navigator對象一、JavaScript的組成 JavaScript可以分為三個部分:ECMAScript標準、DOM、BOM。 ECMAScript標準:即JS的基本語法,JavaScript的核心,描述了語言的基本語法和數…

快速使用PPASR V3版不能語音識別框架

前言 本文章主要介紹如何快速使用PPASR語音識別框架訓練和推理,本文將致力于最簡單的方式去介紹使用,如果使用更進階功能,還需要從源碼去看文檔。僅需三行代碼即可實現訓練和推理。 源碼地址:https://github.com/yeyupiaoling/P…

cannon g3810打印機設置

現在AI這么厲害,是不是很少人來這里搜索資料了。 不過我還是寫一下。 買了一臺cannon g3810打印機。一直都用USB打印,今天突然想用手機打印。于是又折騰了兩個小時,終于折騰完了。 步驟如下: [1]打開官網,下載佳能…

使用 Arduino 和 ThingSpeak 通過 Internet 進行心跳監測

使用 Arduino 和 ThingSpeak 通過 Internet 進行心跳監測 在這個項目中,我們將使用 Arduino 制作一個心跳檢測和監測系統,該系統將使用脈搏傳感器檢測心跳,并在與其連接的 LCD 上顯示 BPM(每分鐘心跳次數)讀數。它還將使用 Wi-Fi 模塊ESP8266將讀數發送到 ThingSpeak 服務…