這個是在去年微博里面非常流行的,在git_hub上的代碼是https://github.com/fzliu/style-transfer
比如這是梵高的畫
這是你自己的照片
然后你想生成這樣
怎么實現呢在基於windows的caffe上,其實這個很簡單。
1 首先在 https://github.com/fzliu/style-transfer 把代碼下載下來,另外主要這個代碼基於pycaffe的,需要將pycaffe編譯好。
最好是在電腦上裝一個python progressbar包 ,具體操作是在windows cmd下輸入 pip install progressbar
2 解壓style-transfer-master文件夾,運行\scripts文件夾 下的download_models.sh 就會下載模型,
在model文件夾下會出現caffenet、vgg16、vgg19、googlenet等文件夾,但是有時候model文件夾里面還是沒有.model文件,一般來說.model文件有幾十到幾百M不等。如果沒有下載成功.model文件,我們可以打開download_models.sh,按照里面的鏈接直接手動下載。
3 運行代碼
下面是運行代碼的格式: python style.py -s <style_image> -c <content_image> -m <model_name> -g 0
在windows下 切換到style.py 所在的目錄,輸入代碼示意圖如下
python style.py -s images/style/starry_night.jpg -c images/content/nanjing.jpg -m vgg19 -g 0
可見上面例子中,style-image對應starry_night.jpg 即風格圖像, content_image對應自己的照片nanjing.jpg, 模型選擇vgg19(雖然說可以選擇其他模型,但一般來說vgg19的效果最好), g 0對應選擇默認的GPU,如果是g -1則為CPU
然后回車就能運行,運行后就能在outputs文件夾中得到上述處理后的結果了。
下面是運行的示意圖:
可以看到,選擇GPU、然后加載圖像和模型成功后就開始跑了,左側是顯示運行進度,已經是6%,還需要54分鍾左右,由於圖像比較大,時間比較長。
4 更改style.py 中如下語句
parser.add_argument("-l", "--length", default=1024, type=float, required=False, help="maximum image length")
def transfer_style(self, img_style, img_content, length=1024, ratio=1e5,
n_iter=512, init="-1", verbose=False, callback=None):
可以設置圖像輸出的尺寸大小,例如你自己的照片圖像大小是1024*500 ,更改輸出上述語句中length=1024,可以獲得與原始圖像一致的尺寸。
不更改的話,程序中默認輸出是512寬度,長度安裝輸入原始圖像一致的寬長比計算。
我自己的實驗結果
原始圖像:
輸出的效果: