最近由于要跑對比實驗,是以找了一下VDSR和DRCN作者提供的代碼
首先發一下作者論文頁面下的代碼連結,這玩意我在git上找了好久沒找到,最後好不容易找到DRCN,是作者學校的網站,我把網頁中的DRCN改成VDSR,也成功找到VDSR的代碼
DRCN:
https://cv.snu.ac.kr/research/DRCN/
VDSR:
https://cv.snu.ac.kr/research/VDSR/
我上來先跑的DRCN,還算很順利,有幾個要注意的地方,我寫會寫在下面,至于VDSR,問題就比較多了,我會在最後面附上我改的VDSR代碼的百度網盤連結
說下我伺服器配置:ubuntu16.04、 GeForce GTX TITAN X(對應的GPU編号是2,matlab的編号從1開始,與pytorch和tensorflow不同)、 matlab2015
我一開始打算在自己電腦的windows上跑,但是又需要 VS2017,有需要裝cuda,很難搞,伺服器上的cuda都配好了,也不用裝vs,windows下嘗試了幾次不成之後就聽師兄的去伺服器上跑了,下面主要遇到這麼幾個問題
1.按照作者readme中寫的步驟執行
首先報錯nvcc fatal : Unsupported gpu architecture 'compute_20'
查到https://www.cnblogs.com/houjun/p/9885847.html,是由于cuda9不支援compute_20
即# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
注釋了 vl_compilenn 第153行的'-gencode=arch=compute_20,code=\"sm_20,compute_20\" '...
改完後
警告: 您使用的 gcc 版本為 '5.4.0-6ubuntu1~16.04.11)'。不支援該版本的 gcc。MEX 目前支援的版本為 '4.7.x'。有關目前支
持的編譯器清單,請參閱: http://www.mathworks.com/support/compilers/current_release。
> In vl_compilenn>mex_link (line 456)
In vl_compilenn (line 408)
In setup (line 4)
這個警告不用管,不影響後續操作
2.運作testDRCN時出現out of memory,懷疑是指定GPU錯誤,根據連結修改,伺服器終端輸入nvidia-smi檢視GPU狀态和編号由于伺服器上TitanX對應1,另一塊别人再用的對應0,matlab則是從1開始計數,是以
要修改GPU,選擇2
http://gaobb.github.io/2015/06/12/Matlab%20and%20GPU/
3.在matlab lab指令行裡修改,發現還是out of memory
在測試程式中寫
g=gpuDevice(2); %by yyc
reset(g); %by yyc
發現還是不行,但是把g=gpuDevice(2);的‘;’号去掉後,變得可以了
我後面會上傳我改好的VDSR代碼
4.在測試别的訓練集的時候,發現不行,提到runRCN不存在,估計是因為圖太大調用了裁減函數,但是裁剪函數裡的名稱是runRCN,而
檔案夾裡隻有runDRCN,嘗試把runRCN 都替換成runDRCN,成功運作(這個問題隻有DRCN的代碼裡有)
一般就上面幾個問題,解決好後把資料集放到相應位置,result檔案夾下就有結果了
(下面開始是VDSR的問題)
除了上面的問題修改完後,(比如DRCN中的注釋了 vl_compilenn 第153行的'-gencode=arch=compute_20,code=\"sm_20,compute_20\" '...和選擇GPU)
VDSR出現
5.錯誤使用 vl_nnconv
Error using vl_nnconv
An input is not a numeric array (or GPU support not compiled).
Error in vl_simplenn (line 296)
res(i+1).x = vl_nnconv(res(i).x, l.weights{1}, l.weights{2}, …
Error in runVDSR (line 3)
res2 = vl_simplenn(net2, imlow, []);% {‘conserveMemory’, true});
Error in VDSR (line 46)
impred = runVDSR(net, imlowy, gpu);
Error in testVDSR (line 13)
VDSR(data, SF, ‘VDSR.mat’, outRoute);
嘗試在VDSR的matconnet下加入DRCN中的又的setup.m檔案,還是失敗
一系列嘗試均失敗
6.把DRCN的snu_matconvnet到VDSR下,修改testVDSR裡的路徑,使其比對,運作會提示少一個vl_simplenn_tidy
在VDSR代碼中找到這個檔案,複制過去,成功運作
改好的代碼連結(注意針對自己的cuda版本和GPU做二次修改)
https://pan.baidu.com/s/1Sj5_nqltP4-G4bhjVcQiKg
提取碼:ew3k