Caffe、TensorFlow、MXnet三庫對比

2021-01-14 圖像處理知識庫

Caffe能做什麼?

 

為什麼選擇caffe?

模塊化做的好

簡單:修改結構無需該代碼

開源:共同維護開原始碼

 

環境:

Distributor ID: Ubuntu 

Description: Ubuntu 12.04.4 LTS 

Release: 12.04 

Codename: precise

Linux version 3.2.0-29-generic (buildd@allspice) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012

 

整體結構:

定義CAFFE為caffe跟目錄,caffe的核心代碼都在$CAFFE/src/caffe 下,主要有以下部分:net, blob, layer, solver.

net定義網絡, 整個網絡中含有很多layers, net.cpp負責計算整個網絡在訓練中的forward, backward過程, 即計算forward/backward 時各layer的gradient。

 

在$CAFFE/src/caffe/layers中的層,在protobuffer (.proto文件中定義message類型,.prototxt或.binaryproto文件中定義message的值) 中調用時包含屬性name, type(data/conv/pool…), connection structure (input blobs and output blobs),layer-specific parameters(如conv層的kernel大小)。定義一個layer需要定義其setup, forward 和backward過程。

 

net中的數據和求導結果通過4維的blob傳遞。一個layer有很多blobs, e.g,

對data,weight blob大小為Number       * Channels * Height * Width, 如256*3*224*224;

對conv層,weight blob大小為       Output 節點數 * Input 節點數 * Height * Width,如AlexNet第一個conv層的blob大小為96       x 3 x 11 x 11;

對inner product 層, weight blob大小為       1 * 1 * Output節點數 * Input節點數; bias blob大小為1       * 1 * 1 * Output節點數( conv層和inner product層一樣,也有weight和bias,所以在網絡結構定義中我們會看到兩個blobs_lr,第一個是weights的,第二個是bias的。類似地,weight_decay也有兩個,一個是weight的,一個是bias的); 

 

blob中,mutable_cpu/gpu_data() 和cpu/gpu_data()用來管理memory,cpu/gpu_diff()和 mutable_cpu/gpu_diff()用來計算求導結果。

 

結合loss,用gradient更新weights。主要函數: 

Init(), 

Solve(), 

ComputeUpdateValue(), 

Snapshot(), Restore(),//快照(拷貝)與恢復 網絡state 

Test();

 

在solver.cpp中有3中solver,即3個類:AdaGradSolver, SGDSolver和NesterovSolver可供選擇。

 

關於loss,可以同時有多個loss,可以加regularization(L1/L2);

 

Protocol buffer

上面已經將過, protocol buffer在 .proto文件中定義message類型,.prototxt或.binaryproto文件中定義message的值;

Caffe 

Caffe的所有message定義在$CAFFE/src/caffe/proto/caffe.proto中。

Experiment 

在實驗中,主要用到兩個protocol buffer: solver的和model的,分別定義solver參數(學習率啥的)和model結構(網絡結構)。

 

技巧:

 

訓練基本流程:

數據處理 

