CogView4 文本生成圖像

CogView4 文本生成圖像

flyfish

基于 CogView4Pipeline 的圖像生成程序,其主要目的是依據 JSON 文件里的文本提示信息來生成圖像,并且把生成的圖像保存到指定文件夾。
JSON 文件格式

[{"prompt": "your first prompt"},{"prompt": "your second prompt"}
]

從源代碼安裝diffusers

pip install git+https://github.com/huggingface/diffusers.git

分辨率: 長寬均需滿足 512px - 2048px 之間,需被32整除, 并保證最大像素數不超過 2^21 px。
精度: BF16 / FP32 (不支持FP16,會出現溢出導致純黑圖片)

import json
import torch
import os
from datetime import datetime
import random
import string
import argparse
from diffusers import CogView4Pipeline# 單例模式配置類
class ConfigSingleton:_instance = Nonedef __new__(cls):if cls._instance is None:cls._instance = super().__new__(cls)parser = argparse.ArgumentParser(description='Image generation configuration')parser.add_argument('--model_path', default='/media/models/ZhipuAI/CogView4-6B/',help='Path to the model')parser.add_argument('--height', type=int, default=1024, help='Height of the generated images')parser.add_argument('--width', type=int, default=1024, help='Width of the generated images')parser.add_argument('--guidance_scale', type=float, default=3.5,help='Guidance scale for image generation')parser.add_argument('--num_inference_steps', type=int, default=50,help='Number of inference steps')parser.add_argument('--num_images_per_prompt', type=int, default=10,help='Number of images to generate per prompt')parser.add_argument('--json_file', default='DonQuixotedelaMancha.json',help='Path to the JSON file containing prompts')parser.add_argument('--save_folder', default='generated_images',help='Folder to save the generated images')args = parser.parse_args()cls._instance.config = {"save_folder": args.save_folder,"filename_timestamp_format": "%Y%m%d_%H%M%S","random_char_count": 6,"model_path": args.model_path,"height": args.height,"width": args.width,"guidance_scale": args.guidance_scale,"num_inference_steps": args.num_inference_steps,"num_images_per_prompt": args.num_images_per_prompt,"json_file": args.json_file}os.makedirs(cls._instance.config["save_folder"], exist_ok=True)return cls._instancedef get_config(self):return self.config# 數據加載器類
class DataLoader:def __init__(self, config):self.config = configdef load_data(self):try:with open(self.config["json_file"], 'r') as f:return json.load(f)except FileNotFoundError:print(f"Error: The JSON file '{self.config['json_file']}' was not found.")return []except json.JSONDecodeError:print(f"Error: Failed to decode the JSON file '{self.config['json_file']}'.")return []# 模型管道初始化類
class PipelineInitializer:def __init__(self, config):self.config = configdef initialize_pipeline(self):pipe = CogView4Pipeline.from_pretrained(self.config["model_path"],torch_dtype=torch.bfloat16)# 將模型移到 GPU 上pipe = pipe.to("cuda")pipe.vae.enable_slicing()pipe.vae.enable_tiling()return pipe# 文件名生成器類
class FilenameGenerator:def __init__(self, config):self.config = configdef generate_unique_filename(self):timestamp = datetime.now().strftime(self.config["filename_timestamp_format"])random_chars = ''.join(random.choices(string.ascii_letters + string.digits, k=self.config["random_char_count"]))return f"{timestamp}_{random_chars}.png"# 圖像生成和保存類
class ImageGeneratorAndSaver:def __init__(self, pipe, config):self.pipe = pipeself.config = configself.filename_generator = FilenameGenerator(config)def generate_and_save_images(self, data):# 使用 CUDA 生成器generator = torch.Generator("cuda")for i, item in enumerate(data):prompt = item["prompt"]try:result = self.pipe(prompt=prompt,guidance_scale=self.config["guidance_scale"],num_images_per_prompt=self.config["num_images_per_prompt"],num_inference_steps=self.config["num_inference_steps"],width=self.config["width"],height=self.config["height"],generator=generator)for j in range(len(result.images)):filename = self.filename_generator.generate_unique_filename()file_path = os.path.join(self.config["save_folder"], filename)result.images[j].save(file_path)print(f"Saved {file_path} for prompt: {prompt}")except Exception as e:print(f"Error generating image for prompt '{prompt}': {e}")# 主類,協調各個組件
class ImageGenerationManager:def __init__(self):self.config = ConfigSingleton().get_config()self.data_loader = DataLoader(self.config)self.pipeline_initializer = PipelineInitializer(self.config)def run(self):data = self.data_loader.load_data()if not data:returnpipe = self.pipeline_initializer.initialize_pipeline()image_generator = ImageGeneratorAndSaver(pipe, self.config)image_generator.generate_and_save_images(data)if __name__ == "__main__":manager = ImageGenerationManager()manager.run()

整體流程

