此儲存庫包含 Deep Dream 演算法的 PyTorch 實作(:連結:Mordvintstev 等人的部落格)。
它完全支援命令列使用和Jupyter Notebook !
它將使您能夠創建這些奇怪的、迷幻的圖像:
不錯吧?
我強烈建議您從我創建的 Jupyter 筆記本開始!
注意:它非常大,大約 10 MB,因此可能需要多次嘗試才能將其載入到 GitHub 上的瀏覽器中。
簡而言之,該演算法透過梯度上升來最大化所選網路層的活化。
因此,從「做夢」後的左側影像這樣的輸入影像中,我們得到右側的影像:
誰會說神經網路隱藏著這種創造力? ?
大多數原始 Deep Dream 儲存庫都是用Caffe編寫的,而用 PyTorch 編寫的儲存庫通常很難閱讀和理解。這個倉庫是我所知道的最乾淨的DeepDream 倉庫的嘗試 + 它是用PyTorch 編寫的! ❤️
以下是您可以使用此程式碼建立的一些範例!
透過使用較淺層的神經網絡,您將獲得較低等級的圖案(邊緣、圓形、顏色等)作為輸出:
這裡,前兩張影像來自 ResNet50,最後一張來自 GoogLeNet(兩者都在 ImageNet 上進行了預訓練)。
透過使用更深的網路層,您將獲得更高等級的模式(眼睛、鼻子、動物頭):
第一個和第三個是使用 VGG 16 (ImageNet) 創建的,中間一個使用在 Places 365 上預先訓練的 ResNet50 創建。
如果我們保持所有其他參數相同但交換預訓練權重,我們會得到以下結果:
左: ResNet50-ImageNet (我們可以看到更多動物特徵)右: ResNet50-Places365 (人類建造的東西等)。
做夢是在「垂直」堆疊的多個影像解析度上進行的(我們稱之為影像金字塔)。
從左到右,唯一改變的參數是金字塔大小(從左到右:3、7、9 層)。
玩弄金字塔比率具有類似/相關的效果 - 基本思想是更深層次的神經元可以修改和“看到”的圖像的相對區域(所謂的網絡的感受野)正在增加,並且我們變得越來越大眼睛突出等特徵(由左至右:1.1、1.5、1.8):
注意:您可以看到用於建立編碼到檔案名稱中的這些影像的確切參數!
請務必查看 Jupyter Notebook! ,我已經對此進行了徹底的解釋。
以下是您可以使用此程式碼建立的一些進一步範例!
這裡的想法是,無論網路夢想什麼,都只需將其反饋到其輸入並應用幾何變換。
如果我們僅應用中央縮放,我們會得到:
應用中心縮放並同時每個畫面套用 3 度旋轉會產生以下效果:
最後,如果我們做一個簡單的平移(從左上角到右下方向每格 5 px):
希望這些不會讓您傷透腦筋——感覺就像 2000 年代初的 Web 1.0。耐心聽我說。
我們不將輸出回饋回輸入,而是每幀應用演算法並應用一些線性混合:
線性混合只是將當前幀與上一幀結合起來,以減少閃爍(這裡我使用0.85)
注意:所有 Deepdream 圖像/GIF 均由我製作,原始圖像藝術家的學分如下。
git clone https://github.com/gordicaleksa/pytorch-deepdream
cd path_to_repo
conda env create
(這將建立一個全新的 conda 環境)。activate pytorch-deepdream
(用於從控制台執行腳本或在 IDE 中設定解釋器)就是這樣!它應該可以開箱即用地執行處理依賴項的environment.yml 檔案。
注意:如果您想使用我的視訊功能 - 您的系統路徑中需要ffmpeg 。
PyTorch pip 軟體套件將與某些版本的 CUDA/cuDNN 捆綁在一起,但強烈建議您預先安裝系統範圍的 CUDA,主要是因為 GPU 驅動程式。我還建議使用 Miniconda 安裝程式作為在系統上安裝 conda 的方法。請按照此設定的第 1 點和第 2 點進行操作,並為您的系統使用最新版本的 Miniconda 和 CUDA/cuDNN。
只需從 Anaconda 控制台運行jupyter notebook
,它將在您的預設瀏覽器中開啟一個會話。
打開The Annotated DeepDream.ipynb
,您就可以開始玩了!
注意:如果DLL load failed while importing win32api: The specified module could not be found
只需執行pip uninstall pywin32
然後pip install pywin32
或conda install pywin32
應該可以修復它!
您只需連結您在設定部分建立的 Python 環境即可。
如果您正在使用 Anaconda(我希望您這樣做),請導航至/啟動您的環境,並且您可以使用我在下面連結的命令。
提示:將圖像/影片放入data/input/
目錄中,然後您可以僅按檔案名稱引用檔案(圖像/影片),而無需使用絕對/相對路徑。
若要建立一些靜態 Deep Dream 映像,請執行以下命令:
python deepdream.py --input <img_name> --img_width 600
這將使用預設設置,但您將立即獲得保存到以下位置的有意義的結果:
data/out-images/VGG16_EXPERIMENTAL_IMAGENET/
注意:輸出目錄將根據您使用的模型和預訓練權重而變化。
要獲取開箱即用的Ouroboros 30 幀視頻,請執行以下操作:
python deepdream.py --input <img_name> --create_ouroboros --ouroboros_length 30
它將轉儲中間幀到data/out-videos/VGG16_EXPERIMENTAL_IMAGENET/
並將最終視訊儲存到data/out-videos
。
要創建Deep Dream 視頻,請運行以下命令:
python deepdream.py --input <mp4 video name>
它將轉儲中間幀到data/out-videos/tmp_out
並將最終視訊保存到data/out-videos
。
好吧,盡情享受這個項目吧!以下是一些額外的、漂亮的結果:
具有 2 GB 以上的 GPU 就足夠了。
您將能夠創建 DeepDream 圖像、Ouroboros 和 DeepDream 影片。
如果您沒有 GPU,程式碼將自動在 CPU 上運行,但速度會稍慢(尤其是影片)。
如果您在理解 DeepDream 時遇到困難,我在此影片中概述了該演算法:
我創作的 Jupyter Notebook 也是最好的起點!
我發現這些儲存庫很有用(在開發這個儲存庫時):
我在這裡找到了我使用的圖像:
其他圖像現在已經成為 NST 和 DeepDream 世界中的經典。
Places 365 個預訓練模型來自這個很棒的儲存庫。
如果您發現此程式碼對您的研究有用,請引用以下內容:
@misc{Gordić2020DeepDream,
author = {Gordić, Aleksa},
title = {pytorch-deepdream},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/gordicaleksa/pytorch-deepdream}},
}
如果您希望生活中擁有更多與人工智慧相關的內容?