- 博客(75)
- 资源 (5)
- 收藏
- 关注
原创 BEVFormer详解
BEVFormer 是将Transformer架构的自注意机制与BEV视图中3D检测结合起来的一种纯视觉目标检测方案。对于纯视觉的BEV检测方案,其中的重中之重就是如何将2D的图像特征映射到3D空间的BEV栅格,既然是映射关系,那就有前行投影和反向查询两种机制。前向投影是基于深度估计的方法,参考基于深度估计的BEV视图转换方法,典型代表为LSS。反向查询方法思路为先将BEV栅格在Z方向上进行lift提升,然后再映射到图像特征图上进行特征查询。BEVFormer 就是基于这种机制进行2D图像特征到3D空间的B
2025-04-02 16:12:37
684
原创 pytorch中常用语法
permute相当于可以同时操作于tensor的若干维度,transpose只能同时作用于tensor的两个维度,permute是transpose的进阶版。X = torch.stack((xs, ys, zs), -1) #-1 表示在最后一个维度上进行堆叠 ,会多出一个维度。于在张量的指定位置插入一个大小为 1 的维度(即扩展维度),具体看None 的位置。于在张量的指定位置插入一个大小为 1 的维度(即扩展维度),与None用法相同。不改变张量的数据,只是增加一个维度。的情况下为数组赋予新形状。
2025-03-28 14:07:42
369
原创 Multiscale deformable attention
deformable attention 灵感来源可变形卷积,先来看看什么是可变形卷积DCN?DCN 论文地址大概就像图中所示,传统的CNN 卷积核是固定的,假设为N = 3 x3,所以邻域9个采样点位置就是固定的。可变形卷积目的就是动态生成这9个采样位置。首先特征图经过卷积层,这个和传统CNN没区别,然后生成与特征图一样大小的位置偏移网络,channel = N * 2,表示在原有9个固定采样点上的x, y 偏移。得到偏移量后再回到原始特征图上进行插值采样,进行采样点卷积,得到当前特征点的输出值
2025-03-13 13:56:48
1093
原创 视觉Transformer (deformable DETR)
标准卷积选择周围n * n固定区域计算,可变形卷积在标准区域位置上增加偏移offset(offset 通过学习得到),这样卷积核在训练中可以有很大范围扩展。前面在介绍DETR时提到,DETR在小目标检测上不友好,而且DETR由于是在特征图上进行全局的self-attention 所以计算量很大,十分耗时间。:由于对参考点引入了offset,将参考点与偏移量相加作为边界框预测,降低优化难度。2、每个特征图上采样K个点。可以看到,每个query在每个头部中采样K个位置,只需和这些位置的特征交互。
2025-03-07 01:26:54
852
原创 视觉Transformer(DETR)
CNN backbone 输出特征图展平 : (B,L ,hidden_dim),B为batchsize, L = H*W 特征图大小,hidden_dim特征向量维度。2、将Q,K,V 送入第一个multihead attention 模块,得到第一个多头输出,shape = (B,num_queries ,hidden_dim)分类全连接:(B, N, num_queries,hidden_dim) -> (B, N, num_queries,,而且是一个可学习的。
2025-03-06 00:06:51
950
原创 自动驾驶中基于深度估计的BEV视图转换方法
是自动驾驶BEV中核心。其目的就是在BEV 3D空间中的特征如何精准的对应到2D图像的特征上。例如BEV空间中的格子对应的是一个行人,那么希望这个格子所获得的特征就是图像中的2D行人特征,而不是来自其他地方。
2025-02-27 00:36:24
409
原创 自动驾驶之BEVDet
**视图转换是BEV的核心。目的就是如何从图像空间中提取BEV空间所需要的特征。**假如某个BEV格子所对应空间有个锥桶,那么这个格子里填充的一定是用来描述这个锥桶的特征值,而不是远方天空或红绿灯的特征值
2025-02-26 23:26:13
436
原创 自动驾驶之BEV概述
(mean Average Precision)是目标检测中常用的性能指标,它对Precision-Recall(P-R)曲线进行采样,计算每个类别出平均的Precision。有的方法则是针对具体的任务,比如3D物体检测,直接生成稀疏的BEV视图下的感知结果,比如DETR3D和PETR。自动驾驶需要目标在3D空间的位置信息,传统检测为2D图像上检测目标然后IPM投影到3D。输出:BEV视图下的各种感知结果,比如物体,道路,车道线,语义栅格等。与mAP相比,NDS可以更全面的评价3D目标检测算法的优劣。
2025-02-20 00:18:13
963
原创 Transformer理解
Transformer 最早用于NLP中,它最大的特点就是,使得在处理中表现突出。我们先看一个完整的Transformer 结构框架:Nx 表示有N 个encoder,N个decoder。由多个encoder 和 decoder 堆叠而成。
2025-01-21 11:24:09
572
原创 QAT int8量化(yolov7)
QAT 量化训练是在PTQ 量化后进行微调的过程。相比PTQ 量化,QAT 量化训练多了一个微调后的训练步骤,允许QDQ中的模型scale 和 zero-point发生改变。QAT 量化训练的基本步骤为:先用 yolov7 训练出一个模型 yolov7_last.pt。1、给模型插入QDQ节点自动插入使用 quant_modules.initialize() 自动插入量化节点手动插入使用 quant_modules.initialize() 初始化量化操作或使用 QuantDescriptor()
2025-01-08 19:07:39
444
原创 PTQ int8量化(yolov7)
使用 quant_modules.initialize() 初始化量化操作或使用 QuantDescriptor() 自定义初始化量化操作。根据统计信息,计算动态范围range和scale,保存在QDQ节点中。1、给模型喂数据,收集每个层的输入输出信息。编写代码为模型插入量化节点。
2025-01-07 14:39:30
444
原创 CUDA各种内存和使用方法
例如:blockSize = 128,一个SM有2048个线程,那么一个SM能同时处理16个block。如果SM有96K的共享内存,每个block则分配96 / 16 = 6K,太大其他block无法获得使用。每个SM的共享内存数量是一定的,也就是说,如果在单个线程块中分配过度的共享内存,将会限制活跃线程束的数量;合适分配单个线程块的共享内存,使得SM的使用率最大化,起到加速的作用。特点:存储只读数据,访问速度快,广播式访问。使用:存储线程块中的共享数据,加速线程间的数据处理。使用:频繁访问的常量数据,
2024-12-26 22:18:43
1141
原创 Pytorch自定义算子反向传播
线性函数YXWTBYXWTB定义输入M 个X变量,输出N个Y变量的线性方程组。XXX为一个 1 x M 矩阵,WWW为 N x M 矩阵,BBB为 1xN 矩阵,根据公式,输出YYY为1xN 矩阵。其中 W 和 B 为算子权重参数,保存在模型中。在训练时刻,模型输入XiX_iXi, 和监督值YiY_iYi,根据 算子forward()计算的YipY_{ip}Yip,计算Loss = criterion(YiY_iYi。
2024-11-21 16:11:21
949
1
原创 pytorch自定义算子导出onnx
1、没有现成可用的算子,需要根据自己的接口重写。2、现有的算子接口不兼容,需要在原有的算子上进行封装。继承类,实现其forward()和backward()方法,就可以成为一个pytorch自定义算子。就可以在模型训练推理中完成前向推理和反向传播。forward() 函数的第一个参数必须是ctx, 后面是输出。在工程部署上,一般为了加快计算,自定义算子需要用cuda 实现forward()、backward()kernel 函数。实现其symbolic 静态方法。
2024-11-20 16:33:13
1266
3
原创 onnx自定义算子转tensorrt 推理
1、自定义算子类继承类,实现forward()和backward()方法,这样就变成一个可导函数可以在pytorch 模型网络中调用。如果只做推理可以不用实现backward。2、实现symbolic静态方法,这样在调用torch.onnx.export()时就能根据symbolic定义的规则,将自定义算子类转换成onnx 算子。说明:symbolic是符号函数,通常在其内部**返回一个g.op()**对象。
2024-11-19 12:06:54
601
原创 YoloV8-seg 模型tensort推理解析
YOLOV8 实例分割输出两个output, 一个用于实例bbox检测, 另一个用于分割,两者相结合提取实例分割目标结果。
2024-11-18 10:51:56
458
原创 tensort转模型实例(一)
1、通过 解析ONNX 文件创建网络后生成engine文件,这种方式通常是所有算子都被tensort API 支持。2、通过tensort API plugin构建网络。这种方式比较灵活,适合支持自定义算子等等。4、搭建网络:方式一,解析onnx;方式二, plugin 搭建网络。6、序列化到engine模型文件。之前可以设置动态输入之类的。2、使用builder 创建 config。1、创建builder,依赖logger。
2024-10-31 14:31:31
231
原创 ubuntu20.04 上 opencv4 源码编译安装
下载:1、opencv 4.92、opencv_contrilb 4.xsudo apt install -y cmake makesudo apt install -y build-essentialsudo apt install -y libgtk2.0-devsudo apt install -y libavcodec-devsudo apt install -y libavformat-devsudo apt install -y libjpeg-devsudo apt insta
2024-10-12 13:53:44
952
原创 从BEVPool 到 BEVPool V2
bevpool 是将图像2D 特征经过内外参转换后映射到3D 空间。在LSS 中:输入: 图像特征(NxHxWxC), 深度得分(NxDxHxW)根据内外参构建三维视锥体素索引(NxDxHxW), 根据体素索引计算得到的三维坐标进行映射。把对应深度的图像特征映射到BEV 空间中。对多个图像特征映射到同一个BEV单元的累计求和。
2024-07-17 19:26:35
1398
原创 CMakeLists.txt 中加入 cuda tensorrt opencv编译
【代码】CMakeLists.txt 中加入 cuda tensorrt opencv编译。
2024-07-10 22:45:01
445
转载 显卡对应的算力表
显卡对应算力。GeForce RTX 3070, 3080, 3090ARCH= -gencode arch=compute_86,code=[sm_86,compute_86]
2024-05-01 23:09:49
4977
原创 ubuntu 安装显卡驱动黑屏,自带屏幕和外接屏只能使用一个
例如我的是DELL, 开机F2 进入,在display 那里设置将。1、ubuntu 系统,自带的屏幕和外接显示屏幕只能使用一个。以上说明设备有冲突,与驱动无关,应该到 bios 下设置。安装显卡驱动后,nvidia-smi 驱动显示正常。则自带屏正常使用,外接屏无法识别。
2024-01-04 20:01:21
1155
原创 linux内存空间深度清理
可以看到 .cache .config .ros 占用大量空间。2、清理vscode 在.config中缓存。1、删除.cache 文件夹。
2023-11-17 19:03:58
640
原创 鱼眼图像去畸变python / c++
本文假设去畸变后的图像与原图大小一样大。由于去畸变后的图像符合针孔投影模型,因此不同的去畸变焦距得到不同的视场大小,且物体的分辨率也不同。可以见上图,当焦距缩小为一半时,相同大小的图像(横向投影距离一样长),对应的视场角不同。所以为了扩大视野,需要缩小焦距,
2023-10-25 20:28:20
1538
原创 CUDA共享内存详解
对于CUDA,一个grid 有多个Block 块,一个block块多个线程。共享内存只是Block 块内的线程共享,不同Block块之间的共享内存是不会共享的。shared。
2023-06-19 13:04:46
1493
原创 docker 常用命令
docker run -id --name my_test -v /data/project/(本地目录):/data/project(容器目录) mogohub.tencentcloudcr.com/autocar/road:jetpack_5.0.2_develop_0504 /bin/bash。docker pull 镜像名。7、启动关闭docker。
2023-05-06 20:01:24
113
原创 torch转ONNX模型转TensorRT C++推理
训练好的模型(如.pt)转成onnx形式,ONNX定义了一组与环境和平台无关的标准格式。ONNX文件不仅存储了神经网络模型的权重,还存储了模型的结构信息、网络中各层的输入输出等一些信息。ONNX的推理可以用ONNX Runtime官方库,如果在英伟达平台上,可以转TensorRT后运行。本文主要介绍转TRT格式后如何C++部署运行。
2023-04-21 12:06:48
2390
9
原创 相机坐标系的正向投影和反向投影
由于像素坐标(u, v)是畸变后的点经过内参映射得到。图像像素坐标(u,v)到世界3D坐标系(x, y, z = 0) 的映射过程。从相机坐标系的一个平面到世界坐标系的另一个平面的映射通过单应矩阵H可以得到。世界3D坐标系(x, y, z) 到图像像素坐标(u,v)的映射过程。为世界坐标系原点到相机坐标系原点的平移矩阵,为3 x 1 矩阵。射线到平面上的投影都是等效的,因此进行归一化,方便计算。假设相机坐标在世界坐标系下为(xc, yc, zc),属于世界坐标系到相机坐标系的旋转矩阵, 旋转矩阵为。
2023-02-08 23:56:25
2954
原创 深度学习网络各种激活函数 Sigmoid、Tanh、ReLU、Leaky_ReLU、SiLU、Mish
激活函数的目的就是:梯度为0, 无法反向传播,导致参数得不到更新:随着数据的变化,梯度没有明显变化:梯度越来越大,无法收敛梯度消失问题:1、反向传播链路过长,累积后逐渐减小2、数据进入梯度饱和区如何解决:1、选正确激活函数,relu, silu2、BN 归一化数据3、 resnet 较短反向传播路径4、LSTM 记忆网络。
2023-02-02 18:33:46
3631
原创 CUDA reduce 并行规约求和
例如, 1024 * 1024 大小的数据, 每一个block处理1024个数据, 一共1024 个block, 处理完后剩下1024个数据, 接着在处理, 就有加速的效果:每一个block 块作为。
2022-12-28 22:47:36
1248
1
原创 simOTA 彻底理解
simOTA 出现在YOLOX中,是作为正样本匹配,能达到自动分析一个Gt 需要匹配哪些正样本。要解决的问题就是去做预测的优化问题。步骤大致是先进行正样本的预筛选,然后通过计算预选框与gt 框的代价矩阵,
2022-10-13 23:14:49
3111
原创 yolov5简要介绍
正样本匹配:寻找负责预测真值框的先验框 (不负责的作为负样本或丢弃)正样本寻找过程:与以往的用IOU匹配不同,yolov5用如下2步骤进行正样本匹配:1、先验框尺寸匹配:目标框与先验框的宽比值、高比值的最大值 小于一定阈值,则为正匹配。
2022-10-08 18:16:55
7886
3
原创 目标框检测中准确率、召回率、AP、mAP计算原理及代码
假设有M个真值正样本,我们从Top-1 到 Top-N,每累积一个预测就会对应一个recall 和 一个 precision。,M/M),对每一个recall,从对应的precision 中取最大值作为当前recall 对应的precision,求M 个precision的平均得到AP。一般用 IOU 进行匹配,预测框和真实框之间的 IOU 值大于一定阈值时,比如0.5,则认为对真实样本正确预测。但是Accuracy 不经常使用,因为我们在做目标预测的时候往往只关心正样本,而不去关心负样本是否正确预测。
2022-09-28 00:09:28
8812
6
verilog数字钟源代码
2014-04-23
verilog数字钟,功能齐全
2014-04-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人