Detectron:Pytorch-Caffe2-Detectron的一些跟進

        pytorch官網:http://pytorch.org/上只有PyTroch的ubuntu和Mac版本,赤裸裸地歧視了一把Windows低端用戶。
python

1. Caffe源碼:Caffe源碼理解之存儲  
git

Caffe2存儲

Caffe2中的存儲結構層次從上到下依次是Workspace, Blob, Tensor。Workspace存儲了運行時全部的Blob和實例化的Net。Blob能夠視爲對任意類型的一個封裝的類,好比封裝Tensor, float, string等等。Tensor就是一個多維數組,這個Tensor就相似於Caffe1中的Blob。Caffe2中真正涉及到分配存儲空間的調用則在Context中,分爲CPUContext和CUDAContext。下面按照從下到上的順序分析一下Caffe2的存儲分配過程。github

  • Context
  • Tensor
  • Blob
  • Workspace
  • 總結 

總結

下面是Operator中從建立Blob到實際分配空間的流程,這個圖是怎麼畫出來的呢疑問:shell


        



2.Caffe2 Detectron的使用初步ubuntu

關於InferImage:windows

      在 NVIDIA Tesla P100 GPU 上,單張圖片的推斷時間大概是 130-140ms.固然這與輸入圖像的參數設置size有關。數組

2. Detectron 訓練

簡單介紹在 COCO Dataset 上訓練模型.ruby

採用 ResNet-50-FPN Backbone 進行 end-to-end 的 Faster R-CNN 訓練.多線程

這裏簡單進行模型訓練,小尺寸的輸入圖片,可以使訓練和推斷的速度相對較快.分佈式

2.1 單 GPU 訓練

python2 tools/train_net.py \ --cfg configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml \  OUTPUT_DIR /tmp/detectron-output
  • 輸出保存路徑 /tmp/detectron-output,如 models, validation set detections 等.
  • Maxwell GPU,如 M40 上,訓練耗時大約 4.2 個小時.
  • M40 上,每張圖片的推斷時間大約是 80 ms.
  • coco_2014_minival上的 Box AP 大約是 22.1%.

2.2 Multi-GPU 訓練

Detectron 提供了基於二、四、8 張 GPUS 訓練的 configs 參數配置文件.

configs/getting_started/tutorial_{2,4,8}gpu_e2e_faster_rcnn_R-50-FPN.yaml.

如,2 張 GPUs 的訓練:

python2 tools/train_net.py \ --multi-gpu-testing \  --cfg configs/getting_started/tutorial_2gpu_e2e_faster_rcnn_R-50-FPN.yaml \  OUTPUT_DIR /tmp/detectron-output

--multi-gpu-testing是告訴 Detectron 在訓練結束後,採用 multiple GPUs (如NUM_GPUs 爲 2) 進行並行化推斷.

指望的結果:

  • 訓練在 2 張 M40 上大概耗時 2.3 個小時.
  • 推斷時間大約是 80 ms,在 2 張 GPUs 上並行推斷時,耗時減半.
  • coco_2014_minival上的 Box AP 大約是 22.1%.

關於學習方案的調整(「linear scaling rule」),能夠參考提供的 config 文件,閱讀論文 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.

除了這裏,其它的 configs 都是基於 8 GPUs.

若是訓練的 GPUs 少於 8,或者想嘗試改變 minibatch size,有必要理解如何根據 linear scaling rule 來調整訓練方案.

注:

這裏的訓練示例採用了相對低的 GPU-compute 模型,所以,Caffe2 Python op 的開銷相對較高. 致使將 GPUs 由 2 增長到 8 時,開銷並不成比例減小,如採用 8 GPUs,須要訓練 0.9 小時,只比單張 GPU 快了 4.5x 倍.

當採用相對高的 GPU-compute 模型時,multi-GPUs 開銷的減小比例會提升.

3. 在Win10 中編譯安裝PyTorch

知乎文章:關於Windows PRs併入PyTorch的master分支

.......................................

開始編譯安裝

python setup.py install

目前針對Windows的已修復項:

  1. 在backward過程當中拋出異常會致使死鎖 PR 2941
  2. 在Dataloader開多線程時,會存在內存泄漏 PR 2897
  3. torch.cuda下的一個縮進bug PR 2941
  4. 增長對新 CUDA 和 cuDNN 版本的支持 PR 2941

目前Windows的已知問題:

  1. 部分測試會遇到權限不足問題 PR 3447
  2. 分佈式 torch.distributed 和 多顯卡 nccl 不支持
  3. python 3.5 如下的版本不支持
  4. 多線程的使用方式與 Unix 不一樣,對於DataLoader的迭代過程必定要使用以下代碼作保護。如遇到多線程下的問題,請先將num_worker設置爲0試試是否正常。
if __name__ == '__main__':

另外,你們必定很關心何時能出正式Windows正式版,日前,Soumith大神給出了他的回覆


因此此次應該仍是見不到正式的Windows版本,可是各位能夠期待到時候個人Conda包。

以上,就是文章的所有內容啦,若是感受還意猶未盡的話,能夠給個人Github 主頁或者項目加個watch或者star之類的(滑稽),之後說不定還會再分享一些相關的經驗。

相關文章
相關標籤/搜索