博客專欄

        EEPW首頁 > 博客 > 深度解決添加復雜數據增強導致訓練模型耗時長的痛點(1)

        深度解決添加復雜數據增強導致訓練模型耗時長的痛點(1)

        發布人:計算機視覺工坊 時間:2022-12-22 來源:工程師 發布文章

        本文來自社區投稿

        作者:教 主

        原文鏈接:https://zhuanlan.zhihu.com/p/585270139

        0 Introduction


        一直以來,得益于 GPU 的日益發展,深度學習中網絡訓練以及部署推理速度越來越快,在各大主流的深度學習框架,諸如 PyTorch、TensorFlow、OneFlow 等都有很多算子對 GPU 的加速支持。


        從網絡結構角度,PyTorch 雖然已經使用了 NVIDIA cuDNN、Intel MKL 和 NNPACK 這些底層來加快訓練速度,但是在某些情況下,比如我們要實現一些特定算法/算子,如果只是用 PyTorch 已有的算子或操作遠遠不夠。


        因為 PyTorch 雖然在特定操作上經過了很好的優化,但是對于 PyTorch 已經寫好的這些操作,假如我們組合起來成為一個新的算子(OP),PyTorch 不會管你的算法的具體執行流程,一般 PyTorch 只會按照設計好的操作去使用 GPU,然后 GPU 可能不能充分利用或者直接超負載,并且 python 解釋器也不能對此進行優化,導致訓練過程變慢很多 [1]。


        從數據流角度,深度學習一般都需要復雜的、多階段的數據處理流程,包括數據加載、解碼以及一定量的數據增強預處理操作,這些目前在 CPU 上執行的數據處理管道已經成為瓶頸,使得模型訓練耗時很長大。


        對于此,NVIDIA 提出了 Data Loading Library(DALI)[2],通過將數據預處理交給 GPU 處理,緩解 CPU 瓶頸問題。DALI 依賴于它自己的執行引擎,其構建目的是最大化輸入管道的吞吐量。諸如預取、并行執行和批處理等特性都是為用戶透明處理,如下圖所示:


        圖片

        DALI Pipeline


        使用 DALI 以及配置 DALI 環境比較復雜,并且 DALI 當前的支持的函數實現也比較有限,具體使用可以看文獻 [2] 中的說明文檔。


        實際開發中,對于一些復雜的特定數據增強操作,就需要自己實現。因此,構建了一個比較全面的工程以供大家學習和相互交流。


        本工程利用 Pytorch 的 C++/CUDA 擴展,實現 GPU 的數據增強,然后直接推送給網絡,從而達到訓練加速效果。


        為了指導大家系統性掌握該方面的相關知識,本工程也包含了 Python 的 C++ 拓展,且詳細講解了在需要依賴第三方庫的情況下怎樣編寫 setup.py 文件以及相關配置,關于如何編譯和測試,在后續有詳細的講解。



        1. Project Address


        https://github.com/ChenCVer/python_cpp_extension



        2. Project Structure


















        ├── 3rdparty          # 工程依賴的第三方庫│    ├── opencv│    │    ├── linux│    │    └── win│    └── pybind11├── docs              # 說明文檔及相關資料├── requirements      # python相關安裝依賴├── requirements.txt  # python相關安裝依賴項, 與requirements文件夾配合├── scripts           # 相關測試腳本├── tools             # 分析工具├── orbbec            # 源碼文件│    ├── nms          # 非極大值抑制│    ├── roi_align    # ROI Align│    ├── utils        # 編譯工具函數│    └── warpaffine   # 仿射變換增強└── setup.py          # 用于編譯和構建python包(.egg), 類似:CMakeLists.txt



        3. Compilation And Python Environment


        3.1. Compile Environment


        • GCC/G++ >= 5.5.0(Visual Studio 2017 or newer for Windows)

        • CUDA(NVCC): 10.1~11.5


        3.2. Python Environment

        (requirements.txt)





















        certifi==2021.5.30cycler==0.11.0future==0.18.2kiwisolver==1.3.1matplotlib==3.3.4mkl-fft==1.3.0mkl-random==1.1.1mkl-service==2.3.0numpy @ file:///C:/ci/numpy_and_numpy_base_1603480701039/workolefile==0.46opencv-python==3.4.0.12Pillow @ file:///C:/ci/pillow_1625663293114/workpyparsing==3.0.9python-dateutil==2.8.2six @ file:///tmp/build/80754af9/six_1644875935023/workterminaltables==3.1.10torch==1.5.0torchvision==0.6.0wincertstore==0.2


        3.3. Python Package infos



























        Package         Version --------------- --------- certifi         2016.2.28cycler          0.11.0Cython          0.29.32future          0.18.2kiwisolver      1.3.1matplotlib      3.3.4mkl-fft         1.3.0mkl-random      1.1.1mkl-service     2.3.0numpy           1.19.2olefile         0.44opencv-python   3.4.0.12Pillow          8.3.1pip             21.3.1pyparsing       3.0.9python-dateutil 2.8.2setuptools      59.6.0six             1.10.0terminaltables  3.1.10torch           1.5.0torchvision     0.6.0wheel           0.29.0wincertstore    0.2


        【注】:上述環境中的 PyTorch 版本需要對應的 CUDA 版本,本工程支持的 PyTorch 版本:PyTorch version:1.5.0~latest。



        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 房产| 禄劝| 贡嘎县| 邯郸县| 纳雍县| 通州市| 南木林县| 红河县| 喀喇沁旗| 剑川县| 康乐县| 新晃| 乐都县| 阿克苏市| 精河县| 荥经县| 沅江市| 南安市| 双峰县| 炎陵县| 灵璧县| 白沙| 北流市| 抚顺县| 泽普县| 义马市| 唐河县| 盘锦市| 阳西县| 体育| 铜鼓县| 扎囊县| 临猗县| 亳州市| 甘孜县| 乃东县| 若羌县| 泽普县| 石楼县| 大洼县| 锡林郭勒盟|