Caffe2 (0) Get started

Caffe2 的安裝可以參照官網 [1] 的安裝方式。我 Caffe2 搭配 CUDA 9.0 和 Ubuntu 18.04 一直都裝不起來 Orz,不過 16.04 倒是一路順暢 (選 build from source 再用 python3.5 就可以輕鬆安裝)。

1. From Caffe to Caffe2:

Caffe2 官網 [2] 解釋了 Caffe 和 Caffe2 的不同。Caffe 的核心是 blobs 和 layers。blob 是下圖左邊綠色的部份,代表資料或是 tensor。blob 可以透過 layer (下圖左邊藍色的部份) 去運算產生新的 blob。

而 Caffe2 就不同了,Caffe2 的核心是 blobs 和 operators。簡單來說就是把 caffe layers 中的 tensors 抽出來做成 blobs。所以 operator 只定義了如何運算,而其它數值的部份都是參數的傳入和回傳。


2. Caffe2 Package:

開啟終端機吧:

$ ipython

常要 import 的東西如下:

from caffe2.python import core, workspace
import numpy as np

numpy 是一種 cpu 的 tensor,我們可以把這個格式的資料餵給 Caffe2。


3. Workspaces and Blobs:

Workspace 類似 tensorflow 的 session,我們要在 Workspace 裡建立 blobs,blobs 才能被 Caffe2 運算。blobs 可以透過 numpy 來賦值。

X = np.random.randn(2, 3).astype(np.float32)

workspace.FeedBlob("X", X)

第一個 "X" 是 blob 的名字,第二個 X 是 numpy 物件用來賦值。

我們可以查找特定名字的 blob 或是列出所有 blob。

workspace.FetchBlob("X")
workspace.Blobs()

4. Operators:

Operator 是定義 blobs 間的運算關係,也有不須輸入只會輸出 blob 的 operator。

op =core.CreateOperator("Relu", ["X"], ["Y"])
workspace.RunOperatorOnce(op)
workspace.RunOperatorOnce(op)

Relu 會把負數變成 0,正數維持不變。

workspace.FetchBlobs(["X", "Y"])

來定義一個生成 blob 的 operator,這個 operator 會生成 Gaussian kernel。

op = core.CreateOperator("GaussianFill", [], ["Z"], 
    mean=0.0,std=1.0,shape=[2,3])
workspace.RunOperatorOnce(op)
workspace.FetchBlob("Z")

最後來把 workspace 清乾淨。

workspace.Blobs()
workspace.ResetWorkspace()
workspace.Blobs()

5. Nets:

Nets 是一系列 blobs 和 operators 的組合,下面演示一個 fully connected layer 的 net:

$$ Y=X*W^T+b$$
net = core.Net("Hello")

X = net.GaussianFill([], ["X"], shape=[2,3])
W = net.XavierFill([], ["W"], shape=[5,3])
b = net.ConstantFill([], ["b"], shape=[5,])
Y = X.FC(["W", "b"], ["Y"])

workspace.RunNetOnce(net)
workspace.FetchBlob("Y")

把圖存起來,綠色是 operators,白色是 blobs。我們的 X, W, b 是由 operator 產生。

from caffe2.python import net_drawer
g = net_drawer.GetPydotGraph(net)
g.write_png("graph.png")


Reference:

[1] https://caffe2.ai/docs/getting-started.html?platform=ubuntu&configuration=compile

[2] https://caffe2.ai/docs/operators.html

[3] https://github.com/caffe2/tutorials

留言

熱門文章