1.Check failed: a <= b <0 vs -1.19209e-007>
網上辦法是注釋掉
CHECK_LE(a, b)
,但是這樣會出大問題。解決辦法見2。
如果注釋掉
CHECK_LE(a, b)
會出現
Data layer prefetch queue empty
不注釋
CHECK_LE(a, b)
會出現錯誤
a可能大于b
2.訓練過程中出現blocking_queue.cpp:50] Data layer prefetch queue empty
法一:找到檔案
/data/VOC0712/create_data.sh
,将
width=0
改為
width=300
,将
height=0
改為
height=300
,生成資料,驗證無效。https://blog.csdn.net/weixin_41057320/article/details/81080419
法二:這種問題出現通常是注釋掉
CHECK_LE(a, b)
出現
Data layer prefetch queue empty
。導緻程式出現死循環。
解決辦法修改
src/caffe/util/sampler.cpp
,如下面修改代碼所示//renew注釋下,加入兩個判斷,使得bbox長寬不要越界。
void SampleBBox(const Sampler& sampler, NormalizedBBox* sampled_bbox) {
// Get random scale.
CHECK_GE(sampler.max_scale(), sampler.min_scale());
CHECK_GT(sampler.min_scale(), 0.);
CHECK_LE(sampler.max_scale(), 1.);
float scale;
caffe_rng_uniform(1, sampler.min_scale(), sampler.max_scale(), &scale);
// Get random aspect ratio.
CHECK_GE(sampler.max_aspect_ratio(), sampler.min_aspect_ratio());
CHECK_GT(sampler.min_aspect_ratio(), 0.);
CHECK_LT(sampler.max_aspect_ratio(), FLT_MAX);
float aspect_ratio;
caffe_rng_uniform(1, sampler.min_aspect_ratio(), sampler.max_aspect_ratio(),
&aspect_ratio);
aspect_ratio = std::max<float>(aspect_ratio, std::pow(scale, 2.));
aspect_ratio = std::min<float>(aspect_ratio, 1 / std::pow(scale, 2.));
// Figure out bbox dimension.
float bbox_width = scale * sqrt(aspect_ratio);
float bbox_height = scale / sqrt(aspect_ratio);
//renew
if(bbox_width>=1.0)
{
bbox_width=1.0;
}
if(bbox_height>=1.0)
{
bbox_height=1.0;
}
// Figure out top left coordinates.
float w_off, h_off;
caffe_rng_uniform(1, 0.f, 1 - bbox_width, &w_off);
caffe_rng_uniform(1, 0.f, 1 - bbox_height, &h_off);
sampled_bbox->set_xmin(w_off);
sampled_bbox->set_ymin(h_off);
sampled_bbox->set_xmax(w_off + bbox_width);
sampled_bbox->set_ymax(h_off + bbox_height);
}
原文:https://blog.csdn.net/LuohenYJ/article/details/88416180
修改了c/c++檔案,需要重新編譯
make clean
make all -j16
make test -j16
3.釋放GPU記憶體
sudo fuser -v /dev/nvidia* #查找占用GPU資源的PID
kill -9 pid #pid替換成相應的數字序号
然後再執行
nvidia-smi
就可以看到記憶體已經被釋放了
4.Check failed: status == CUDNN_STATUS_SUCCESS(4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR
解決辦法:因為你沒有permission使用cudnn引擎,指令前加
sudo
即可,我是這樣解決的。具體參考:https://github.com/shicai/MobileNet-Caffe/issues/3
5.關于python和sudo python的小問題解決辦法
法一:
之前在搞ssd的時候沒出問題,後來重裝了一下系統,把它拷回來,發現出了點問題,在訓練或者測試的時候,需要輸入:
python examples/ssd/ssd_pascal.py
或者
python examples/ssd/score_ssd_coco.py
,但是這時會出現這個錯誤:
Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0)
CUDNN_STATUS_INTERNAL_ERROR
這個錯誤搞過caffe的都知道,沒有權限問題,于是我就加上
sudu
,改成:
sudo python examples/ssd/ssd_pascal.py 或者
sudo python examples/ssd/score_ssd_coco.py,然而這時候又出現新的問題:
no module named caffe
這個感覺不應該啊,明明之前把pycaffe的路徑放到bashrc裡面啦。
後來
sudo python
,打開輸入
import caffe
發現果然沒有,
no module named caffe
,而
python
,
import caffe
就很正常。
找到這個問題的方法是:
python,import sys,sys.path,看輸出的路徑。
sudo python,import sys,sys.path,看輸出的路徑。
發現這兩個并不一樣。python裡的有caffe的路徑,而sudo python沒有。
解決辦法:
建立一個
lujing.pth
,打開,把你的caffe—python路徑拷進去,比如我的:
/home/zwj/Documents/ssd/caffe/python
,把這個檔案拷到
/usr/lib/python2.7/dist-packages
,重新打開終端運作
sudo python examples/ssd/score_ssd_coco.py
不再出問題啦。
sudo mv lujing.pth /usr/lib/python2.7/dist-packages
法二:
python
, 路徑是
/home/lsz/anaconda2/bin/python2.7
,
直接使用:
sudo python testBatchModel.py input.txt out/
, 出現沒有caffe包的錯誤。
是因為,
sudo python
調用的是
/user/local/bin/python
, 兩者調用的不是同一個python解釋器。
如果使用:
sudo /home/lsz/anaconda2/bin/python2.7 testBatchModel.py input.txt out/
, 則不會報錯。
原文:https://blog.csdn.net/qq_23944915/article/details/91492986
6.caffe-ssd運作過程中遇到的loss = nan錯誤:
I0216 10:16:31.513517 16036 sgd_solver.cpp:138] Iteration 50, lr = 0.001
I0216 10:16:50.461427 16036 solver.cpp:243] Iteration 60, loss = nan
I0216 10:16:50.461556 16036 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0216 10:16:51.435171 16036 sgd_solver.cpp:138] Iteration 60, lr = 0.001
I0216 10:17:10.880903 16036 solver.cpp:243] Iteration 70, loss = nan
I0216 10:17:10.880944 16036 solver.cpp:259] Train net output #0: mbox_loss = nan (* 1 = nan loss)
I0216 10:17:10.881077 16036 sgd_solver.cpp:138] Iteration 70, lr = 0.001
損失值溢出,從網上找來的意見是修改
base_lr
,乘以0.1,改為0.0001
隻是修改
solver.prototxt
中的參數,重新執行後
base_lr
沒有改變,但是
mbox_loss
沒有再出現
=nan
的情況
ctrl+c
中斷程式後,再重新執行,需要删除
/home/idc/deep/gjj/caffe/models/VGGNet/VOC0712/SSD_300x300
路徑下的臨時檔案,不然會從中斷點繼續執行。
原文:https://blog.csdn.net/panxiying1993/article/details/79089214
7.python2.7安裝opencv
pip install opencv-python