使用Python進行AI圖像生成:從GAN到風格遷移的完整指南

AI圖像生成是一個非常有趣且前沿的領域,結合了深度學習和計算機視覺技術。以下是一些使用Python和相關庫進行AI圖像生成的創意和實現思路:

1. 使用GAN(生成對抗網絡)

基本概念:GAN由兩個神經網絡組成:生成器和判別器。生成器嘗試生成逼真的圖像,而判別器則試圖區分真實圖像和生成圖像。

在這里插入圖片描述

實現步驟

  • 安裝必要的庫:

    pip install tensorflow keras matplotlib
    
  • 訓練一個簡單的GAN模型。例如,可以使用MNIST數據集來生成手寫數字。

  • 代碼示例:

    import numpy as np
    import matplotlib.pyplot as plt
    from keras.datasets import mnist
    from keras.models import Sequential
    from keras.layers import Dense, Reshape, Flatten, Dropout
    from keras.optimizers import Adam# 加載數據集
    (X_train, _), (_, _) = mnist.load_data()
    X_train = X_train / 255.0
    X_train = X_train.reshape(X_train.shape[0], 784)  # 將圖片展平# 創建生成器
    def create_generator():model = Sequential()model.add(Dense(256, input_dim=100, activation='relu'))model.add(Dense(512, activation='relu'))model.add(Dense(1024, activation='relu'))model.add(Dense(784, activation='sigmoid'))model.add(Reshape((28, 28)))return model# 創建判別器
    def create_discriminator():model = Sequential()model.add(Flatten(input_shape=(28, 28)))model.add(Dense(512, activation='relu'))model.add(Dropout(0.3))model.add(Dense(256, activation='relu'))model.add(Dense(1, activation='sigmoid'))return model# 構建GAN
    generator = create_generator()
    discriminator = create_discriminator()
    discriminator.compile(loss='binary_crossentropy', optimizer=Adam(), metrics=['accuracy'])discriminator.trainable = False
    gan_input = Input(shape=(100,))
    generated_image = generator(gan_input)
    gan_output = discriminator(generated_image)
    gan = Model(gan_input, gan_output)
    gan.compile(loss='binary_crossentropy', optimizer=Adam())# 訓練GAN
    for epoch in range(10000):noise = np.random.normal(0, 1, size=[128, 100])generated_images = generator.predict(noise)X_fake_vs_real = np.concatenate([generated_images, X_train[:128]])y1 = np.zeros(128)  # 假數據y2 = np.ones(128)   # 真實數據y_combined = np.concatenate([y1, y2])discriminator.trainable = Trued_loss = discriminator.train_on_batch(X_fake_vs_real, y_combined)noise = np.random.normal(0, 1, size=[128, 100])y_mislabeled = np.ones(128)  # 將所有的假圖像標記為真實discriminator.trainable = Falseg_loss = gan.train_on_batch(noise, y_mislabeled)if epoch % 1000 == 0:print(f"Epoch {epoch}, D Loss: {d_loss[0]}, G Loss: {g_loss}")# 生成圖像
    noise = np.random.normal(0, 1, size=[25, 100])
    generated_images = generator.predict(noise)
    plt.figure(figsize=(10, 10))
    for i in range(25):plt.subplot(5, 5, i + 1)plt.imshow(generated_images[i], cmap='gray')plt.axis('off')
    plt.show()
    

2. 使用預訓練的模型

基本概念:可以使用像StyleGAN、BigGAN或DALL-E這樣的預訓練模型,直接生成高質量的圖像。

在這里插入圖片描述

實現步驟

  • 使用Hugging Face的Transformers庫加載預訓練模型。

  • 安裝必要的庫:

    pip install transformers torch torchvision
    
  • 代碼示例(使用DALL-E):

    from transformers import DallEProcessor, DallETokenizer, DallEModel
    import torch# 加載模型和處理器
    processor = DallEProcessor.from_pretrained("dalle-mini/dalle-mini")
    model = DallEModel.from_pretrained("dalle-mini/dalle-mini")# 生成圖像
    text = "A futuristic city skyline"
    inputs = processor(text, return_tensors="pt")
    outputs = model.generate(**inputs)# 顯示結果
    image = outputs.images[0]
    image.show()
    

3. 圖像風格遷移

基本概念:通過將一幅圖像的風格應用到另一幅圖像上,生成新的藝術作品。