程序首先對配置參數進行初始化,接著加載提示信息,然后初始化模型管道,之后按照提示信息生成圖像并保存,最后將生成的圖像保存到指定文件夾。整個過程由 ImageGenerationManager 類進行協調管理。

1. 配置參數初始化

  • 單例模式配置類 ConfigSingleton
    • 借助 argparse 模塊解析命令行參數,這些參數涵蓋了模型路徑、圖像的高度和寬度、引導比例、推理步數、每個提示生成的圖像數量、包含提示信息的 JSON 文件路徑以及保存生成圖像的文件夾路徑。
    • 把解析后的參數存儲在 config 字典中,同時創建保存圖像的文件夾(若該文件夾不存在)。

2. 數據加載

  • 數據加載器類 DataLoader
    • 接收配置信息作為輸入。
    • 嘗試打開并讀取 JSON 文件,若文件不存在或者解析失敗,會輸出相應的錯誤信息并返回空列表。

3. 模型管道初始化

  • 模型管道初始化類 PipelineInitializer
    • 接收配置信息作為輸入。
    • 利用 CogView4Pipeline.from_pretrained 方法加載預訓練模型,并將其數據類型設定為 torch.bfloat16
    • 把模型移到 GPU 上(使用 pipe.to("cuda")),開啟 vae 的切片和分塊功能以減少 GPU 內存的使用。

4. 文件名生成

  • 文件名生成器類 FilenameGenerator
    • 接收配置信息作為輸入。
    • 生成獨一無二的文件名,文件名由當前時間戳和隨機字符組合而成。

5. 圖像生成與保存

  • 圖像生成和保存類 ImageGeneratorAndSaver
    • 接收模型管道和配置信息作為輸入。
    • 針對 JSON 文件中的每個提示信息:
      • 運用 torch.Generator("cuda") 創建一個 CUDA 隨機數生成器。
      • 調用模型管道的 pipe 方法生成圖像,傳入提示信息、引導比例、推理步數、圖像的高度和寬度等參數。
      • 為每張生成的圖像生成一個唯一的文件名,并將其保存到指定文件夾,同時輸出保存信息。
      • 若生成圖像時出現異常,會輸出相應的錯誤信息。

6. 主程序執行

  • 主類 ImageGenerationManager
    • 初始化配置信息、數據加載器和模型管道初始化器。
    • 調用 run 方法:
      • 加載 JSON 文件中的提示信息。
      • 若提示信息不為空,初始化模型管道。
      • 創建圖像生成和保存類的實例,并調用其 generate_and_save_images 方法生成并保存圖像。

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

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

相關文章

路由重發布

路由重發布 實驗目標: 掌握路由重發布的配置方法和技巧; 掌握通過路由重發布方式實現網絡的連通性; 熟悉route-pt路由器的使用方法; 實驗背景:假設學校的某個分區需要配置簡單的rip協議路由信息,而主校…

機器人領域和心理學領域 恐怖谷 是什么

機器人領域和心理學領域 恐怖谷 是什么 恐怖谷是一個在機器人領域和心理學領域備受關注的概念,由日本機器人專家森政弘于1970年提出。 含義 當機器人與人類的相似度達到一定程度時,人類對它們的情感反應會突然從積極變為消極,產生一種毛骨悚然、厭惡恐懼的感覺。這種情感…

Go-GJSON 組件,解鎖 JSON 讀取新姿勢

現在的通義靈碼不但全面支持 Qwen3,還支持配置自己的 MCP 工具,還沒體驗過的小伙伴,馬上配置起來啦~ https://click.aliyun.com/m/1000403618/ 在 Go 語言開發領域,json 數據處理是極為常見的任務。Go 標準庫提供了 encoding/jso…

數據分析_數據預處理

1 數據預處理流程 ①數據清洗:處理數據缺失、數據重復、數據異常等問題,提升數據質量. ②數據轉換:涵蓋基本數據轉換、語義數據轉換、衍生數據轉換和隱私數據轉換,適配分析需求. ③數據集成:整合多源數據. 2 數據清洗 2.1 數據缺失 2.1.1 數值型數據缺失 數值型列的部分數值不…

vue +xlsx+exceljs 導出excel文檔

實現功能:分標題行導出數據過多,一個sheet表里表格條數有限制,需要分sheet顯示。 步驟1:安裝插件包 npm install exceljs npm install xlsx 步驟2:引用包 import XLSX from xlsx; import ExcelJS from exceljs; 步驟3&am…

ThinkPad T440P如何從U盤安裝Ubuntu24.04系統

首先制作一個安裝 U 盤。我使用的工具是 Rufus ,它的官網是 rufus.ie ,去下載最新版就可以了。直接打開這個工具,選擇自己從ubuntu官網下載Get Ubuntu | Download | Ubuntu的iso鏡像制作U盤安裝包即可。 其次安裝之前,還要對 Thi…

第十七次博客打卡

今天學習的內容是動態規劃算法。 動態規劃算法(Dynamic Programming,簡稱 DP)是一種通過將復雜問題分解為更小的子問題來求解的算法思想。它主要用于解決具有重疊子問題和最優子結構特性的問題。 一、動態規劃的基本概念 1. 最優子結構 一個復…

視覺革命來襲!ComfyUI-LTXVideo 讓視頻創作更高效

探索LTX-Video 支持的ComfyUI 在數字化視頻創作領域,視頻制作效果的提升對創作者來說無疑是一項重要的突破。LTX-Video支持的ComfyUI便是這樣一款提供自定義節點的工具集,它專為改善視頻質量、提升生成速度而開發。接下來,我們將詳細介紹其功…

Java版ERP管理系統源碼(springboot+VUE+Uniapp)

ERP系統是企業資源計劃(Enterprise Resource Planning)系統的縮寫,它是一種集成的軟件解決方案,用于協調和管理企業內各種關鍵業務流程和功能,如財務、供應鏈、生產、人力資源等。它的目標是幫助企業實現資源的高效利用…

CenOS7切換使用界面

永久切換 在開始修改之前,我們首先需要查看當前的啟動模式。可以通過以下命令來實現: systemctl get-default執行此命令后,系統會返回當前的默認啟動模式,例如graphical.target表示當前默認啟動為圖形界面模式。 獲取root權限&…

Dify使用總結

最近完成了一個Dify的項目簡單進行總結下搭建服務按照官方文檔操作就行就不寫了。 進入首頁之后由以下組成: 探索、工作室、知識庫、工具 探索: 可以展示自己創建的所有應用,一個應用就是一個APP,可以進行測試使用 工作室包含…

計網學習筆記———網絡

🌿網絡是泛化的概念 網絡是泛化的概念 🍂泛化理解 網絡的概念在生活中無處不在舉例:社交網絡、電話網路、電網、計算機網絡 🌿網絡的定義 定義: 離散的個體通過通訊手段連成群體,實現資源的共享與交流、個…

《Python星球日記》 第53天:卷積神經網絡(CNN)入門

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 目錄 一、圖像表示與通道概念1. 數字圖像的本質2. RGB顏色模型3. 圖像預處理 二、卷積…

SpringBoot2集成xxl-job詳解

官方教程 搭建調度中心 Github Gitee 注:版本3.x開始要求Jdk17;版本2.x及以下支持Jdk1.8。如對Jdk版本有訴求,可選擇接入不同版本 clone源代碼執行xxl-job\doc\db\tables_xxl_job.sql # # XXL-JOB v2.4.1 # Copyright (c) 2015-present, x…

HashMap中put()方法的執行流程

HashMap 是 Java 中最常用的數據結構之一,用于存儲鍵值對。其 put() 方法是向哈希表中插入或更新鍵值對的核心操作。本文將詳細解析 put() 方法的執行過程,涵蓋哈希值計算、桶定位、沖突處理和擴容等步驟。 一、put() 方法的執行過程 put() 方法通過一系…

【Oracle認證】MySQL 8.0 OCP 認證考試英文版(MySQL30 周年版)

文章目錄 1、MySQL OCP考試介紹2、考試注冊流程3、考試復習題庫 Oracle 為慶祝 MySQL 30 周年,截止到2025.07.31 之前。所有人均可以免費考取原價245美元 (約1500)的MySQL OCP 認證。 1、MySQL OCP考試介紹 OCP考試 OCP認證是Oracle公司推…

SpringBoot框架開發網絡安全科普系統開發實現

概述 基于SpringBoot框架的網絡安全科普系統開發指南,該系統集知識科普、案例學習、在線測試等功能于一體,本文將詳細介紹系統架構設計、功能實現及技術要點,幫助開發者快速構建專業的網絡安全教育平臺。 主要內容 系統功能架構 本系統采…

瀏覽器HTTP錯誤、前端常見報錯 和 Java后端報錯

以下是 瀏覽器HTTP錯誤、前端常見報錯 和 Java后端報錯 的綜合整理,包括原因和解決方法,幫助你快速排查問題。 一、HTTP 錯誤(瀏覽器報錯) 錯誤碼原因解決方法400 Bad Request請求語法錯誤(如參數格式錯誤、請求體過…

TypeScript簡介

🌟 TypeScript入門 TypeScript 是 JavaScript 的超集,由微軟開發并維護,通過靜態類型檢查和現代語言特性,讓大型應用開發變得更加可靠和高效。 // 一個簡單的 TypeScript 示例 interface User {name: string;age: number;greet():…

[ctfshow web入門] web57

信息收集 這下把.也過濾了&#xff0c;臨時文件上傳無法使用了 //flag in 36.php if(isset($_GET[c])){$c$_GET[c];if(!preg_match("/\;|[a-z]|[0-9]|\|\|\#|\|\"|\|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\|\[/i", $c)){system("cat ".$c…