安装PSPNet 遇到的问题

一颗行走的大白菜

1 安装前准备:
需要先安装matio,可以用下面的命令

sudo apt-get install libmatio-dev 

编译过程我遇到了下面的错误:
/include/caffe/common.cuh(9): error: function “atomicAdd(double *, double)” has already been defined
**解决方法:打开./include/caffe/common.cuh文件,在atomicAdd前添加宏判断即可。
下面为修改后文件// Copyright 2014 George Papandreou

#ifndef CAFFE_COMMON_CUH_
#define CAFFE_COMMON_CUH_

#include <cuda.h>


// CUDA: atomicAdd is not defined for doubles

#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600 
#else
static __inline__ __device__ double atomicAdd(double *address, double val) {
  unsigned long long int* address_as_ull = (unsigned long long int*)address;
  unsigned long long int old = *address_as_ull, assumed;
  if (val==0.0)
    return __longlong_as_double(old);
  do {
    assumed = old;
    old = atomicCAS(address_as_ull, assumed, __double_as_longlong(val +__longlong_as_double(assumed)));
  } while (assumed != old);
  return __longlong_as_double(old);
}

#endif

2 测试模型
按官方文档需要修改一下内容:
odify the related paths in ‘eval_all.m’:**
Mainly variables ‘data_root’ and ‘eval_list’, and your image list for evaluation should be similarity to that in folder ‘evaluation/samplelist’ if you use this evaluation code structure.
Matlab ‘parfor’ evaluation is used and the default GPUs are with ID [0:3]. Modify variable ‘gpu_id_array’ if needed. We assume that number of images can be divided by number of GPUs; if not, you can just pad your image list or switch to single GPU evaluation by set ‘gpu_id_array’ be length of one, and change ‘parfor’ to ‘for’ loop
上述是官方文档,具体操作如下:


*将 step = 500; %equals to number of images divide num of GPUs in testing e.g. 500=2000/4
修改为:step = 2000 %因为我只有一个gpu*

修改 dataroot 和eval_list ,这个需要注意,下面是我修改好的
data_root = ‘datasets/ADE20K/’; %root path of dataset
eval_list = ‘ADE20K_val.txt’; %evaluation list, refer to lists in folder ‘samplelist’
需要注意的是,在eval_sub.m 中使用 fullfile(data_root,eval_list),这个函数会将data_root 和eval_list 的字符串加起来,得到 ”datasets/ADE20K/ADE20K_val.txt“,这个是 你的ADE20K_val.txt 的完整路径,所以data_root && eval_list 需要根据你的文件位置调整

修改gpu_id_array = [0:3]; 为 gpu_id_array = [0];
修parfor 为 for


3 遇到的第2个问题
若报下面的错误

n file included from ./include/caffe/util/device_alternate.hpp:40:0, from ./include/caffe/common.hpp:19,
from src/caffe/common.cpp:7: ./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));
^

一个简单的解决方法,就是把Makefile.config 文件中的USE_CUDNN := 1注释掉

4。遇到的第3个问题

MEX-file '/home/jack/PSPNet/matlab/+caffe/private/caffe_.mexa64' 无效:
/usr/local/MATLAB/R2016b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by
/home/jack/PSPNet/matlab/+caffe/private/caffe_.mexa64)。

出错 caffe.reset_all (line 5)
caffe_('reset');

出错 eval_sub (line 22)
caffe.reset_all();

出错 eval_all (line 72)
  eval_sub(data_name,data_root,eval_list,model_weights,model_deploy,fea_cha,base_size,crop_size,data_class,data_colormap, ...

解决方法:
执行命令:

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 .

这样就ok 啦

然后就可以run了
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34650787/article/details/80237889