看了一篇李飛飛組的論文 Perceptual Losses for Real-Time Style Transfer and Super-Resolution。
論文地址為:https://arxiv.org/pdf/1603.08155.pdf))
想去找找程式碼復現一下。
原文沒有提供程式碼,就只有找找別人按照論文細節實現的程式碼。不過但是論文是2016年的,距離現在2023年已經很久了,所以找到的一些別人復現的程式碼的pytorch版本都比較老,難以使用。
不過還好找到了這個程式碼
https://github.com/pytorch/examples/blob/main/fast_neural_style/README.md
所以照著裡面的指引可以很快利用其預訓練模型去生成風格化的原圖。
配環境也相對比較簡單,選擇適合自己CUDA版本的儘量新一點的pytorch即可。
conda create -n style python=3.10 -y
conda activate style
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch
但是想要自己訓練某個風格的預訓練模型的時候遇到了一點問題。
主要是readme裡面寫著使用 COCO 2014 Training作為訓練集,於是我下載了該資料集,放在專案的根目錄下,資料夾名字為train2014,但是呼叫的時候卻出現了一個問題,報錯大致為:
FileNotFoundError: Couldn't find any class folder in ./train2014。
主要是因為用了下面這句程式碼來載入訓練集,
train_dataset = datasets.ImageFolder(args.dataset, transform)
但是ImageFolder這個類需要在資料集的大資料夾下再建立有子類資料夾。
一開始還以為需要去將這13G的圖片按照型別放入各自的子資料夾中,比如cat/dog之類的,還找了一下有沒有相應的,但是後面一想,這也不是分類問題呀,在訓練過程中並不需要類別的ground truth,所以就繼續去GitHub上尋找與該問題相關的issue,最後找到了:
https://github.com/pytorch/examples/issues/1039
這裡面顯示這其實是一個小bug,解決辦法是在train2014資料夾下,將所有圖片都放進一個子資料夾內,我將該子資料夾命名為no_label,然後--dataset還是使用相對路徑 ./train2014 即可。