實現步驟

  • 使用TensorFlow或PyTorch實現風格遷移。

  • 代碼示例(使用TensorFlow):

    import tensorflow as tf
    import matplotlib.pyplot as plt# 加載內容圖像和風格圖像
    content_image = load_image("content.jpg")
    style_image = load_image("style.jpg")# 使用預訓練的VGG模型進行風格遷移
    model = tf.keras.applications.VGG19(include_top=False, weights='imagenet')# 定義風格和內容層
    content_layers = ['block5_conv2']
    style_layers = ['block1_conv1', 'block2_conv1', 'block3_conv1', 'block4_conv1', 'block5_conv1']# 風格遷移函數
    def style_transfer(content, style):# 進行風格遷移的步驟# ...return generated_imagegenerated_image = style_transfer(content_image, style_image)# 顯示結果
    plt.imshow(generated_image)
    plt.axis('off')
    plt.show()
    

總結

以上是一些使用Python進行AI圖像生成的創意與實現方法。這些項目既可以作為學習深度學習的實踐,也可以作為開發創意圖像生成應用的基礎。希望這些想法能激發你的創造力,幫助你在AI圖像生成領域探索更多可能性!

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

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

相關文章

P10413 [藍橋杯 2023 國 A] 圓上的連線

題意: 給定一個圓,圓上有 n2023 個點從 1 到 n 依次編號。 問有多少種不同的連線方式,使得完全沒有連線相交。當兩個方案連線的數量不同或任何一個點連接的點在另一個方案中編號不同時,兩個方案視為不同。 答案可能很大&#x…

鴻蒙5.0 非桌面頁面,設備來電后掛斷,自動返回桌面

1.背景 其實在Android上面打開一個應用,然后設備來電后掛斷應該是返回到前面打開的這個應用的,但是在鴻蒙里面現象是直接返回桌面,設計如此 2.分析 這個分析需要前置知識,鴻蒙的任務棧頁面棧,具體參考如下鏈接: zh-cn/application-dev/application-models/page-missio…

智能Todo協作系統開發日志(二):架構優化與安全增強

📅 2025年4月14日 | 作者:Aphelios380 🌟 今日優化目標 在原Todo單機版基礎上進行三大核心升級: 組件化架構改造 - 提升代碼可維護性 本地數據加密存儲 - 增強隱私安全性 無障礙訪問支持 - 踐行W3C標準 一、組件化架構改造 …

linux電源管理(二),內核的CPUFreq(DVFS)和ARM的SCPI

更多linux系統電源管理相關的內容請看:https://blog.csdn.net/u010936265/article/details/146436725?spm1011.2415.3001.5331 1 簡介 CPUFreq子系統位于drivers/cpufreq目錄下,負責進行運行過程中CPU頻率和電壓的動態調整,即DVFS (Dynami…

mysql 數據庫localhost密碼忘記

使用此查詢語句: SELECT user, authentication_string FROM mysql.user WHERE user root; 復制對應的密碼: 密碼是通過md5加密后的 md5在線解密破解,md5解密加密 將密碼輸入進來 就可以直接破解了

05、Docker run命令實戰:數據卷與掛載的完整指南(下)

5.1、深度剖析 docker run 命令:原理闡釋與數據持久化實踐探究 1、更換國內yum源2、更換國內docker源3、卸載舊版docker4、docker安裝5、鏡像加速器6、鏡像下載7、docker run命令交互式啟動-it非交互式后臺運行其他參數mysql綜合案例8、持久化存儲目錄掛載數據卷掛載數據同步1…

macOS 上使用 Homebrew 安裝和配置 frp 客戶端

