天天看點

VDSR、DRCN作者matlab代碼調試

最近由于要跑對比實驗,是以找了一下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

繼續閱讀