請問如何將深度學習Caffe做成一個動態庫,方便在其他應用程序中調用?


caffe社區在2015年1月提供了功能強大的cmake支持,具體內容見這個PR:

Improved CMake scripts by Nerei · Pull Request #1667 · BVLC/caffe · GitHub

這個PR中給出了一個用其他c++工程引用caffe的例子,其CMakeLists.txt如下:

cmake_minimum_required(VERSION 2.8.8)

find_package(Caffe)
include_directories(${Caffe_INCLUDE_DIRS})
add_definitions(${Caffe_DEFINITIONS}) # ex. -DCPU_ONLY

add_executable(caffeinated_application main.cpp)
target_link_libraries(caffeinated_application ${Caffe_LIBRARIES})

===============2016.7.6 增加其他工程用cmake引用caffe的常式===============

根據題主用的編程語言的不同,方案也不同

如果題主用python或者matlab的話,caffe自己就帶了binding,可以直接調用,具體配置方法caffe的主頁上也有很多常式,這裡就不贅述啦

下面重點說c++怎麼做。如果題主用c++的話,我不得不來安利一下cmake!!對於樓主這個需求,如果是linux環境的話,最最方便的做法是採用camke

具體做法是:

step 1. 編譯caffe

step 2. 用cmake控制其他程序的構建。在其他工程的CMakeLists.txt裡面用find_package(Caffe),然後cmake就可以找到caffe的所有.h和.cpp和.so,後面的用法就像opencv這些標準庫一樣啦

答主在2015冬曾寫過這樣一個c++工程,無比驚異於caffe社區居然提供了這種功能的cmake配置


caffe-windows/windows/caffe.binding at ms · happynear/caffe-windows · GitHub

代碼就這點,要用的話,還是要費點功夫遷移到你自己的工程中。

這個分支前兩天我手賤給升級到VS 2015+CUDA 8.0了,還在用VS 2013的只能自己動手了。

我這個方案的好處是寫自己的程序時不需要帶上caffe的header,編譯速度會快很多。


前段時間做過將faster-RCNN放到Qt GUI程序的任務,參考我GitHub

https://github.com/withwsf/Image_detection

可以看一下.pro文件裡面使用哪些依賴。


我已經把代碼整理出來了,不依賴別的庫,方便連進自己的工程!待我完善一下放到git


使用CMake很方便。社區已經提供了完整的CMakelist,可以配置生成libcaffe.so文件。有一個關於這個問題的issue,直接谷歌cmake caffe即可。我一直在使用這種方法在自己的項目中使用caffe。同時,OpenCV也是使用cmake進行管理的。


推薦閱讀:

卷積神經網路(CNN)學習資料推薦?
如何繪製caffe訓練過程中的loss和accurary的曲線??
batch normalization的multi-GPU版本該怎麼實現?
做圖像檢索,圖像庫從哪兒能下載到?

TAG:深度學習DeepLearning | Caffe深度學習框架 |