ubuntu18.04+caffe-ssd+cuda9.2+cudnn7.3.1+opencv4.0.0α编译

    前言:鉴于caffe比较久远了(github上有两年没有更新版本了),所以基础教程这边就不多赘述了,可以自己搜一搜,csdn全站应该也有不少基础版本的教程了。然后我也是一次偶然的机会去接触最新发布的 opencv4α 版本(主要是自己太作了,想编译一个gpu版本的opencv去跑一下解码,结果并没有成功,然后索性系统也升级到ubuntu18.04了,换来换去最后就换到了最新版本的opencv4了),既然opencv编不出gpu解码(RTSP+GPU),那就不用了。
    当然,同时就是caffe也崩了。

下面进入正题。
    我使用的是cmake来编译caffe,推荐装个cmake-gui,方便查看编译选项,我在cmake里面增加了一个 USE_OPENCV_FOUR 的编译选项,本来以为caffe里面应该有加关于opencv版本的编译选项,但是,由于实在太久了,只有opencv2和3的差别,并没有考虑到后面的。
    所以需要自己手动加,另外需要在 $(CAFFE_ROOT)/cmake/Dependencies.cmake 这个文件里面找到80行这里,加上


    if(USE_OPENCV_FOUR)
        add_definitions(-DUSE_OPENCV_FOUR)
    endif()


这里做的是加上这个宏应用到代码中($(CAFFE_ROOT)是你caffe安装的目录)。我是这么干的。然后对应项目源码文件中有不适用的宏(比如CV_开头的有些宏是变化了的,也有可能是换了个头文件,一般这种都是C的宏,所以可以看看opencv里面的XXX_c.h里面是不是有定义,如果有就直接加头文件),也有部分函数名称发生了变化,推荐去用《XXX实战caffe》书里面提到的  grep -R -H -n "你要搜索的内容"  看一下具体在哪个头文件里面有相关函数,我一般搜索的时候搜函数名主体,比如cvScalar,就搜Scalar,然后你就会发现在imgproc.hpp第4344行定义了一个宏  #define CV_RGB(r, g, b) cv::Scalar((b), (g), (r), 0)  说明这个函数已经更名为 cv::Scalar 了,那就给编译出错的文件中加这么一个宏  #define cvScalar cv::Scalar  就可以了。
    不过我更加推荐一个一劳永逸的办法,就是通过opencv自带的宏,主版本号去进行判断, CV_MAJOR_VERSION 可以判断是opencv3还是opencv4的(opencv2.x版本用的不是这个宏),比我另外添加一个 USE_OPENCV_FOUR 看起来稍微科学一点

你可能感兴趣的:(caffe)