caffe相关问题(持续更新。。。。)

来源:互联网 发布:韩版西装品牌 知乎 编辑:程序博客网 时间:2024/05/18 00:16

case1: syncedmem.cpp:56] Check failed: error == cudaSuccess (2 vs. 0)  out of memory

这种情况下,可能有进程在使用显存,而且使用很多,已经耗尽显存了。无法再分配显存。

使用:nvidia-smi查看显存使用情况:

Mon Aug 21 17:22:35 2017+-----------------------------------------------------------------------------+| NVIDIA-SMI 375.66                 Driver Version: 375.66                    ||-------------------------------+----------------------+----------------------+| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC || Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. ||===============================+======================+======================||   0  GeForce GTX 960     Off  | 0000:01:00.0      On |                  N/A || 40%   60C    P2    37W / 120W |   1513MiB /  1993MiB |      0%      Default |+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+| Processes:                                                       GPU Memory ||  GPU       PID  Type  Process name                               Usage      ||=============================================================================||    0      1438    G   /usr/lib/xorg/Xorg                             160MiB ||    0      1500    C   /usr/bin/python                                 44MiB ||    0      3268    G   compiz                                         108MiB ||    0     25749    C   ../caffe/build/tools/caffe                    1195MiB |+-----------------------------------------------------------------------------+
另一种情况是,train和test的prototxt里面的batch_size设置过大,导致显存一次不能载入那么多数据。该小即可:

test:

data_param {    source: "/home/gesture1/lmdb/gesture1_test_lmdb"    batch_size: 1    backend: LMDB  }
train:

data_param {    source: "/home/gesture1/lmdb/gesture1_trainval_lmdb"    batch_size: 1    backend: LMDB  }

现在看看这个batch_size是啥子意思:

这个是网络没迭代一次处理的图片数目,如果你有12800张照片,这个batch_size设置为128,则训练完所有的图片,至少需要迭代100次。

#############################

在使用ssd的mobilenet时候

发现网络输出提示:

Couldn't find any detections
然后直接crash掉。

查看网络结构,发现如下的设置:

code_type: CENTER_SIZE keep_top_k: 100 confidence_threshold: 0.25 
我目下使用自己的数据集进行训练,只有四种物体。之前未crash掉是因为物体种类有21种,检测成其他物体且在0.25左右的可能性很高。为了证明这个推断,查看ssd算法原始deploy的输出值设定:

code_type: CENTER_SIZE    keep_top_k: 200    confidence_threshold: 0.01 
可以看出是否发生crash与此处的阈值confidence_threshold有关

故而修改此值为0.001,再重新运行网络,不会发生crash的情况了。