以下鏈接是個人關於 MUNIT(多模態無監督)-圖片風格轉換,的所有見解,如有錯誤歡迎大家指出,我會第一時間糾正。有興趣的朋友可以加微信 a944284742 相互討論技術。若是幫助到了你什麼,一定要記得點贊!因爲這是對我最大的鼓勵。
風格遷移2-00:MUNIT(多模態無監督)-目錄-史上最新無死角講解
環境安裝
這是pytorch官網安裝指南:https://pytorch.org/get-started/previous-versions/
本人的cuda版本爲cuda10.0,pytorch爲v1.0.0(上鍊接可以找到),主要使用anconda3執行了如下指令:
conda create -n pytorch-MUNIT -y python=3.6
conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorch
# 下載安裝包(從前面的官網鏈接找到合適版本),從其中找到合適的版本
https://download.pytorch.org/whl/cu100/torch_stable.html
# 下載完成之後執行如下指令
python -m pip install --upgrade pip
pip install torch-1.0.0-cp36-cp36m-win_amd64.whl
安裝完成之後,請配置好pycharm,下面我們就開始調試代碼了,起碼要讓測試以及訓練程序跑起來。再這之前,通過上一篇博客,大家應該下載好了預訓練模型,放置如下:
代碼測試
首先,我們還是先閱讀項目中的README.md,進入其中的Please check out the user manual page:
https://github.com/NVlabs/MUNIT/blob/master/USAGE.md
可以看到如下:
直接粘貼複製再終端運行:
python test.py --config configs/edges2shoes_folder.yaml --input inputs/edge.jpg --output_folder outputs --checkpoint models/edges2shoes.pt --a2b 1
報錯一
File “E:\2.ChiPeak\3.FaceDataGenerate\1.MUNIT\1.MUNIT-master\utils.py”, line 6, in
import torchfile
ModuleNotFoundError: No module named ‘torchfile’
pip install torchfile
pip install numpy
pip install torchvision==0.2.1
pip install pyyaml
報錯二
File “D:\Users\94428\anaconda3\envs\pytorch-MUNIT\lib\site-packages\PIL\Image.py”, line 2843, in open
fp = builtins.open(filename, “rb”)
FileNotFoundError: [Errno 2] No such file or directory: ‘inputs/edge.jpg’
inputs目錄存在文件如下:
# 修改一下圖片名即可,執行如下
python test.py --config configs/edges2shoes_folder.yaml --input inputs/edges2shoes_edge.jpg --output_folder outputs --checkpoint models/edges2shoes.pt --a2b 1
然後在輸出目錄可以看到如下照片:
這樣我們就完成了初步的測試,可以在執行如下指令
python test.py --config configs/edges2shoes_folder.yaml --input inputs/edges2shoes_edge.jpg --output_folder outputs --checkpoint models/edges2shoes.pt --a2b 1 --style inputs/edges2handbags_handbag.jpg
可以看到其生成了綠色的鞋子圖片如下:
數據訓練
我們可以看到如下部分:
先不管那麼多,我們執行:
python train.py --config configs/edges2shoes_folder.yaml
報錯一
Traceback (most recent call last):
File “train.py”, line 17, in
import tensorboardX
ModuleNotFoundError: No module named ‘tensorboardX’
pip install tensorboardX
報錯二
File “E:\2.ChiPeak\3.FaceDataGenerate\1.MUNIT\1.MUNIT-master\data.py”, line 91, in make_dataset
assert os.path.isdir(dir), ‘%s is not a valid directory’ % dir
AssertionError: ./datasets/edges2shoes/trainA is not a valid directory
本人數據目錄放置如下:
所以修改 edges2shoes_folder.yaml 的代碼如下
#data_root: ./datasets/edges2shoes/ # dataset folder location
data_root: ../2.Dataset/edges2shoes # dataset folder location
報錯三
File “E:\2.ChiPeak\3.FaceDataGenerate\1.MUNIT\1.MUNIT-master\data.py”, line 91, in make_dataset
assert os.path.isdir(dir), ‘%s is not a valid directory’ % dir
AssertionError: …/2.Dataset/edges2shoes\trainA is not a valid directory
該錯誤表示,我們數據的格式,是不符合規範的。
本人蔘考 scripts/demo_train_edges2shoes.sh 腳本對數據做了處理,本人比較尷尬,因爲都 wind 和 linux 的腳本書寫都比較陌生,所以把數據拷貝到 linux 下,把 edges2shoes.tar.gz 解壓之後,得到 edges2shoes 目錄如下:
在該目錄(edges2shoes)下,執行了如下指令:
for f in train/*; do convert -quality 100 -crop 50%x100% +repage $f train%d/${f##*/}; done;
for f in val/*; do convert -quality 100 -crop 50%x100% +repage $f test%d/${f##*/}; done;
mv train0 trainA
mv train1 trainB
mv test0 testA
mv test1 testB
執行完之後,目錄顯示如下:
本人用的辦法真的蠢,哈哈。然後又壓縮,放置到 winds 下的原目錄中。
報錯四
in the main module:
if name == ‘main’:
freeze_support()
…
該錯誤主要是沒有在 linux 環境下導致的結果,在 train.py 添加 if name == ‘main’: 如下:
import tensorboardX
import shutil
if __name__ == '__main__':
parser = argparse.ArgumentParser()
......
其後的代碼都右移一個 tab 鍵。
調試成功之後,本人打印如下:
Elapsed time in update: 7.770969
Elapsed time in update: 0.784000
Elapsed time in update: 0.757999
Elapsed time in update: 0.749000
Elapsed time in update: 0.754998
Elapsed time in update: 0.757999
Elapsed time in update: 0.756999
Elapsed time in update: 0.761999
Elapsed time in update: 0.755001
Elapsed time in update: 0.753999
Iteration: 00000010/01000000
Elapsed time in update: 0.766001
Elapsed time in update: 0.758998
Elapsed time in update: 0.758000
Elapsed time in update: 0.641000
Traceback (most recent call last):
結語
到這裏爲止,代碼已經跑起來了,下面會爲大家進行論文翻譯,以及源碼的閱讀。