法一,轉換成caffe接受的格式:lmdb, leveldb, hdf5 /      .mat, list of images, etc.;法二,自己寫數據讀取層(如https://github.com/tnarihi/tnarihi-caffe-helper/blob/master/python/caffe_helper/layers/data_layers.py)

定義網絡結構

配置Solver參數

訓練:如 caffe train -solver solver.prototxt      -gpu 0

(有刪節....)

相關焦點

  • TensorFlow和Caffe、MXNet、Keras等其他深度學習框架的對比
    表 2-1 所示為各個開源框架在GitHub上的數據統計(數據統計於 2017 年 1 月 3 日),可以看到 TensorFlow 在 star 數量、fork 數量、contributor 數量這三個數據上都完勝其他對手。
  • 從系統和代碼實現角度解析TensorFlow的內部實現原理|深度
    framework: 包含基礎功能模塊,如log, memory, tensorgraph: 計算流圖相關操作,如construct, partition, optimize, execute等kernels: 核心Op,如matmul, conv2d, argmax, batch_norm等lib: 公共基礎庫,如gif、gtl(google
  • TensorFlow 資源大全中文版
    (點擊上方藍字,快速關注我們)譯文:伯樂在線專欄作者 - Yalye英文:jtoy如有好文章投稿
  • 深度解讀TensorFlow,了解它的最新發展!
    TensorFlow.js 是一個開源的用於開發機器學習項目的 WebGL-accelerated JavaScript 庫。TensorFlow.js 可以為開發者提供高性能的、易於使用的機器學習構建模塊,允許研發人員在瀏覽器上訓練模型,或以推斷模式運行預訓練的模型。
  • TensorFlow 中文資源全集,學習路徑推薦
    https://gitee.com/fendouai/Awesome-TensorFlow-Chinese很多內容下面這個英文項目:Inspired by https://github.com/jtoy/awesome-tensorflow官方網站官網:https://www.tensorflow.org/中文:https://tensorflow.google.cn
  • 【注意力機制】transformers之轉換Tensorflow的Checkpoints
    來源 | Github作者 | huggingface編譯 | VK【導讀】本節提供了一個命令行界面來轉換模型中的原始Bert/GPT/GPT-2/Transformer-XL/XLNet/XLM的Checkpoints,然後使用庫的from_pretrained方法加載該Checkpoints。
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    我將使用 python 的 multiprocessing 庫,增加處理網絡攝像頭時的 FPS。為了進一步提高可移植性,我將項目集成到 Docker 容器中。不過處理進出容器的視頻流可能會有一點麻煩。此外,在次項目我還添加了一個視頻後處理功能,同樣使用 multiprocessing 庫來減少處理時間(使用 Tensorflow 原始目標檢測 API 處理時間會非常長)。
  • 如何優雅地用TensorFlow預測時間序列:TFTS庫詳細教程
    作者:何之源轉載自知乎專欄:AI Insight量子位 已獲授權編輯發布這篇文章中,作者詳細介紹了TensorFlow Time Series(TFTS)庫的使用方法。主要包含數據讀入、AR模型的訓練、LSTM模型的訓練三部分內容。內容翔實有趣,量子位轉載分享給大家。
  • Keras和TensorFlow究竟哪個會更好?
    下面開始正文: ▌對比 Keras 和 TensorFlow 沒什麼意義 前些年,深度學習領域的研究人員、開發人員和工程師必須經常做出一些選擇: 我應該選擇易於使用但自定義困難的 Keras 庫? 還是應該使用難度更大的 TensorFlow API,編寫大量代碼?(更不用說一個不那麼容易使用的 API 了。)
  • 玩轉TensorFlow?你需要知道這30功能
    地址是:tensorflow.org/tfx/?網址是:https://www.tensorflow.org/tfx/transform/?網址是:https://www.tensorflow.org/serving/?
  • 終於來了,TensorFlow 新增官方 Windows 支持
    隨著 TensorFlow r0.12 版的發布,這一開源軟體庫現已支持 Windows7、10 和 Server 2016。同時,這一新版本可以讓用戶在 TensorFlow 訓練中得到 CUDA 8 的 GPU 加速。我們已將新版本在 PyPI 中封裝成型。現在你可以使用命令 C:\> pip install tensorflow 安裝 TensorFlow 了。
  • TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving...
    HTTP/REST API at:localhost:8501 …$ curl -o /tmp/resnet/resnet_client.py https://raw.githubusercontent.com/tensorflow/serving/master/tensorflow_serving/example/resnet_client.py
  • TensorFlow極速入門
    最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、tensorflow是什麼?tensorflow 是 google 開源的機器學習工具,在2015年11月其實現正式開源,開源協議Apache 2.0。
  • 如何使用TensorFlow Hub的ESRGAN模型來在安卓app中生成超分圖片
    例子 https://github.com/tensorflow/tensorflow/blob/c58c88b23122576fc99ecde988aab6041593809b/tensorflow/lite/python/lite_test.py#L529-L560 模型轉化完之後,我們可以很快驗證 ESRGAN 生成的超分圖片質量確實比雙三次插值要好很多。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    論文地址:http://download.tensorflow.org/paper/whitepaper2015.pdfTensorFlow 現已被公司、企業與創業公司廣泛用於自動化工作任務和開發新系統,其在分布式訓練支持、可擴展的生產和部署選項、多種設備(比如安卓)支持方面備受好評。
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    將 WaveNet 安裝到安卓的三個步驟。從源安裝和配置 TensorFlow(https://www.tensorflow.org/install/install_sources)。3.在 TensorFlow 目錄下運行下列命令行:bazel build tensorflow/tools/graph_transforms:transform_graphbazel-bin/tensorflow/tools/graph_transforms/transform_graph \ --in_graph=/your/.pb/file \ --outputs="output_node_name
  • Tensorflow 2.0 即將入場
    2.0版的設計對公眾開放:社區可以和Tensorflow開發人員一起工作,共同探討新功能。兼容性和連續性:Tensorflow 2.0會提供Tensorflow 1.x的兼容性模塊,也就是它會內置所有Tensorflow 1.x API的模塊。
  • 5個簡單的步驟掌握Tensorflow的Tensor
    在這篇文章中,我們將深入研究Tensorflow Tensor的細節。我們將在以下五個簡單步驟中介紹與Tensorflow的Tensor中相關的所有主題:第一步:張量的定義→什麼是張量?但是首先,要使用TensorFlow對象,我們需要導入TensorFlow庫。我們經常將NumPy與TensorFlow一起使用,因此我們還可以使用以下行導入NumPy:import tensorflow as tfimport numpy as np張量的創建:創建張量對象有幾種方法可以創建tf.Tensor對象。讓我們從幾個例子開始。
  • 作為TensorFlow的底層語言,你會用C++構建深度神經網絡嗎?
    cd /path/tensorflowgit clone隨後你需要進行配置,如選擇是否使用 GPU,你需要這樣運行配置腳本:cd /path/tensorflow.非核心的 C++ TF 代碼在 /tensorflow/cc 中,這是我們創建模型文件的位置,我們也需要 BUILD 文件讓 bazel 可以構建模型。