DIY Deep Learning for Vision: A Tutorial With Caffe 報告筆記
目錄
簡介
報告時間是北京時間 12月14日 凌晨一點到兩點,主講人是 Caffe 團隊的核心之一 Evan Shelhamer。第一次用 GoToMeeting 參加視訊會議,效果真是不錯。
報告後分享出了 視訊 和 展示檔案。另一講座,cuDNN: Accelerating Convolutional Neural Networks using GPUs,視訊 和 展示檔案 也已放出。
Caffe 此前聽過沒用過,所以報告前自己試運行了一下,參照 官方教程。Caffe
安裝、上手都很快,Protobuf 式的層定義很直觀,模型修改或演算法調整變得很容易,相當於只需要改配置檔案。還找到了他們放在 Google Docs 上一個教程 PPT,
本次報告主要內容是
- 對機器學習、深度學習的一些介紹,包括若干深度學習的經典模型;
- Caffe 的優勢(模組化、速度、社群支援等)、基本結構(網路定義、層定義、Blob等)和用法(模型中損失函式、優化方法、共享權重等的配置、應用舉例、引數調優的技巧),以及未來方向(CPU/GPU 並行化、Pythonification、Fully Convolutional Networks等)。
以下是報告中的截圖配上自己的一點筆記,一手資料請參見上面給出的會後分享連結。
要點記錄
PPT 的首頁取自該專案的一個線上 demo,輸入圖片 url,識別物體類別。
左邊是淺層特徵,各類別物體雜亂無章;右邊是深度特徵,一些類別有較為明顯的分別。特別地,dog、bird、invertebrate 這三類動物類別離得較近,而 building、vehicle、commodity 這類無生命類別離得較近,可見深度特徵的強大。
此外,在深層結構當中,隱層神經元的啟用可能與特定的物體類別有關,比如有的神經元對人像敏感,而有的對數字或建築物敏感,最下面一層是閃光燈(或與之類似,比如反光的腦門……)效果。
Caffe 的優勢,網路結構的模組化和易表達是顯然的,社群資源也同樣強大,比如下兩頁內容。
Caffe 的 Reference Models 可供學術使用,比如 AlexNet、R-CNN、CaffeNet,包括模型定義、優化方法和預訓練權重。
Model Zoo 中有使用者貢獻的模型可供參考使用,比如 VGG、Network-in-Network。
Caffe 支援豐富的模型表達形式,包括 DAGs、Weight Sharing 以及 Siamese Network。
網路和層定義採用 protobuf 的樣式。
Layer 指的是權重和偏置,可以定義連線數、權重初始化方法等。
Blob 是四維資料結構,儲存節點上的數值以及模型引數,可以通過程式設計在 CPU 和 GPU 間傳輸。
模型定義之外,還需要一個指定優化策略的配置檔案,用以訓練模型。
使用 Caffe 訓練的一般步驟就是
- 資料預處理;
- 模型定義;
- 求解策略定義;
- 執行。
調參中重點講了一個 模型遷移的例項,用某項任務已有模型的引數作為新任務模型的引數初始值,然後進行模型訓練。
模型訓練一般由淺入深,逐步降低學習速率,以保持預訓練引數的某些性質。
接下來具體講述了 Loss、Solver、DAG、Weight Sharing 的概念和配置。
對同一模型,不同 Solver 的表現有差。
一般深度學習模型是線性形式的,比如 LeNet,而 Caffe 支援 DAG 形式的模型。
Caffe 的近期動向,CPU/GPU 並行化、Pythonification、Fully Convolutional Networks等。
Caffe 的團隊,拜 Yangqing Jia 師兄……
文獻參考。
提問
語音回答中,Evan 提到 UCB 的一個團隊正在開發 Scala 介面,不過尚屬實驗性質;Caffe 團隊在考慮 和 UCB 的 AMP 團隊合作,擴充套件到 Spark 這一計算平臺上;除了已支援的 CPU/GPU 計算,也考慮擴充套件支援 OpenCl;對於 Theano、Torch,鼓勵大家嘗試、比較……
文字問答如下,由 Yangqing Jia 回覆。
Q: Is the pre-trained model avaialbe for download to accelerate our work on other kinds of images?
A: FYI - for pretrained models that we release, please refer to the model zoo page here: http://caffe.berkeleyvision.org/model_zoo.html
Q: Android platform ?
A: People have asked about android/ios platforms. In principle this is possible since the code is purely in C, but of course some engineering efforts are needed to write makefiles like Android.mk for this. Our bandwidth is limited and we are focusing on the research part, but we welcome pull requests on github if you write one (and we thank you in advance)! Also, kindly check out the blog post by my colleague Pete Warden about our efforts on running with Jetson TK1: http://petewarden.com/2014/10/25/how-to-run-the-caffe-deep-learning-vision-library-on-nvidias-jetson-mobile-gpu-board/
Q: Can you discuss status and/or considerations for adding opencl support (and so be vendor neutral, as opposed to NVIDIA CUDA)?
A: In terms of using OpenCL - it has been under discussion for a while, but we are kind of shortstaffed so we focus more on the research side - we welcome contributions from open-source communities of course, please join us at github :)
Q: do you have an online examples of unsupervised losses
A: For unsupevised losses and training there is a bundled example of an MNIST autoencoder.
更多的問答(60+)請參見主辦方提供的 Q&A Transcript。
總結
“盜取”一頁 PPT 作為本文總結。