@BangBang
这个作者很懒,什么都没留下…
展开
-
pybind使用详解: python 调用c++代码
对于一些运行很慢的程序,我们就可以使用c++去实现,利用pybind11将接口暴露给python去调用,这样就实现代码编写快速,程序运行高效的目的。主要是对c++实现的类如何进行python的绑定,这样我们就可以在python 中直接创建C++的类,或调用相应的函数功能。,甚至是更快的速度。这里实现一个最简单的pybind的案例,用C++实现一个加法运算,python去调用c++的加法运算。,对大矩阵运算非常快),其次是c++实现的,python原生的矩阵乘法使用了惊人的1499ms。原创 2024-08-31 20:35:42 · 483 阅读 · 0 评论 -
vscode c++和cuda开发环境配置
通过网盘分享的文件:vscode-cuda-cpp-demo-0828.zip。,从而在调试的时候,能够对修改过的最新代码进行及时的编译。对应的bear版本相对比较低,一般为2.4左右。配置好函数跳转,下一步配置GDB调试(debug)了,同时鼠标放在该函数上会有函数的提示信息。(2)根据源文件的目录,可以修改如下代码。此时原先不能高亮显示,或跳转的函数,就能。(4) make clean 命令。(2)bear make 命令。则对应的bear版本一般为。(1) make 命令。编译器的option。原创 2024-08-28 22:47:27 · 318 阅读 · 0 评论 -
图像增强:使用周围像素填充掩码区域
非0进行修复cv2.inpaint 是 OpenCV 库中的一个函数,用于图像修复(inpainting),即填充图像中的损坏区域或遮罩区域。这个函数。原创 2024-08-04 14:09:46 · 165 阅读 · 0 评论 -
使用warpAffine实现图像的几何增强
warpAffine是OpenCV中的一个函数,它可以用来对图像进行仿射变换,这包括旋转、平移、缩放和错切等操作。通过使用仿射变换,我们可以对图像进行几何增强,以增加数据的多样性,提高模型的泛化能力。水平或垂直翻转图像可以通过修改旋转矩阵来实现。旋转图像可以通过指定一个旋转角度来实现。原创 2024-08-03 22:18:28 · 78 阅读 · 0 评论 -
图像像素增强albumentations库的使用
albumentations是一个快速的图像增强库,用于机器学习任务。它支持各种类型的图像变换,包括但不限于旋转、平移、缩放、剪切、翻转、噪声注入、遮挡等。albumentations库可以与深度学习框架如PyTorch和TensorFlow很好地集成, 支持种类丰富的像素级变换,包括雨天、雾天、色域变换等等。原创 2024-08-03 21:53:41 · 90 阅读 · 0 评论 -
CUDA 编程(1):使用Grid 和 Block分配线程
核函数以线程为单位进行计算的函数,cuda编程会涉及到大量的线程(thread),几千个到几万个thread同时并行计算,所有的thread其实都是在执行同一个核函数。。之所以这么划分,比如将Grid划分为多维的Block,Block划分为多维thread,它其实是为了帮助你快速索引对应的thread。Grid 和Block是逻辑上意义的概念,它并不是在你的GPU硬件上实际存在的。原创 2024-06-09 16:17:08 · 442 阅读 · 1 评论 -
tensorRT 自定义算子plugin的实现
实现一个自定义算子, 对输入的x, 先加一个数r,再乘以simport os自定义算子需要实现2个类,分别是算子的实现类, 以及利用实现类构建的算子类是自定义算子的实现类,通过继承父类的方式实现导出自定义算子。继承该父类后需要用户自己实现forward以及symbolic两个静态方法。forward函数: 定义该算子实现的具体代码,其中第一个参数必须是ctx, 后面的参数是实际自己传入的参数。symbolic方法: 由于是自定义的算子,因此需要定义符号函数symbolic,从而让onnx能识别它。原创 2024-06-09 12:32:09 · 600 阅读 · 1 评论 -
windows 系统中cuda及cuDNN安装
因此≤12.2版本的cuda均可以安装,本文选择安装。,如下图所示,cuda可以安装的最高版本为。进行验证,在powershell里进入,输入。的,需要使用cuda的。原创 2024-05-07 22:54:39 · 339 阅读 · 0 评论 -
复杂算子onnx导出(4):执行图的构建
前面几节已经介绍如何将带有复杂算子如spconv导出onnx,接下来如何对导出的onnx进行推理。带复杂算子的模型推理,利用已有的推理引擎比如TensorRT, 是无法实现推理的。因此需要自行解析onnx进行单独推理,通过构建相对简单的执行图,即可实现推理,此时就不需要依赖任何其他的推理引擎。原创 2024-04-23 22:16:15 · 96 阅读 · 0 评论 -
复杂算子onnx导出(3): 将sparseconv导出onnx
为True的话,输入和输出节点的tensor是同一个tensor(出现tensor复用),共享同样的内存地址,此时input和output的id是一样的,前面的博客我们已经介绍过,id复用会导致构建graph出错。比如ReLU中,如果inplace为True的话,input和ouput的id 是一样的。其中 BN可以和spconv的weight、bias进行融合,融合的原理和普通的2d卷积其实是一样的,只不过spconv维度弄的有点复杂。,从而加上了enable_trace标记来保护,避免陷入死循环。原创 2024-04-23 22:08:06 · 173 阅读 · 0 评论 -
复杂算子onnx导出(2): 将graph写入到onnx
return x可以看出构建是一个带捷径分支的模型,其中一个分支只有一个conv操作,另一个分支包括conv+rulu, 然后将两个分支的输出Add操作,最后降Add得到的结果经过conv输出模型包括3种算子:all_tensors.extend([x, y]) # 避免torch对tensor进行复用return yprint(f"type。原创 2024-04-23 22:07:12 · 161 阅读 · 0 评论 -
复杂算子onnx导出(1): trace的实现
通过lidar传感器采集的点云数据,它是非常稀疏的, 在分布的空间中只占1% ~5%, 如果使用普通的3D卷积去计算,大部分都是在卷空气,因此提出了使用3D 卷积的方式,只在tensor中有值的位置进行卷积计算,大大提高了卷积的效率,同时将输入输出进行稀疏化存储。稀疏卷积存在两种模式:(1)标准的稀疏卷积(2)subm模式的稀疏卷积标准稀疏卷积:它的计算和普通的卷积计算是一样的,只不过它将输入和输出进行稀疏化存储。通过features。原创 2024-04-23 22:06:34 · 211 阅读 · 0 评论 -
使用OpenXlab下载数据集(推荐)
进入OpenXlab官方,在下载模型或者数据集前必须先注册账号,然后登入个人账号。(1) 查找要下载的数据(2) 数据详情介绍针对查找到的数据集,提供了:、、以及(3) 数据集下载支持多种下载方式,包括直接在网站上下载,CLI 以及SDK 3种下载方式, 推荐使用SDK下载比较方便。在使用下载时, 需要先获得,包括:和 ,注册的时候就会自动帮忙分配, 然后命令中,通过传入和 对应的值, 就可以进行下载了。方式1:直接下载如下图,在中, 点击右侧的按钮,即可下载对应的数据方式2:CLI命令行下载原创 2024-03-27 21:16:32 · 509 阅读 · 0 评论 -
GPU 使用率监测及可视化
表示每隔0.5秒更新一次,时间可以调整。可以看到可视化效果,比。原创 2024-03-20 20:46:13 · 573 阅读 · 0 评论 -
DETR(1):论文详解
比如说omni DETR,up DETR,pnp DETR, smac DETR,Deformable DETR,DAB DETR,Sam DETR, DN DETR,ow DETR,ov DETR等还有好多DETR。中使用的loss定义基本差不多,也包括分类loss和边界框回归loss, 但是还是存在一些差异:(1).分类损失的计算100个预测和100个GT直接的分类损失,包括了背景,而cost_matrix是没有包括背景的。会得到100个预测框,然后和GT去做最优匹配,得到预测和GT的一一对应关系。原创 2024-02-27 22:51:51 · 130 阅读 · 0 评论 -
RFAConv在yolov8上使用代码详解(助力yolov8再涨2个点)
卷积神经网络通过使用具有共享参数的卷积运算显著降低了模型的计算开销和复杂性。在LeNet、AlexNet和VGG等经典网络的驱动下,卷积神经网络现在已经建立了一个完整的系统,并在深度学习领域形成了先进的卷积神经网络模型。作者在仔细研究了卷积运算之后获得了灵感。对于分类、目标检测和语义分割任务,一方面,图像中不同位置的对象的形状、大小、颜色和分布是可变的。在卷积操作期间,卷积核在每个感受野中使用相同的参数来提取信息,而不考虑来自不同位置的差分信息。这限制了网络的性能,这已经在最近的许多工作中得到了证实。原创 2024-01-18 10:43:36 · 450 阅读 · 0 评论 -
pytorch 通用训练代码讲解(very good)
网络从0开始的训练效果会很差,因为权值太过随机,特征提取效果不明显,因此非常、非常、非常不建议大家从0开始训练!还有,如果你用了cuda,别忘了cuda的随机数种子。,在实际的项目中也经常使用到B导仓库的代码,再次对B导表示敬意,本博客主要对其中训练代码进行解读,对应为。具体来说,每次更新参数时,会对模型参数进行EMA处理,从而。此外,EMA还可以用于计算滑动平均梯度,用于优化器的更新,,用的学习率,迭代次数,batch size 都是一样?的代码,写的简介明了,对于初学者。原创 2024-01-14 23:07:16 · 419 阅读 · 0 评论 -
深度学习loss总结:nn.CrossEntropyLoss,nn.MSELoss,Focal_Loss,nn.KLDivLoss等
交叉熵主要是用来判定实际的输出与期望的输出的接近程度,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出(target),概率分布q为实际输出(pred),HpqH(p,q)HpqPytorch中的CrossEntropyLoss()函数而是交叉熵的另外一种方式计算得到的:Pytorch中函数的主要是将和NLLLoss最小化负对数似然函数)合并到一块得到的结果(1)首先对预测值pred进行softmax计算:其中softmax。原创 2023-11-19 23:19:42 · 523 阅读 · 0 评论 -
KL散度、CrossEntropy详解
在机器学习和深度学习中,在损失函数中,经常会遇到KL散度交叉熵等概念。信息量熵交叉熵相对熵(KL散度)以及交叉熵损失函数, 这几个概念可以说是递进的关系,后面的概念(KL散度、交叉熵损失等)是建立在前面(信息量、熵)等原理得到的。原创 2023-12-16 19:03:45 · 815 阅读 · 0 评论 -
EdgeYOLO: anchor-free,边缘部署友好
【代码】EdgeYOLO: anchor-free,边缘部署友好。原创 2023-12-10 19:50:25 · 268 阅读 · 0 评论 -
YOLO_embedded: YOLO算法快速嵌入式部署
本项目提供c++和python两种语言,详情请见各个文件夹下的README.md。原创 2023-12-10 19:44:10 · 612 阅读 · 0 评论 -
nn.Sequential|nn.ModuleDict|nn.ModuleList 详解
(1)nn.Sequential、nn.ModuleList、nn.ModuleDict 类都继承自 nn.Module 类。使用需要将定义的层按循序放在括号中就可以;而使用需要将定义的层放在列表[]中,这一点和list是一样的;自然和字典一样,需要一个大括号{}, 再大括号中写入key和value,其中key为层名,value为我们定义的层。原创 2023-12-10 19:39:10 · 90 阅读 · 0 评论 -
yolov6 3.0 网络详解
YOLO系列一直是工业应用中最受欢迎的检测框架,因为其在速度和精度之间的出色平衡。YOLO系列的开创性作品是YOLOv1-3,它开辟了一条单级探测器的新道路,以及后来的重大改进。YOLOv4将检测框架重组为几个单独的部分(主干、颈部和头部),并验证了当时的免费赠品包和特价包,以设计适合在单个GPU上训练的框架。目前,YOLOv5、YOLOX、 PPYOLOE、YOLOv7和最近的YOLOv8都是部署高效检测器的竞争对手。在本版本中,我们对网络设计和训练策略进行了大力更新。原创 2023-12-09 18:37:57 · 225 阅读 · 0 评论 -
pytorch 钩子函数hook 详解及实战
这4个 hook 中有是应用于 tensor 的,另外 3 个是针对nn.Module的。模型剪枝是一种通过减少神经网络中的参数来减小模型大小和计算量的技术。在实际应用中,模型剪枝可以有效地减小模型的体积,提高模型的推理速度,从而更适合在嵌入式设备上部署。在PyTorch中,可以使用钩子函数来实现模型剪枝。原创 2023-12-09 16:46:27 · 364 阅读 · 0 评论 -
Smooth L1 loss |IoU|DIoU|CIoU|EIoU|aIoU|SIoU|wise-IoU的通俗讲解
使用DIoU的话,针对预测框和真实框不相交,以及存在包含关系的情况下,DIoU loss都能更有效的进行优化,加速模型的收敛。为了优化预测框和真实框不相交的情况,并且可以量化的评估出预测框和真实框在不相交的情况下,他们两的距离到底有多远,或者预测的效果到底有多不准。针对上图对的3种情况,模型没办法针对这种情况进行区分,不能明确的知道两个框的位置关系是什么样的,从而进行快速收敛。, 由于完全重合,因此交并比IoU等于1,此时GIoU的取值为1。绿色的外框的大小都是相等的,但内部红色框的位置和大小是不相同的。原创 2023-11-04 17:32:31 · 263 阅读 · 0 评论 -
可变形卷积 Deformable Convolution
可变形卷积,在很多算法上都有应用,比如DETR中。本文首先会介绍普通卷积,主要是普通卷积的计算公式,然后会介绍可变形卷积它在普通卷积基础上做了哪些改动,思想是什么,计算过程是什么样的。原创 2023-10-23 23:20:38 · 186 阅读 · 0 评论 -
将语义分割的标注mask转为目标检测的bbox
函数到bbox的左上和右下坐标。语义分割的标签是利用。信息,主要包括: (原创 2023-10-20 15:43:37 · 1186 阅读 · 1 评论 -
最近邻插值的原理及实现
插值算法一般用来做上采样和下采样,最邻近插值算法,是插值算法中最简单的一种。最邻近插值:将每个目标像素找到距离它最近的原图像素点,然后将该像素的值直接赋值给目标像素。优点: 实现简单,计算速度快缺点:插值结果缺乏连续性,可能会产生锯齿状的边缘,对于图像质量的影响较大。因此,当处理精度要求较高的图像时,通常会采用更加精细的插值算法,如双线性插值双三次插值等。原创 2023-10-19 16:13:18 · 395 阅读 · 0 评论 -
双线性插值详解
双线性插值的原理网上资料非常多,本文重点介绍双线性插值实现的两种方式: 角对齐和 边对齐。两种不能的方式下去实现双线性插值,目标图像中的每个像素点,它是如何计算取值的,本文会通过原理结合代码的方式将实现细节讲清楚。原创 2023-10-19 14:38:59 · 354 阅读 · 0 评论 -
yolov8 (2) : 模型训练
这里执行完成后会自动验证最好的模型,即best.pt, 训练和验证通过一行命令直接完成。(使用文档说明)、examples(使用案例),其中。为了方便演示,只训练了10个epoch。(3) 修改模型配置文件中的类别数。(docker环境相关),为我们需要区分的类别。如何训练自定义数据集呢?为项目需要识别的类别数。原创 2023-10-12 15:12:17 · 163 阅读 · 0 评论 -
yolov7 详解(1):yolov7 网络结构及创新点
Yolov7超过了目前已知的所有检测器,无论是从速度还是精度上,最高的模型AP值达到56.8%,有着30FPS。Yolov7-E6检测器(56FPS、55.9%AP)超过了所有的transformer-based的检测器如SWIN-L Cascade-Mask R-CNN(9.2FPS A100,53.9AP),速度是其509%倍,精度提升2%;原创 2023-07-23 18:12:52 · 1447 阅读 · 0 评论 -
多目标跟踪技术总结
MOT英文全称叫g,中文叫多目标跟踪,从字面意思来讲就是对多个目标对象进行跟踪。具体来说就是在一段视频当中我们要得到我们比较感兴趣的物体的运动轨迹。这里的运动轨迹包括检测框以及检测对象的类别还有检测对象的编号(ID))类别:在行人的跟踪识别情况下只有一个类别就是行人,在一些多类别的场景中就会有行人、车辆ID:基本是固定的,在场景中一般是不会变化的,如果发生了变化就证明出现了错误。多目标跟踪任务里面大家用的比较多、比较实用的范式,是(先检测后跟踪),这种范式分为两步,第一步。原创 2023-07-19 22:29:19 · 369 阅读 · 0 评论 -
自动驾驶多任务框架 MultiTask V3、HybridNets和YOLOP比较
移动机器人中的感知系统,包括自动驾驶汽车和无人机,使用相机、激光雷达、雷达、IMU等传感器,GNSS等,以提供有关车辆在3D空间中位置的关键信息,并检测相关物体(如汽车、行人、骑自行车的人、红绿灯等)。图像和激光雷达数据处理涉及两项主要任务:检测,识别物体并用边界框或Mask标记,其基于每个像素在图像中的表示将标签分配给每个像素。实例分割为属于同一类的目标(例如,不同的汽车)分配不同的标签。这样可以正确识别和跟踪所有目标。通常,这两项任务都由不同类型的卷积神经网络执行。原创 2023-07-18 22:22:00 · 1202 阅读 · 0 评论 -
目标跟踪sort代码详解(python&c++)
的跟踪的案例进行讲解(也适合其他跟踪对象),高空坠物是这次目标检测算法的对象,通过一个boundingbox进行定位。通过判断当前的位置与原始目标的位置的距离,判断该物体是否下坠(这个主要针对本项目的,其他跟踪目标不需要)在整个跟踪过程中,涉及到2个关键步骤,首先是预测的步骤:对已存储的跟踪目标进行预测。可以看出,预测的过程只需要基于历史的状态量进行预测就可以了,更新的话,需要输入。实现过程,整个过程其中比较关键的环节,就是匹配的过程,对应的函数为。)上一次,计数器+1,表示已连续跟踪上的次数。原创 2023-07-09 19:33:22 · 1238 阅读 · 0 评论 -
Nvidia官方实现: 量化感知训练QAT和稀疏化Sparsity
TensorRT 的 pytorch_quantization 是一个实现的。原创 2023-06-08 09:50:03 · 905 阅读 · 0 评论 -
详解YOLOv6.2 Repvgg-style 的高效backbone:EfficientRep
在本报告中,作者介绍了本文在应用于YOLOv6的神经网络优化。本工作设计了Bep单元骨干网络和颈部网络。结合其他改进,本文实现了比其他目标检测器更好的YOLOv6-N/S/M/L模型。同时,本文提出了一种混合网络设计策略,适用于各种大小的模型,旨在实现更好的准确性和速度的权衡。此外,本文提出了一种计算和内存平衡的新型硬件神经网络设计,应用于YOLOv6框架开发中。希望以上提议能够为开发和研究人员提供启示。原创 2023-06-07 10:42:37 · 565 阅读 · 0 评论 -
使用 FairMOT 进行目标跟踪和重识别
可以说,基于深度学习的多目标跟踪(MOT)最关键的任务不是识别目标,而是在遮挡后重识别。有大量的跟踪器可供使用,但并非所有跟踪器都有良好的重新识别 pipeline。在这篇博文中,我们将重点介绍一个这样的跟踪器FairMOT,它彻底改变了跟踪中检测和重新识别任务的联合优化。原创 2023-05-13 13:40:47 · 726 阅读 · 0 评论 -
makefile 学习笔记(1)
GNU Make 官方网站:https://www.gnu.org/software/make/GNU Make 官方文档下载地址:https://www.gnu.org/software/make/manual/$@: 目标(target)的完整名称$原创 2023-05-09 13:59:36 · 372 阅读 · 0 评论 -
yolov5 损失计算详解
首先对预测结果通过view和permute进行shape的调整,并对预测的结果进行sigmoid处理通过进行正样本匹配,通过真实框与先验框的宽高比较来进行匹配,对于yolov5算法而言,为了增加正样本的数量,除了她所在的网格点,我们还会选择她邻近的2个网格点来负责我们正样本的预测对预测结果prediction进行解码获得预测框pred_boxes, 然后利用预测框pred_boxes和真实框进行giou计算正样本所对应的giou损失。利用BEC Loss计算y_true和pred_cls的分类损失。原创 2023-05-03 21:01:29 · 506 阅读 · 0 评论 -
onnx笔记2:onnx操作实例
本文以yolov5s模型,演示对yolov5s.onnx模型文件的读取,修改等操作。原创 2023-04-23 22:19:17 · 563 阅读 · 0 评论