
DeepLearning
文章平均质量分 92
图波列夫
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Ascend DrivingSDK 中的 modulated_deform_conv2d(二)
本文介绍了modulated_deformable_conv2d的反向传播实现。主要内容包括:1) 反向计算需要处理4个输入的梯度,执行效率低于前向;2) 介绍了DrivingSDK中的modulated_deformable_conv2d_backward函数实现,包括参数检查、张量初始化和两种计算路径选择;3) 详细分析了DeformableConv2dGradKernel的处理流程,包含预处理和梯度计算过程。实现中考虑了分组和不分组情况,并对不同输入通道数进行了优化处理。原创 2025-08-14 12:43:34 · 318 阅读 · 0 评论 -
MMCV 中的 ModulatedDeformConv2d
MMCV 是一个面向计算机视觉的基础库。相比 torchvision, MMCV 的功能更丰富。而且除了 CPU 和 GPU 之外,还支持昇腾、寒武纪和摩尔线程的硬件。然而 MMCV 后端接入缺乏统一标准,DIOPI 早夭更是加剧了这一局面。MMCV 中 DeformConv2d 和 ModulatedDeformConv2d 分别对应 DCNv1 和 DCNv2 的实现。DeformConv2d 对外提供参数,而 ModulatedDeformConv2d 则没有。DeformConv2d 可能已原创 2025-06-30 18:56:13 · 1307 阅读 · 0 评论 -
Ascend DrivingSDK 中的 modulated_deform_conv2d(一)
Ascend DrivingSDK是为昇腾NPU平台开发的自动驾驶算子和模型加速库,其modulated_deform_conv2d算子采用两种实现:v1版本缓存卷积窗口索引并复用计算结果,v2版本优化3x3卷积性能但功能更简陋。两者均存在参数顺序不一致、功能不完善等问题,且缺乏文档说明,使用体验较差。该SDK虽开源但代码质量未达工业级标准,主要亮点在于利用NPU硬件特性(如大容量L2缓存)提升性能,但仍有较大改进空间。原创 2025-08-11 19:13:16 · 555 阅读 · 0 评论 -
DaDianNao:一种无主存储器的多核加速器
DianNao 发现内存访问而非计算是深度学习模型执行的瓶颈,并研究了一种最小化内存传输的加速器架构。后续的 DaDianNao 和 ShiDianNao 将该思路贯彻到了极致: ShiDianNao 是一种 YX 切分、输出驻留的嵌入式 CNN 加速器; DaDianNao:一种分布式驻留权值的多核加速器。DaDianNao 本意是一种多芯片AI 超算系统,类似于 Groq LPU 的 Scale Out。然而数据在多芯片间的移动会成为新的瓶颈。以现在的标准来看,DaDianNao原创 2025-02-11 20:11:02 · 1063 阅读 · 0 评论 -
DianNao:一种支持 Conv、FC 和 Pooling 的单核加速器
DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning 提出了首个深度学习处理器架构,开创了深度学习处理器方向,并且获得当年的 ASPLOS 2014最佳论文奖。在此之后,CNN 模型日新月异,各类 AI 加速器层出不穷。 NVIDIA 的 NVDLA 即是采用了和 DianNao 类似的 KC 切分、权值驻留结构,而搭载了 NVDLA 的 Jetson Xavier 和 Jetson Or原创 2024-12-24 18:42:25 · 1093 阅读 · 0 评论 -
CUTLASS 中的 47_ampere_gemm_universal_streamk 示例
前一篇文章介绍了 Stream-K: Work-centric Parallel Decomposition for Dense Matrix-Matrix Multiplication on the GPU 论文,下面对其代码实现进行分析。cutlass 的 examples/47_ampere_gemm_universal_streamk 展示了 GEMM Stream-K 算法在 Ampere 架构上的使用。对比了普通 Gemm 以及 Split-K 算法和 Stream-K 的性能原创 2024-08-21 19:36:09 · 1928 阅读 · 0 评论 -
onnxruntime 中的 Gather 算子
上一篇文章中介绍了 Division by Invariant Integers using Multiplication 的原理,很多框架均才用该算法优化除法运算。onnxruntime 是已知实现中最为简洁的,因此本文结合 onnxruntime 的 Gather 实现进行介绍。 Gather 算子是一个索引类算子,kernel 中每个线程计算偏移时使用 fast_divmod 避免除法运算。 注意:ONNX 中的 Gather 功能与 numpy.take 相同原创 2024-03-27 19:06:20 · 3224 阅读 · 2 评论 -
Division by Invariant Integers using Multiplication
表 1.1 比较了一些处理器上乘法和除法的时间。这张表展示了乘法和除法时间差距的增长趋势。因此,中提出了使用整数乘法进行任意非零整数常数和运行时不变量之间除法的算法。文档中记录了更广泛的处理指令性能,其中 Intel IceLake 处理器的乘除法指令延迟和吞吐倒数如下表所示:可以看出,在现代 CPU 处理器上除法开销大的情况并未发生改变。NVIDIA 和 AMD GPU 均不支持整数除法指令,CUDA C++ Programming Guide。原创 2024-03-19 20:00:37 · 1025 阅读 · 0 评论 -
CUTLASS: Implicit GEMM Convolution
Implicit GEMM 是将卷积操作表述为 GEMM (广义矩阵-矩阵积)。卷积接受激活张量并对其应用滑动滤波器以产生输出张量。二维卷积可以映射到矩阵乘:组建一个包含激活张量元素的卷积矩阵,然后由滤波张量形成的矩阵乘以该矩阵。该算法的最早形式通过通常称为 im2col 的操作显式构造卷积矩阵。生成的矩阵按照滤波器大小复制每个激活元素,消耗额外的存储容量和内存带宽。隐式 GEMM 算法是 CUDA 中分块、分层 GEMM 计算的一种变体:当数据从全局内存加载到共享内存时,通过周密地更新指针和谓词,它翻译 2023-08-15 19:21:06 · 4346 阅读 · 0 评论 -
CUTLASS: Efficient GEMM in CUDA
CUTLASS 实现了 CUTLASS: Fast Linear Algebra in CUDA C++ 和 CUTLASS GTC2018 talk 中描述的分层分块结构。基本的三重嵌套循环计算矩阵乘法可以应用分块和拼贴,以匹配硬件、内存局部性和并行编程模型中的并发性。CUTLASS 中 GEMM 映射到 NVIDIA GPU 的结构如以下嵌套循环所示。翻译 2023-08-10 19:39:18 · 2885 阅读 · 0 评论 -
OneFlow 中的 Softmax
Softmax 是深度学习模型中的常见算子。PyTorch 的 Softmax 算子直接调用 cuDNN 的接口。而 OneFlow 内部针对输入数据的类别数量,采用3个 kernel 来分别处理,在多数情况下都可以获得比 cuDNN 更优的性能表现。下面对其实现进行介绍。OneFlow 的静态分层结构如下图所示:原创 2023-08-10 19:18:13 · 2855 阅读 · 0 评论 -
torchvision 中的 deform_conv2d
如 DCNv1 和 DCNv2 论文所述,DeformConv 相比常规卷积的参数量和计算量增加不多,但对网络的提升很大。然而,DeformConv 的计算模式并不利于高效实现,给网络带来的开销比纸面数值大:常规卷积可以采用 Implicit GEMM 的形式,非常高效;DeformConv 需要离散访存和插值,增加了 IO 量和内存占用。在 Torchvision 以及其他框架中,DeformConv2d 采用 Explicit GEMM 的方式实现。具体步骤为:deformable_im原创 2023-07-07 17:53:40 · 4324 阅读 · 3 评论 -
DCN v2阅读笔记
是研究的续作,发表在 CVPR 2019上。作者对的自适应行为进行研究,观察到虽然其神经特征的空间支持比常规的卷积神经网络更符合物体结构,但这种支持可能远远超出感兴趣区域,导致特征受到不相关图像内容的影响。为此,作者提出了改进版的,通过增加建模能力和更强的训练来提高其聚焦于相关图像区域的能力。原创 2023-07-05 12:51:51 · 1337 阅读 · 0 评论 -
DCN v1阅读笔记
视觉识别(例如对象检测和语义分割)中的一个关键挑战是如何适应物体尺度、姿态、视角和零件变形中的几何变化或模型几何变换。以往通过扩充现有数据样本,构建具有足够所需变化的训练数据集来缓解。这两种方法的指导思想为在模块中增加额外偏移量的空间采样位置,并从目标任务中学习偏移量,而无需额外监督。新模块可以很容易地替换现有 CNN 中的普通模块,并且可以通过标准反向传播很容易地进行端到端训练,从而产生。原创 2023-06-26 20:14:14 · 656 阅读 · 0 评论 -
TensorFlow 中的 BatchToSpaceOp
Atrous Convolution 是中提出的卷积运算。不仅能够明确控制在深度卷积神经网络中计算特征响应的分辨率,还可以在不增加参数数量或计算量的情况下,有效地扩大滤波器的视场以纳入更大的上下文。作者通过在 Caffe 框架中的 im2col 层添加对底层特征图进行稀疏采样的选项来实现。而到了发布时,该操作已加入到 TensorFlow 官方支持中,即和。rr2r×r通过将空洞卷积化简为规则卷积,能够使用现有的高度优化的卷积程序。实现原理可参考。和会调用。fill:#333;原创 2023-04-23 19:34:48 · 862 阅读 · 1 评论 -
cuDNN 的初始设计
cuDNN V1.0在2014年的发布,并集成到 Caffe、Paddle 等深度学习框架中。论文介绍了 NVIDIA 对于该库的设计和实现。近十年间,NVIDIA 迭代推出了8代架构,cuDNN 也更新到 8.9。硬件上引入了 Tensor Core,软件方面 cuDNN V8 中的 Graph API 相比之前变化较大。然而,作为深度学习领域影响广泛的软件基础设施,一窥 cuDNN 的初始设计仍是有意义的。cuDNN 类似于 cuBLAS,提供了深度学习原语的高效实现。原创 2023-04-22 20:07:02 · 1386 阅读 · 0 评论 -
TensorFlow 中的 LRNOp
TensorFlow 中的 LRNOp 与 Caffe 的差异:* 直接使用平方和而不是像论文中一样使用平方和的均值,因此算子的推荐参数有所不同;* 仅支持 NHWC 格式的输入;* CPU 后端有多种实现: MKL、SingleThreadedLRN 和带状矩阵乘法实现;* GPU 后端仅有 cuDNN 实现,在前后插入转置操作。原创 2023-01-30 14:24:16 · 566 阅读 · 1 评论 -
Caffe 中的 LRNLayer
Caffe 中的 LRNLayer 支持两种模式: CrossChannel:为人们所熟知的局部响应归一化,在 AlexNet 中提出,在一些早期网络中使用; WithinChannel: Caffe 中独有的实现,未见网络中应用。本文略过。ReLU 具有不需要输入归一化以防止其饱和的理想特性。但 AlexNet 论文中发现 LRN 有助于提高泛化性。LRN CrossChannel 模式公式如下:原创 2023-01-17 11:54:38 · 477 阅读 · 0 评论 -
Understanding Memory Formats
大多数计算都是关于数据的:分析数据、调整数据、读取和存储数据、生成数据等。DNN 领域也不例外。图像、权重/过滤器、声音和文本需要在计算机内存中高效表示,从而以最方便的方式快速执行操作。本文致力于数据格式的一种数据表示形式,它描述了多维数组(nD)如何存储在线性(1D)内存地址空间中,以及为什么这对 oneDNN 很重要。翻译 2022-11-27 20:48:44 · 358 阅读 · 0 评论 -
PyTorch Design Philosophy
本文档旨在帮助贡献者和模块维护者理解 PyTorch 演化出的高层设计原则。这些规则并不是硬性规定的,而是用来作为指南,以帮助权衡不同的关注点,解决开发 PyTorch 时可能出现的分歧。有关贡献、模块维护以及如何将分歧升级至核心维护者的更多信息,请参见 [ PyTorch Governance](https://pytorch.org/docs/master/community/governance.html)。翻译 2022-11-23 16:58:02 · 224 阅读 · 0 评论 -
TensorFlow 中的 Conv2DOp
TensorFlow 中的2D 卷积主要依赖外部库,如 cuDNN、cuBLAS、ROCm 和 hfp/libxsmm,仅 DeepConv2D 为源码实现。Conv2DOpBinaryOpInitConv2DParameters 从 OpKernelConstruction 中读取设置到 Conv2DParameters 并进行检查。CudnnUseAutotune 标识是否开启自动调优。......原创 2022-08-03 10:35:49 · 1032 阅读 · 0 评论 -
PaddlePaddle 中的 CTCGreedyDecoder
TensorFlow 中的 CTCGreedyDecoder 仅包含 CPU 实现。而 PaddlePaddle 框架则更贴近实际需求,可以在 GPU 上运行。简单来说,PaddlePaddle 内部通过拼接方式,先通过 topk 算子找到最大类别,然后通过 CTCAlignOp 完成后处理。ctc_greedy_decodercheck_variable_and_dtype 检查变量的类型以及数据类型。LayerHelper 主要是在各个 layers 函数之间共享代码。内部调用 topk 算子得原创 2022-05-04 22:31:01 · 1273 阅读 · 0 评论 -
TensorFlow 中的 CTCGreedyDecoder
CTCGreedyDecoderOp 对输入中给出的 logits 执行贪婪解码(最佳路径)。原创 2022-04-30 21:47:25 · 2103 阅读 · 0 评论 -
Applying the Roofline Model for Deep Learning performance optimizations
Applying the Roofline Model for Deep Learning performance optimizations 以 Intel Xeon 为例,介绍了一种为非统一内存访问( NonUnified Memory Access,NUMA[8])自动创建 Roofline 模型的方法,并对 Intel oneDNN 库中实现的高效深度学习原语进行了评估。2 Description of methodology所有实验均在禁用 Intel Turbo Boost 技术的 Inte原创 2022-01-15 11:49:02 · 1154 阅读 · 0 评论 -
Hierarchical Roofline Performance Analysis for Deep Learning Applications
Roofline 模型是劳伦斯伯克利国家实验室在2008年提出的一个性能模型,后续很多工作亦出自该实验室。考虑到分层 Roofline 这一概念已在先前的Hierarchical Roofline analysis for GPUs: Accelerating performance optimization for the NERSC-9 Perlmutter system 和 Hierarchical Roofline Analysis: How to Collect Data using Perfo原创 2021-11-28 21:37:31 · 1443 阅读 · 0 评论 -
TNN MatConverter Resize
TNN 的 resize 虽然分通道提供了多个接口,但底层是一起的。整个实现对于灰度图优化非常有限,而3通道或4通道的图像会有加速。缩放的映射关系较为简单,主要分为三步:原创 2021-05-09 16:53:29 · 987 阅读 · 1 评论 -
TNN MatConverter WarpAffine
TNN 的仿射变换形态介于 OpenCV 和 ncnn 之间。其处理流程与 OpenCV 较为相似并做了一些优化,不同的地方在于数据处理宽度为4,比较小。在性能表现方面中规中矩,小图上不及 ncnn。MatUtils::WarpAffine#mermaid-svg-FNwIOkXOm8kxHfXI .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color原创 2021-05-09 16:42:07 · 594 阅读 · 3 评论 -
ncnn 中的 warpAffine
ncnn 的仿射变换对于深度学习的预处理即小图变换进行了优化,速度可达到 OpenCV 的两倍。详细请参考 [opencv ncnn warpaffine 性能测试](https://zhuanlan.zhihu.com/p/355147243)。在具体实现方面,优点是简洁明快,双线性插值采用10bit 量化,比 OpenCV 精度高;缺点是边界填充仅支持常量值。下面从 ncnn 的测试代码入手进行分析。原创 2021-05-09 16:26:02 · 1409 阅读 · 4 评论 -
CMake 编译 rkmedia
在瑞芯微的使用手册中,rkmedia 库使用 Buildroot 编译。然而由于配置文件众多,不易定位编译过程中的问题,所以本文以 CMake 进行构建。目标平台为 RV1109/1126。编译 libdrm-rockchiprkmedia 中的组件支持选项配置,但 drm 是必需的。所以第一步需要先编译该库。首先在电脑上按照编译过程中会用到的库。sudo apt-get install xutils-devsudo apt-get install libpciaccess-dev获取 lib原创 2021-03-07 20:01:58 · 3797 阅读 · 7 评论 -
TNN MatConverter CvtColor NV21TOBGR
OpenCV 中的 carotene 对于 armv7优化较好,而 armv8下则是 NEON 实现。TNN 提供了一套图像预处理接口并且进行了汇编优化。下面以 NV21TOBGR 为例进行介绍。MatUtils无成员变量,全部为静态函数。public: //copy cpu <-> device, cpu<->cpu, device<->device, src and dst dims must be equal. static Status Co原创 2021-02-21 21:38:45 · 831 阅读 · 0 评论 -
rkmedia 中的行人检测
RKMedia 是瑞芯微提供的媒体处理方案,可支持应用软件快速开发。rkmedia为 C 接口,其实现均在easymedia中。后者提供 C++ 接口。rkmedia中的行人检测示例,执行的操作为: 配置两个 RTSP 会话,初始化媒体处理平台; GetMediaBuffer 线程获取缓存并调用 rockx 进行检测跟踪; MainStream 线程绘制结果。原创 2020-12-26 11:20:21 · 6235 阅读 · 10 评论 -
MNN Interpreter and Session
MNN 中 Interpreter 和 Session 之间的关系如下图所示:Interpreter 为模型解释器,亦为会话管理器,负责从文件加载模型,创建并执行会话;一个 Interpreter 对应到一个 Net,管理基于该网络的多个任务;Session 表示推理任务,由 Pipeline 数组和输入输出张量字典组成;Session 根据 Schedule::schedule 生成的 Schedule::ScheduleInfo 创建;归属于同一 Net 的不同 Session 间不能并发调用原创 2020-09-12 17:56:16 · 2531 阅读 · 0 评论 -
MNN classficationTopkEval
MNN classficationTopkEval.cpp 输入模型和配置文件,测试模型在 ImageNet 数据集上的分类精度。程序分为3部分:ImageProcess 将图像转换为适当格式的 Tensor;Interpreter 由模型文件创建 Net 和 Session 并执行会话;computeTopkAcc 计算分类准确率。main#mermaid-svg-DIh1q4eQfe20BU3X .label{font-family:'trebuchet ms', verdana, ar原创 2020-08-30 14:22:48 · 453 阅读 · 0 评论 -
人脸对齐中的相似性变换
人脸对齐是大多数人脸分析算法中的一个关键模块,在人脸识别、表情识别、人脸建模等领域有着广泛的应用。人脸对齐获取图像中人脸的几何结构,基于平移、缩放和旋转得到对齐后的标准人脸。在欧式几何中,如果两个物体具有相同的形状,或者其中一个物体的形状与另一个物体的镜像相同,那么这两个物体是相似的。更准确地说,可以通过均匀缩放(放大或缩小)并叠加必要的平移、旋转和反射来获得另一个。这意味着任意物体都可以重新缩放、重新定位和反射,以便与另一物体精确重合。如果两个物体相似,则每个物体都与另一个物体的特定均匀缩放结果一致。原创 2020-05-16 15:30:51 · 3806 阅读 · 0 评论 -
用 Neon Intrinsics 优化 C 代码
以下内容翻译自:Optimizing C Code with Neon Intrinsics概述本指南向您展示如何在 C 或 C++ 代码中使用 Neon intrinsics 函数,以利用 Armv8架构中的 Advanced SIMD 技术。这些简单的示例演示了如何使用这些内嵌原语,并提供了一个解释其用途的机会。希望使用 Advanced SIMD 技术的底层软件工程师、库编写人员和其他...翻译 2020-02-01 17:55:49 · 4403 阅读 · 0 评论 -
AnnaAraslanova/FBNet 程序分析
AnnaAraslanova/FBNet 是 FBNet 相对来说比较好的一个第三方实现。延迟测量采用 x86 处理器的结果近似。需要注意的是:PyTorch GPU 并行对输入数据有要求;随机超网络直接使用 BN 层似乎不妥。supernet_main_file.pytrain_supernet 训练随机超网络。sample_architecture_from_the_supern...原创 2019-08-24 18:06:35 · 1471 阅读 · 4 评论 -
pysot 中的异步多进程切图
孪生网络算法对数据需求量较大,训练一般使用多个数据集。检测数据集普遍图大目标多,pysot 第一步准备数据,屏蔽了不同数据集的差异,也提升了数据加载效率。网络设定的模板大小为 127×127127\times 127127×127,搜索区域大约为 255×255255\times 255255×255。为给数据增强留有余地,数据切图大小为 511×511511\times 511511×511。下...原创 2019-08-24 18:49:26 · 1204 阅读 · 15 评论 -
BlazeFace:一种非典型专用检测器
MediaPipe 是谷歌在 CVPR2019会议上开源的一个感知和增强现实的框架。该框架基于图,可在移动设备、工作站和服务器上跨平台运行,并支持移动 GPU 加速。BlazeFace 为其中一个重要的组件,因为检测是绝大多数计算机视觉应用的入口。过往检测算法总是从提升性能出发,即便关注轻量级检测器的文章仍不免要在通用数据集上刷一下榜。而谷歌这篇紧贴实际需求,考虑场景限制条件,打造出一款小而专...原创 2019-08-25 19:54:49 · 6324 阅读 · 5 评论 -
Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification 论文笔记
Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification 似乎是商汤投 CVPR2019的论文。文中提出了一个统一的多目标跟踪(MOT)框架,学习充分利用长期和短期线索来处理 MOT 场景中的复杂情况。在现实系统中,可以认为每个组件都是不可靠的,所以作者联合多个模块交叠使用。现行方案中,检测器用于发现,Re...原创 2019-02-24 17:10:19 · 3026 阅读 · 0 评论 -
DeepStream User Guide
目录布局DeepStream SDK包含两个主要部分:库和工作流演示示例。已安装的DeepStream软件包包括目录/lib,/include,/doc和/samples。动态库libdeepstream.so位于/lib目录中有两个头文件:deepStream.h和module.h deepStream.h包括解码输出的定义、支持的数据类型、推断参数、分析器类和DeepStream...翻译 2018-03-01 19:19:10 · 6384 阅读 · 2 评论