Check failed: shape[i] <= 2147483647 / count_ (3000 vs. 2485) blob size exceeds INT_MAX
这段时间在准备找实习,回顾深度学习调参经验的时候,突然想起以前工作站跑过的一个模型:基于faster-rcnn的人脸检测的模型,这是自己入坑时训练的第一个模型,从做数据到顺利跑完也花了两三天的时间,还是比较有意义的,也算是第一次亲眼见证了深度学习方法的效果之好。
但是在重新跑这个模型的时候,居然报了很多错。也难怪,那台工作站的环境重装过好多遍,再加上rbg大神写py-faster-rcnn的时候还是几年以前,代码有些部分只适合以前老版本的caffe。下面就把自己遇到的错误记录一下吧。
1、cudnn版本问题(这个错误的解决办法直接可以百度出来)
./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::createPoolingDesc(cudnnPoolingStruct**, caffe::PoolingParameter_PoolMethod, cudnnPoolingMode_t*, int, int, int, int, int, int)’:
./include/caffe/util/cudnn.hpp:127:41: error: too few arguments to function ‘cudnnStatus_t cudnnSetPooling2dDescriptor(cudnnPoolingDescriptor_t, cudnnPoolingMode_t, cudnnNanPropagation_t, int, int, int, int, int, int)’
pad_h, pad_w, stride_h, stride_w));
错误只复制了其中的一部分,这个错误是由于当前caffe版本中关于cudnn部分的代码与系统安装的cudnn版本不兼容(系统安装的cudnn较新),可以用
最新版caffe
中关于cudnn的代码文件替换caffe-faster-rcnn中关于cudnn的代码文件。
具体操作:
1.将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.
2. 将./include/caffe/layers里的,所有以cudnn开头的文件,例如cudnn_conv_layer.hpp, 都替换成最新版的caffe里的相应的同名文件。
3.将./src/caffe/layer里的,所有以cudnn开头的文件,例如cudnn_lrn_layer.cu,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu。
2、F0324 13:10:43.535276 16290 blob.cpp:33] Check failed: shape[i] <= 2147483647 / count_ (3000 vs. 2485) blob size exceeds INT_MAX
在编译完成之后,跑测试程序的时候,即使测试图片的分辨率小到50*40,也会报这个错。caffe中blob的大小超过最大值了,记得以前跑这个程序的时候是没遇到过这个错的,用的是同样的文件居然反差那么大。google了很久,很多人遇到相同的错但是没遇到什么有用的办法。最后直接进到报错的文件caffe-fast-rcnn/src/caffe/blob.cpp,发现这个错是由下面两句造成的:
CHECK_GE(shape[i], 0);
CHECK_LE(shape[i], INT_MAX / count_) << "blob size exceeds INT_MAX";
caffe源码对blob大小的限制。我直接注释掉这两句,然后重新编译caffe。最后能成功跑起来模型!
上一张检测效果吧。。
Check failed: shape[i] &lt;= 2147483647 / count_ (3000 vs. 2485) blob size exceeds INT_MAX 这段时间在准备找实习,回顾深度学习调参经验的时候,突然想起以前工作站跑过的一个模型:基于faster-rcnn的人脸检测的模型,这是自己入坑时训练的第一个模型,从做数据到顺利跑完也花了两三天的时间,还是比较...
caffe
训练或者测试
报错
:F0324 13:10:43.535276 16290
blob
.cpp:33] Check failed: shape[i] <= 2147483647 / count_ (3000 vs. 2485)
blob
size
exce
eds
INT
_
MAX
首先找到错误出处:
blob
.cpp,在
caffe
目录下的./src/
caffe
/
blob
.cpp
1、Check failed: shape[i] <= 0x7fffffff / count_ (1000 vs. 684)
blob
size
exce
eds
INT
_
MAX
意思是图片大小过大,超出了
caffe
设定的
INT
值范围,一种最为简便的方法是将其中较大的图片re
size
一下。还有就是改变其中
blob
.cpp源码中的大小设定,然后重新
编译
caffe
,建议新手不要这么做。...
#include "
caffe
/common.hpp"
#include "
caffe
/proto/
caffe
.pb.h"
#include "
caffe
/syncedmem.hpp"
#inclu
Release original memory and hold new:
template <typename Dtype>
void
Blob
<Dtype>::Reshape(const vector<
int
>& shape) {
CHECK_LE(shape.
size
(), k
Max
Blob
Axes);
count_ = 1;
shape_.re
size
(shape.
size
())
等着
caffe
没有膨胀到很大的程度把
caffe
的代码理一理
(1)第一次阅读
Caffe
的源码,给人的印象就是里面大量使用了gtest,确实也简化了不少代码,看起来很清晰。
(2)
caffe
的文档是使用doxygen来生成的,这点在注释里面有体现,对于自己以后的项目也可以借鉴。
二、相关知识:
(1)explicit关键字的作用是
overview整体上了解
caffe
的
Blob
Blob
成员变量
Blob
主要函数,核心在于
Blob
的使用实例以及其与opencv Mat的操作的相互转化(附带运行结果基于CLion)
overview
Blob
是
Caffe
作为数据传输的媒介,无论是网络权重参数,还是输入数据,都是转化为
Blob
数据结构来存储,网络,求解器...
1、Check failed: datum_channels > 0 (0 vs. 0).
train.prototxt中Datatype AnnotatedData和Data互换,changing data type from “AnnotatedData” to
“Data” or “Data” to "AnnotatedData"
layer {
name: "Data1"
错误发现及分析当使用
caffe
训练网络的时候,出现如题错误,我们可以分析下日志,日志如下:
我们可以看出,在错误发生前生成的Top shape:64 2048 4 4 。也就是feature
size
是4 × 4的。然后再看看pool5对应的pooling layer的设置:
发现pooling的核大小被设置成7,这就是问题的所在了。解决方案
改变输入图像的大小,可以使feature m
Invalid MEX-file '/home/abc/
caffe
/matlab/+
caffe
/private/
caffe
_.mexa64': /usr/lib/libgdal.so.20:
symbol TIFFReadRGBATileExt version LIBTIFF_4.0 not defined in file libtiff.so.5...
步骤大概是:建立一个train文件夹,里面放一个train.txt;建立一个test文件夹,里面放一个test.txt,然后分别运行以下两条bat命令:
SET GLOG_logtostderr=1
convert_imageset.exe train/ train/train.txt convert_data_train
pause
SET ...
20160119
1、 今天尝试用alex网络模型做自己的识别任务,提示如下错误 Check
failed: error == cudaSuccess (2 vs. 0) out of memory。
Google 之后 https://github.com/BVLC/
caffe
/issues/682
发现是test的batch 设置过大导致,把batch改小就好了。
原来设置为5
使用
Caffe
跑 Google 的Inception V2 对输入图片的shape有要求,某些shape输进去可能会
报错
。
Inception model中有从conv和pooling层concat的操作,而conv和pooling的output输出计算方式不完全一样。解决方案:
1. 按照原来prototxt输出图片
2. 把concat层前面stride为2的conv层替换stride为