新闻  |   论坛  |   博客  |   在线研讨会
深度解决添加复杂数据增强导致训练模型耗时长的痛点(1)
计算机视觉工坊 | 2022-12-22 19:23:59    阅读:232   发布文章

本文来自社区投稿

作者:教 主

原文链接: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。



*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客