编译Caffe c++分类示例
Compiling Caffe C++ Classification Example
我最近修改了Caffe c++分类示例文件,我正试图重新编译它。但是,我在链接一个简单的g++编译到include目录中的.hpp文件时遇到了麻烦。我知道这是一个基本的问题,但我似乎不能解决它——有人能帮我解决如何编译这个程序吗?现在编译看起来像这样:
g++ -I /home/jack/caffe/include classification.cpp -o classify
但是我得到这个错误:
In file included from /home/jack/caffe/include/caffe/common.hpp:19:0,
from /home/jack/caffe/include/caffe/blob.hpp:8,
from /home/jack/caffe/include/caffe/caffe.hpp:7,
from classification.cpp:1:
/home/jack/caffe/include/caffe/util/device_alternate.hpp:34:23: fatal error: cublas_v2.h: No such file or directory
#include <cublas_v2.h>
我在一台没有Nvidia gpu的机器上运行这个,所以当我查看device_alternate.hpp文件时,我意识到这正在调用许多与cuda相关的。hpp文件,这些文件也不存在。
通常,为了帮助编译器定位头文件,您需要在编译行中添加-I /path/to/include/folder
选项:
~$ g++ -I /path/to/caffe/include myfile.cpp
如果您想在caffe中构建自定义文件,有两种方法
简单方法
- 进行必要的更改,并将文件(在您的示例中是classification.cpp)保存在目录(例如test)中的示例文件夹中
- 运行
make
。这将自动添加必要的cxxflags和ldflags,并编译代码,并将可执行文件放在build/examples/test文件夹中。这也确保设置了标志CPU_ONLY(如Makefile中所述)。配置)
The Hard way
- 运行make,没有漂亮的打印选项(在Makefile中提到)。配置)。您将能够看到用于构建示例和工具的编译和链接选项。您可以复制并粘贴这些选项(如果使用的话,还可以对相对路径进行必要的更改)来编译文件
希望有帮助
编辑由于op请求了一种简单的方法,它可以按如下方式完成
这是一个非常最小的示例,我建议OP参考完整的在线文档和cmake使用示例。
- 需求
- Caffe需要使用cmake构建-相对容易,因为当前主分支有CMakeLists和所有定义。使用Cmake-gui或ccmake来设置您的选项
现在,我假设您有如下的项目结构:
-project
- src
- class1.cpp
- CMakeLists.txt ( to be added )
- include
- class1.hpp
- main.cpp
- CMakeLists.txt ( to be added )
CMakeLists.txt (src)需要包含(至少)以下行,
cmake_minimum_required(VERSION 2.8)
find_package(OpenCV REQUIRED) # Optional in case of dependency on opencv
add_library( c1 class1.cpp )
注意:如果class1依赖于其他外部库,则必须使用include_directories
包含headers的路径。
CMakeLists.txt(最外层)需要在最小
包含以下内容cmake_minimum_required(VERSION 2.8)
PROJECT(MyProject)
find_package(OpenCV REQUIRED)
find_package(Caffe REQUIRED)
include_directories( "${PROJECT_SOURCE_DIR}/include" )
add_subdirectory( src )
include_directories( "$Caffe_INCLUDE_DIRS}" )
add_executable(MyProject main.cpp)
target_link_libraries( MyProject ${OpenCV_LIBS} c1 ${Caffe_LIBRARIES} )
现在,在项目目录中执行以下命令将在build
文件夹中创建可执行的MyProject
。
mkdir build
cd build
cmake ..
make
你可以用./MyProject (arguments)
编辑2
满足使用CMake构建caffe的要求对于此工作非常重要。您需要使用CMake配置和生成makefile。使用cmake-gui
或ccmake
用于此目的,以便您可以设置CPU_ONLY等选项。
您应该在caffe中创建一个构建目录,并执行以下操作来进行基本设置
mkdir build
cd build
cmake ..
make -jX #X is the number of threads your CPU can handle
现在,$HOME文件夹中的.cmake目录包含以下内容/home/user/.cmake/packages/Caffe/<random_string>
文件。这个文件指向caffe的安装位置(也就是我们的构建目录)
现在,find_package命令应该在您的其他项目中正常运行。因为你正在使用CMake,你可以把你的项目文件夹放在Caffe文件夹之外(最好把它放在外面,因为Caffe的make过程会尝试构建你的文件,但它会失败)
注意:如果错误仍然存在,您可以在cmake配置时手动设置Caffe_DIR
更改Makefile。设置CPU_ONLY := 1
# CPU-only switch (uncomment to build without GPU support).
CPU_ONLY := 1
在./caffe/include/caffe/util/device_alternate.hpp
中
...
#ifdef CPU_ONLY // CPU-only Caffe.
...
#else // Normal GPU + CPU Caffe.
#include <cublas_v2.h>
...
这意味着它将尝试包含cublas_v2.h
,除非定义了CPU_ONLY
标志。
由于您的机器没有Nvidia GPU,您必须在编译时使用-DCPU_ONLY=1
定义CPU_ONLY
标志
g++ -DCPU_ONLY=1 -I /home/jack/caffe/include classification.cpp -o classify
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 更改 C++ 中的组合分类变量
- 只有级联分类器会发出未定义的引用错误
- 分类还是划分枚举?
- 如何删除部分类?
- 使用 SVM 进行分类,使用来自 Bag of Word 的词汇构建
- 如何读取文件并将该文件分类为不同类型的数据,这些数据都存储在结构中的特定数组中
- 将svm分类器设置为HOG检测器
- 使用类型特征的部分类专用化
- 将 CRTP 与部分类专用化结合使用?
- 为什么 C++17 标准没有带来部分类模板参数扣除?
- 神经网络和图像分类
- C++17 中的部分类模板参数推导
- 如何在这两个分类的链接列表之间获得开关的位置
- QTREEWIDGET子分类,停止下降指示器显示给定有不必要的DropIndicatorPosition
- 链接的列表字符串分类问题
- 在C /OBJ-C 中运行Tensorflow分类器模型与Python的结果不同
- 如何找到分类容器的匹配元素的索引
- 在给定的整数数组中,可以找到在给定位置之间分类数组的整数之和
- 以分类方式插入节点时遇到麻烦