-
-
- Opencv31編譯CUDA版本大于80引起
- GPU選擇錯誤
- 圖像模式錯誤非RGB
- mbox_loss 0 1 0 loss
- bndbox參數超出圖像尺寸
- 找不到或打不開圖檔檔案
- 關于學習率的設定base_lr
- cvimshow不顯示圖檔
- LNK1104 無法打開檔案opencv_dep_cudartlib
-
1.Opencv3.1編譯,CUDA版本大于8.0引起
/home/usrname/OpenCV-/modules/cudalegacy/src/graphcuts.cpp:::
error: ‘NppiGraphcutState‘ has not been declared typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppStat
解決方法:
進入opencv-3.1.0/modules/cudalegacy/src/目錄,修改graphcuts.cpp檔案,将:
#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改為
#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
2.GPU選擇錯誤
原因:GPU選擇錯誤
caffe.set_device(1)
。
解決方法:
改為
caffe.set_device(0)
Jetson TX1隻有一個GPU,#0。
3.圖像模式錯誤:非RGB
在訓練自己資料集時報出如下兩類錯誤:
OpenCV Error: Assertion failed ((scn == || scn == ) && (depth == CV_8U || depth == CV_32F)) in cvtColor, file /ssda/software/opencv-/modules/imgproc/src/color.cpp, line
terminate called after throwing an instance of 'cv::Exception'
或者:
annotated_data_layer.cpp:] Check failed: std::equal(top_shape.begin() + , top_shape.begin() + , shape.begin() + )
原因:資料集圖檔内混有非RGB模式圖檔,如灰階圖(L),
img.mode='L'
。
解決方法:
- 去掉非RGB圖檔。
- python轉換L為RGB:
img = img.convert("RGB")
img.save(dir+'/' + name + '.jpg')
4. mbox_loss = 0 (* 1 = 0 loss)
原因是資料集制作錯誤,如果使用VOC作為參考,需要嚴格按照其格式,包括資料類型,例如bndbox:
<bndbox>
<xmin>60</xmin>
<ymin>27</ymin>
<xmax>385</xmax>
<ymax>331</ymax>
</bndbox>
解決方法:
bndbox參數必須為整數,如果是小數
<xmin>60.0</xmin>
,運作時不會報錯,但是訓練模型不會成功,持續是loss=0。
5. bndbox參數超出圖像尺寸
錯誤現象:
xml bounding box irregular
解決方法:
修改bndbox參數,使其不超過圖檔尺寸。
6.找不到或打不開圖檔檔案
在制作資料集的過程中,經常出現
can not open or find ..pic.jpg
之類的找不到圖檔的錯誤,但是路徑是正确的,檔案也存在。
原因:圖檔清單檔案train.txt、val.txt或者trainval.txt、test.txt的換行符包含’\r’,這是由windows導入到Linux下出現的
解決方法:
将’\r\n’全部替換’\n’。
7.關于學習率的設定:base_lr
不能設定太大,數十次疊代之後就會出現Nan;
不能設定太小,否則loss基本不會下降;
受制于GPU顯存大小,通常batch_size不可能設定成容納全部圖檔,Jetson TX1訓練ssd時隻能設定為4,還是在不test的情況下,是以loss波動會很厲害,但是是正常現象,并非學習率設定太大導緻的波動,進而改國小習率導緻始終無法下降。
通常設定初始學習率base_ir為0.0001,stepsize為20000。實際訓練總,設定合适的snapshot,多存儲快照,根據 計算機視覺caffe之路第五篇:ImageNet資料集訓練及預測執行個體中繪制loss曲線的方法監控loss下降趨勢,如果發現loss不下降,這适當調大base_lr,通常是成倍的增加,自制loss有效下降。
此外可以學習下這篇論文:http://cilvr.nyu.edu/lib/exe/fetch.php?media=deeplearning:dl-optimization.pdf
8.cv::imshow不顯示圖檔
cv::VideoCapture cap();//0表示攝像頭id
//cap.open("test.avi"); //或者打開視訊
cv::namedWindow("video",);
for(;;){
cv::Mat frame;
cap<<frame;
if(frame.empty())
break;
cv::imshow("video",frame);
cv::waitKey() //!!!
}
注意最後一定要加上
waitKey(10)
,否則顯示視窗不會顯示,原因是循環中,highgui沒有給予imshow繪制處理的時間。
9.LNK1104 無法打開檔案“opencv_dep_cudart.lib”
用vs2015編譯有些opencv項目時出現此編譯錯誤。
解決方法:
在項目-屬性-連接配接器-輸入-附加庫目錄中,删除opencv_dep_cudart.lib項目。
未完待續