【杂谈】工程能力差,C++水平菜?CUDA没写过?我推荐玩下Caffe
深度學習開源框架眾多,基于C++的訓練框架唯有Caffe一個,盡管Caffe在做一些比較新的任務時成本極高,但它依舊有它存在的價值,今天在這里給出幾個推薦理由。
作者&編輯 | 言有三
1 Caffe的功績
筆者從2015年開始從事深度學習相關的工作,彼時不管是學術界還是工業界,Caffe是主流。哪怕隨著幾年后Tensorflow,MxNet,以及近兩年Pytorch的崛起,在移動端部署,各家公司在很長一段時間內都是將Caffe的核心代碼移植到手機上。
隨著騰訊的NCNN,小米MACE等移動端開源框架的流行,這個比例才慢慢降低。但是如果你認識一些在移動端上做視覺算法的朋友,可以問問他們的產品線上還有Caffe還有多大的比例,我相信或多或少都有,甚至是主流。
接口穩定,推理速度快,這是它流行的最重要的原因,這兩點對于工業界應用來說是真正的剛需。
2 Caffe安裝真的很難嗎
很多同學害怕Caffe,首先是因為害怕它的環境配置。誠然,Caffe需要自己編譯,但是這個編譯真的難嗎?
以Ubuntu為例,高于17.04的版本,安裝就一條命令:
sudo apt install caffe-cuda
低于17.04的版本,也就是要做幾件事情:
(1) 安裝Nvidia驅動和CUDA。
(2) 安裝依賴庫。
(3) 在Caffe源代碼中配置好庫路徑然后編譯。
第一條,或許是有一些坑,但這不是做深度學習算法工程師必備的技能嗎?公司和實驗室有了新的機器讓你配置難道也說不會。
第二條,無腦apt-get命令。
第三條,配置一下庫的路徑而已,Makefile都沒讓你寫,只是無腦敲一下make命令。
新手在環境安裝上卡住,其實并不是Caffe難,而是使用者對Linux系統非常不熟悉,這個鍋Caffe不背。還從未聽過哪家做深度學習算法開發的公司不基于Linux環境,你今天不學會到了公司更痛苦。
3 Caffe其實是最簡單的
很多人覺得Caffe好難啊,其實我想說,Caffe有可能是最簡單的了。它的使用流程如下:
以圖像分類任務為例:
(1) 準備數據就是將數據按照Caffe分類任務的輸入格式準備如下,這很簡單吧,一個Python遍歷腳本。
../../../../datas/mouth/1/182smile.jpg 1
../../../../datas/mouth/1/435smile.jpg 1
../../../../datas/mouth/0/40neutral.jpg 0
../../../../datas/mouth/1/206smile.jpg 1
(2) 定義網絡,就是去改改網絡配置文件train.prototxt,復雜點的寫個腳本,卷積層的格式如下:
layer {
一邊改一邊在Netscope中實時可視化,網絡拓撲結構有沒有問題一點就能看出來。
(3) 配置訓練參數,就是改改下面的文件。
net: "./train.prototxt"
test_iter: 100
test_interval: 10
base_lr: 0.00001
momentum: 0.9
type: "Adam"
lr_policy: "fixed"
display: 100
max_iter: 10000
snapshot: 2000
snapshot_prefix: "./snaps/conv3_finetune"
solver_mode: GPU
(4) 訓練,跟大部分框架一樣,甚至更加簡單。下面是一個finetune模型的例子。
SOLVER=./solver.prototxt
WEIGHTS=./init.caffemodel
../../../../libs/Caffe_Long/build/tools/caffe train -solver $SOLVER -weights $WEIGHTS -gpu 0 2>&1 | tee log.txt
縱觀以上任務,你做了啥?不就是寫個腳本處理了一下數據,把網絡模塊化的搭建一下,把優化參數配置一下,整體下來,可能20行Python代碼都沒有。
恐怕只有像Darknet這樣類似的框架才有如此清晰而又簡單的過程。
只要把你任務需要的網絡層準備好了,用Caffe訓練和測試都非常簡單,至于網絡層不會寫,各路大神開源的代碼在GitHub上多的很,至少一些基本的視覺任務都是有的。GitHub拿來主義,人人皆會。
4 如何用Caffe學習C++和CUDA
使用Caffe可以非常方便的鍛煉自己的C++和CUDA水平,有三步曲。
(1) 閱讀學習Caffe的源代碼和設計模式。
Caffe的所有源代碼都是C++/CUDA寫的,使用工廠設計模式,代碼結構清晰,可讀性和拓展性強,效率高。
(2) 自己添加新的網絡層,包括數據層,損失層等。
把C++類的設計,各種數據結構和標準庫熟悉并且用起來,把CUDA代碼也寫一寫。這些都是以后去公司從事模型部署和優化框架工作所必須準備好的技能。
(3) 學會用Caffe部署和分析模型。
學會用Caffe去分析每一個網絡層的計算量和計算時間,找到性能瓶頸。學會用它把模型進行封裝和加密,在嵌入式平臺中使用。
Caffe確實沒有像Pytorch等框架那么學術而更偏工程,但工程能力正是現在大多數想進入這一行的同學所欠缺的。
你會的,別人不會,才體現出你的價值。
對公司來說重要的,不是你會什么,而是它需要什么。
脫離了工程實踐能力的算法工程師,滿大街都是,但他們找不到工作。
5 Caffe的穩和缺點
Caffe最大的特點是穩,不像Tensorflow等框架一樣更新一次版本后原來的代碼就不能用了,庫又得重新裝了等等,只需要專注于自己的任務即可。
當然版本穩定就帶來了一些缺點,比如不支持自動求導,不支持模型級并行,只支持數據級并行,不適合于非圖像任務等。
但還是那句話,對于基于卷積神經網絡的成熟而通用的任務來說,Caffe是很不錯的選擇,它的學習價值,也永不褪色。
相關學習資料,可以參考我們的往期文章和GitHub開源框架。
【完結】給新手的12大深度學習開源框架快速入門項目
總結
C++和CUDA等代碼的水平對于在工業界從事深度學習相關工作至關重要,差異化的能力更容易讓你在競爭中取勝。
有三AI夏季劃
有三AI夏季劃進行中,歡迎了解并加入,系統性成長為中級CV算法工程師。
轉載文章請后臺聯系
侵權必究
往期精選
有三AI發布360頁11萬字深度學習CV算法工程師成長指導手冊,可下載收藏打印,未完待續
CV算法崗秋招臨門最后一腳,有三補招最后20個春季劃徒弟
【完結】深度學習CV算法工程師從入門到初級面試有多遠,大概是25篇文章的距離
【完結】優秀的深度學習從業者都有哪些優秀的習慣
【完結】給新手的12大深度學習開源框架快速入門項目
【完結】總結12大CNN主流模型架構設計思想
【知乎直播】千奇百怪的CNN網絡架構等你來
【AI不惑境】數據壓榨有多狠,人工智能就有多成功
【AI不惑境】網絡深度對深度學習模型性能有什么影響?
【AI不惑境】網絡的寬度如何影響深度學習模型的性能?
【AI不惑境】學習率和batchsize如何影響模型的性能?
【AI不惑境】殘差網絡的前世今生與原理
【AI不惑境】移動端高效網絡,卷積拆分和分組的精髓
【AI不惑境】深度學習中的多尺度模型設計
【AI不惑境】計算機視覺中注意力機制原理及其模型發展和應用
總結
以上是生活随笔為你收集整理的【杂谈】工程能力差,C++水平菜?CUDA没写过?我推荐玩下Caffe的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何跟随有三从零进阶中级CV算法工程师
- 下一篇: 【GAN优化】详解GAN中的一致优化问题