2021年,NFT數字藝術品和數字藏品迅速出圈,在這場浪潮中,2017年成立的“加密朋克”(CryptoPunks)項目因其收藏者的知名度和不斷刷新的成交價,升值成為最具價值的收藏品之一,更成為了先鋒投資者和藝術收藏者身份的象徵。

圖片來源:larvalabs

多個NFT數字藝術品項目的成功,也將AI生成數字藝術品推至台前。在這場“出圈浪潮”中,很多藝術家選擇用AI技術作為圖像創造的工具,最終再將藝術品鑄造為NFT,使用AI技術進行NFT數字藝術品創作的可能性被充分發掘。與藝術生成有關的AL/ML工作專注於藝術風格的創造,很多團隊和個人也關注到藝術品,通過生成對抗網絡(GANs)“批量”生成特定風格的作品。

最近有一個名為“CryptoPunks GAN”的項目發佈在Github上,用於生成CryptoPunks 的簡單SN-GAN,項目地址:https://github.com/teddykoker/cryptopunks-gan。這個項目用Python完成,我們通過矩池雲www.matpool.com對其進行了復現。矩池雲提供面向元宇宙的解決方案,創作者可以使用平台輕鬆訓練和部署其AI模型,加速元宇宙中的如NLP虛擬人、圖像內容生成等環節的過程。本次用機器學習生成CryptoPunks項目的複現,上手過程非常簡單,不需要任何安裝和調試,打開界面就能在雲端就感受到生成藝術的創作過程。

一、分析項目依賴,租用機器

1.1 分析項目依賴環境

首先通過開源項目的requirements.txt文件,我們知道該項目主要需要Pytorch1.10.2和CUDA11.3環境,另外還需要pandas、Pillow等第三方包,如果將其在本地安裝我們還是需要花一定的時間的,不過我們不需要這些複雜的步驟。

分析項目依賴環境

我們進入矩池雲,如果你還沒有註冊過賬號,可以先註冊一個賬號,新註冊用戶關注並綁定矩池雲微信公眾號可獲贈5元體驗金,體驗金在租用機器時直接抵扣(等會就可以用)。

1.2 在矩池雲租用合適的機器

在矩池雲的主機市場,我們可以選擇需要使用到的機器,這裡我們就選最便宜的NVIDIA Tesla K80(經過測試,可以使用代碼模型和訓練)。

選擇機器

點擊租用按鈕後,我們可以對機器進行配置:

1 、選擇基礎鏡像,我們直接搜索Pytorch1.10

2 、發現有相關鏡像,並且其他依賴如CUDA11.3也符合要求,點擊選擇即可

3 、選擇好鏡像後,我們可以進行其他配置,如:VNC功能開啟、公鑰設置、高級選項中的自定義端口等(首次嘗試也可以先忽略這些功能)

選擇鏡像

設置好機器基本環境,我們點擊下單即可。 (如上所述,如果你是新用戶,綁定矩池雲微信公眾號後獲得的體驗金可以在釋放機器時直接抵扣費用)

二、下載代碼、數據及模型

租用好機器後,我們選擇最簡單的使用方法,直接點擊租用界面的JupyterLab連接,即可快速使用服務器。

打開JupyterLab

進入JupyterLab頁面後,我們先點擊Terminal進入終端,並輸入下面指令。

打開Terminal

cd /mntmkdir MyCode && cd MyCodegit clone https://hub.fastgit.xyz/teddykoker/cryptopunks-gan.git

我們只需把上方代碼複製粘貼即可,當出現Checking out files: 100% 即代表下載開源項目CryptoPunks-GAN項目成功,可以進入到下一步。

Checking out files: 100%

我們可以了解一下剛才輸入這段代碼的含義,它代表著:

先進入/mnt目錄(矩池云網盤掛載目錄)

新建一個文件夾MyCode並進入文件夾(用於存放項目文件)

git clone下載開源項目cryptopunks-gan

三、使用模型和訓練

3.1 使用預訓練模型測試

我們進入到cryptopunks-gan項目目錄。具體方式為,找到名為mnt 的文件夾。

mnt文件夾

進入到MyCode,再進入到cryptopunks-gan。

路徑

然後點擊左上角+新建一個Launcher,點擊Notebook中的myconda。即可新建一個jupyter notebook文件。

新建ipynb步驟

我們可以先使用預訓練好的模型來測試使用,測試使用代碼官方已經給我們提供好了。

可以直接複製以下所有代碼,或者像我一樣一段一段運行。

import torchfrom torchvision.utils import save_imagefrom train import Generatormodel = Generator()model.load_state_dict(torch.load('models/net_g_epoch_999.pth'))z = torch.randn(64, 100, 1, 1)punks = model(z )save_image(punks, 'punks.png', normalize=True)

運行按鈕如下:

運行按鈕

運行成功後會在項目目錄下生成一個punks.png文件。

punks.png

我們可以直接點擊查看預訓練結果。

點擊查看

3.2 訓練模型

按照教程,除了使用預訓練模型,我們還可以對模型進行訓練,訓練代碼在項目目錄的train.py文件中。

我們重新回到JupyterLab的Terminal中。

打開Terminal

輸入下面指令(首先進入項目目錄,然後運行train.py):

cd /mnt/MyCode/cryptopunks-ganpython train.py

運行過程

這個過程比較漫長,預計1個小時左右,訓練完成後默認會在項目目錄中生成一個out目錄,裡面會存放訓練好的權重文件和样本圖片文件。最終完成訓練的圖片是序號最大的那張,在這個案例中即編號為999的文件。

out目錄

此時回到“我的網盤”,即可看到out 文件夾,剛才的訓練過程和結果圖片都在其中。

我的網盤

在訓練使用過程中你還可以查看機器監控,看機器的GPU、內存等使用情況。

機器使用情況

3.3 釋放機器

當你的代碼都跑完,不需要使用機器時,可以選擇釋放機器。

在機器租用頁面,你可以看到釋放機器按鈕,在更多按鈕中你還可以看到保存環境功能。

釋放和保存環境

如果你在基礎環境中還安裝了一些其他包,並且想在下次使用的時候想繼續使用,你可以選擇保存環境,保存的環境會存放在你的網盤中。

如果不需要保存環境,直接點擊釋放機器即可。

以下一部分為epoch訓練後生成的圖片:

訓練最終的完成圖如下:

GANs生成圖

四、關於GANs

Ian Goodfellow等人在2014年的一篇論文中首次提出生成對抗網絡(GANs),它的實現方式是通過同時使用生成模型和判別模型,兩個模型相互競爭,從而訓練出圖片。這一過程可以這樣簡單解釋,生成模型的作用類似於一個人不斷地創造假的《蒙娜麗莎》,他要在創造過程中不斷提升其和真畫的相似度,判別模型則類似於鑑別師,他負責鑑別和確認假畫。兩個人相互競爭,雙方提升各自的創造方法和鑑別方法,直到假畫達到與真畫難以區分的程度。

在CrypoPunks GAN項目中所用到的算法是SN-GAN,即Spectral Normalization for Generative Adversarial Network,訓練過程更穩定,更容易收斂,文獻內容可參考:

https://arxiv.org/abs/1802.05957。