zoukankan      html  css  js  c++  java
  • caffe 错误

    一些caffe错误

    1. 训练时很快梯度爆炸,loss猛增至nan
      如果找不到数据上的原因的话,可以怀疑caffe框架有问题,换用其它版本试试。比如我遇到的问题是在训练时使用了Accuracy层,而该层的实现代码在某次更新中GPU代码存在bug,复用了其它层的变量导致对loss的计算产生了影响。训练时去掉accuracy层就好了,测试时使用该层不受影响,或者使用这里的补丁https://github.com/BVLC/caffe/pull/5987 。
    2. Check failed: error == cudaSuccess (9 vs. 0) invalid configuration argument
      可能原因是GPU硬件配置低,线程数不够,超过了它能承受的范围。caffe不支持小于2.0计算能力的nvidia GPU,尝试调小batch size或者降低图片缩放的大小,使用较小的网络如ZF net或者VGG_CNN_M_1024试试。
      如果硬件没问题那么如果Faster R-CNN的smooth L1 loss层报错,RPN未产生候选区域,导致CAFFE_GET_BLOCKS分配到的block数为0,将配置文件中的bg_thresh_lo设置为0,可以增加roi的数量,然而有时候仍然不行。
      将CAFFE_GET_BLOCKS(count)替换为std::max(1, CAFFE_GET_BLOCKS(count))也可以解决一部分这个问题。
      如果问题仍未解决,请仔细检查训练数据,最终发现数据中某个样本是负样本(Faster R-CNN的该标签中没有目标标记),导致计算smooth l1损失时ground truth为0,因此导致了cuda的block数为0.
      再来看Invalid Configuration Argument的一般原因:

    Invalid Configuration Argument - This error means that the dimension of either the specified grid of blocks (dimGrid) , or number of threads in a block (dimBlock), is incorrect. In such a case, the dimension is either zero or the dimension is larger than it should be. This error will only occur if you dynamically determine the dimensions.

    1. 编译时报错:convert_imageset.cpp undefined reference to `caffe::ReadImageToDatum
      原因:之前安装caffe时在/usr/lib/libcaffe.so创建了符号链接,删除即可。
    2. 编译时报错:undefined reference to 'omp_set_num_threads'
      在Makefile或其include的Makefile.config中对gcc编译选项加入-fopenmp:
      CXXFLAGS += -fopenmp
      LDFLAGS += -lgomp
      
      注意不要加入到COMMON_FLAGS中,因为其被nvcc用到,而nvcc没有openmp选项。
    3. 在运行caffe的时候,如果出现如下报错
      free(): invalid pointer: 0x00000000020663b0
      可能是 glibc malloc/free 的问题, 可用TCMalloc库替代:
      # 下载tcmalloc库.so
      sudo apt install libtcmalloc-minimal4
      # 可选方式二: 性能分析工具(全家桶): apt install google-perftools
      # 对于要执行的程序通过preload替换掉原malloc功能库
      export LD_PRELOAD="/usr/lib/libtcmalloc_minimal.so.4"
      
      Google开源的TCMalloc,在C++小对象频繁创建销毁的处理上拥有非常大的优势。tcmalloc速度快,但是耗内存,不适合直接与caffe链接到一块, 从caffe的提交历史可以看到曾经加入了tcmalloc后来又删除了.
      在使用PyTorch或者Tensorflow等框架时也可能遇到这个问题.
      参考How To Use TCMalloc?TCMalloc : Thread-Caching Malloc
    4. caffe的python接口.
      caffe的python接口很容易因为C++代码的改动编译而出现运行时错误. 解决方法是删除python/caffe/下的caffe.so 或者重新编译整个工程.
      其它错误, 每次修改caffe的C++代码并编译caffe时make或cmake工具仅编译改动过的文件及依赖文件,可能会出现一些很奇怪的运行时错误. 这种情况下的首选尝试方法就是重新编译整个工程. (我遇到很多次这种情况了, 可能是Makefile写的不够完善)
  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/makefile/p/caffe-errors.html
Copyright © 2011-2022 走看看