macOS 上使用 Homebrew 安裝和配置 frp 客戶端 (frpc) 指南 frp (Fast Reverse Proxy) 是一款高性能的反向代理應用,常用于內網穿透。本文將介紹在 macOS 上使用 Homebrew 安裝 frpc,并進行配置和管理。 一、安裝 frpc 使用 Homebrew 安裝(…

泊松分布詳解:從理論基礎到實際應用的全面剖析

泊松分布詳解:從理論基礎到實際應用的全面剖析 目錄 引言:事件的罕見性與隨機計數泊松分布的歷史源流泊松分布的數學定義與性質 概率質量函數 (PMF)累積分布函數 (CDF)期望、方差與其他矩矩生成函數 (MGF) 與特征函數 (CF) 泊松分布的嚴格推導 極限推導…

紅寶書第三十六講:持續集成(CI)配置入門指南

紅寶書第三十六講:持續集成(CI)配置入門指南 資料取自《JavaScript高級程序設計(第5版)》。 查看總目錄:紅寶書學習大綱 一、什么是持續集成? 持續集成(CI)就像咖啡廳的…

python 辦公自動化------ excel文件的操作,讀取、寫入

一、excel文件的讀取 需要安裝的包:xlrd:讀取;xlwt:寫入;xlutils:分割、復制、篩選 sudo:表示以管理員身份運行命令(mac系統中使用) >sudo pip install xlrd xlwt x…

JAVA Web_定義Servlet2_學生登錄驗證Servlet

題目 頁面StudentLogin.html中有一HTML的表單代碼如下&#xff1a; <form action"studentLogin" method"post">學生姓名&#xff1a;<input type"text" name"stuName" value""><br>登錄密碼&#xff1a;…

爬蟲: 一文掌握 pycurl 的詳細使用(更接近底層,性能更高)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、PycURL概述1.1 PycURL介紹1.2 基本安裝1.3 安裝依賴(Linux/macOS)1.4 常用選項參考二、基本使用2.1 簡單 GET 請求2.2 獲取響應信息2.3 設置請求頭2.4 超時設置2.5 跟隨重定向三、高級功能3.1 POST 請求3.2 文件上…

利用 限制torch線程數與異步方法提升聲紋識別效率

引言 聲紋識別作為生物識別技術的重要分支,在安防、金融、智能助手等領域應用廣泛。隨著數據量的增長和應用場景的復雜化,提高聲紋識別效率成為關鍵問題。本文將詳細介紹如何通過 torch.set_num_threads 以及異步方法來優化聲紋識別的性能。 聲紋識別效率瓶頸分析 在聲紋…

軟考高級系統架構設計師-第12章 系統質量屬性與架構評估

【本章學習建議】 根據考試大綱&#xff0c;本章不僅考查系統架構設計師單選題&#xff0c;預計考11分左右&#xff0c;而且案例分析和論文寫作也是必考&#xff0c;對應第二版教材第8章&#xff0c;屬于重點學習的章節。 12.1 軟件系統質量屬性 12.1.1 質量屬性概念 軟件系…

SecProxy - 自動化安全協同平臺

本人為甲方安全人員&#xff0c;從事甲方工作近6年&#xff1b;針對在甲方平時安全工作的一些重復、復雜、難點的工作&#xff0c;思考如何通過AI、腳本、或者工具實現智能且自動化&#xff0c;于是花平時空閑時間準備將這些能力全部集中到一個平臺&#xff0c;于是有了這個東西…

CSI-external-provisioner

main() 這段Go代碼是一個CSI&#xff08;容器存儲接口&#xff09;Provisioner&#xff08;供應器&#xff09;的實現&#xff0c;用于在Kubernetes集群中動態提供持久卷。代碼涉及多個組件和步驟&#xff0c;下面是對關鍵部分的解釋&#xff1a; 初始化和配置 命令行標志和…

react中通過 EventEmitter 在組件間傳遞狀態

要在 Reply 組件中通過 statusChangeEvent 發送狀態值&#xff0c;并在 Select 組件中接收這個狀態值 status&#xff0c;你可以按照以下步驟實現&#xff1a; //Event.jsimport EventEmitter from events;export const statusChangeEvent new EventEmitter();// 工單狀態切換…

1534. 統計好三元組

1534. 統計好三元組 - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 arr &#xff0c;以及 a、b 、c 三個整數。請你統計其中好三元組的數量。 如果三元組 (arr[i], arr[j], arr[k]) 滿足下列全部條件&#xff0c;則認為它是一個 好三元組 。 0 < i < j &l…

如何配置AWS EKS自動擴展組:實現高效彈性伸縮

本文詳細講解如何在AWS EKS中配置節點組&#xff08;Node Group&#xff09;和Pod的自動擴展&#xff0c;優化資源利用率并保障應用高可用。 一、準備工作 工具安裝 安裝并配置AWS CLI 安裝eksctl&#xff08;EKS管理工具&#xff09; 安裝kubectl&#xff08;Kubernetes命令…

FPGA_UART

1.UART 概述 &#xff08;通用異步收發傳輸器&#xff09; 1. 基本定義 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;是一種常見的串行通信協議&#xff0c;用于在設備間通過異步串行通信傳輸數據。它不依賴獨立的時鐘信號&#xff0c;而是通過預…