天天看點

caffe-ssd安裝問題解決

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
           

繼續閱讀