- 博客(497)
- 资源 (77)
- 收藏
- 关注
原创 复杂算子onnx导出(4):执行图的构建
前面几节已经介绍如何将带有复杂算子如spconv导出onnx,接下来如何对导出的onnx进行推理。带复杂算子的模型推理,利用已有的推理引擎比如TensorRT, 是无法实现推理的。因此需要自行解析onnx进行单独推理,通过构建相对简单的执行图,即可实现推理,此时就不需要依赖任何其他的推理引擎。
2024-04-23 22:16:15 29
原创 复杂算子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 63
原创 复杂算子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 69
原创 复杂算子onnx导出(1): trace的实现
通过lidar传感器采集的点云数据,它是非常稀疏的, 在分布的空间中只占1% ~5%, 如果使用普通的3D卷积去计算,大部分都是在卷空气,因此提出了使用3D 卷积的方式,只在tensor中有值的位置进行卷积计算,大大提高了卷积的效率,同时将输入输出进行稀疏化存储。稀疏卷积存在两种模式:(1)标准的稀疏卷积(2)subm模式的稀疏卷积标准稀疏卷积:它的计算和普通的卷积计算是一样的,只不过它将输入和输出进行稀疏化存储。通过features。
2024-04-23 22:06:34 88
原创 OpenLane数据及标注介绍
OpenLane是迄今为止第一个真实世界和最大规模的3D车道数据集。OpenLane包含20万帧、超过88万条实例级车道、14个车道类别(单白色虚线、双黄色实体、左/右路边等),以及场景标签和路线邻近目标(CIPO)标注。详见。OpenLane数据集是在自动驾驶领域的主流数据集上构建的。在1.0版本中,在Waymo开放数据集上发布了标注。OpenLane数据集侧重于车道检测和CIPO (OD)。我们注释了每一帧中的所有车道,如果中间没有路边,则包括相反方向的车道。除了车道检测任务,我们还注释:(a)
2024-03-27 21:52:08 113
原创 使用OpenXlab下载数据集(推荐)
进入OpenXlab官方,在下载模型或者数据集前必须先注册账号,然后登入个人账号。(1) 查找要下载的数据(2) 数据详情介绍针对查找到的数据集,提供了:、、以及(3) 数据集下载支持多种下载方式,包括直接在网站上下载,CLI 以及SDK 3种下载方式, 推荐使用SDK下载比较方便。在使用下载时, 需要先获得,包括:和 ,注册的时候就会自动帮忙分配, 然后命令中,通过传入和 对应的值, 就可以进行下载了。方式1:直接下载如下图,在中, 点击右侧的按钮,即可下载对应的数据方式2:CLI命令行下载
2024-03-27 21:16:32 196
原创 语义分割蒸馏1:基于注意力引导的特征蒸馏方法(Attn)
与现有的常用的从教师向学生提取知识的复杂方法相比,所¬提出的方法展示了一种简单而强大的方法的功效,该方法可以利用精细的特征图来转移注意力。所提出的方法已被证明在提取丰富信息方面是有效的,在作为密集预测任务的语义分割方面优于现有方法。所提出的注意力引导特征提取(AttnFD)方法采用卷积块注意力模块(CBAM),该模块通过考虑特定通道和空间信息内容来细化特征图。通过仅使用教师和学生的精细特征图之间的均方误差。
2024-03-27 21:15:07 775
原创 BevFusion (5): BevFusion模型结构和代码详解
论文中给出了Bevfusion的架构图,它的输入是多视角的相机和点云图,经过两个特定的head,分别用于做检测任务和分割任务。图1 Bevfusion 结构图Bevfusion因为有两个模态的输入:多视角相机和点云,所以对应两个分支:相机分支和点云分支。相机分支:输入6个视角的图片后,提取特征,然后经VT(View Transformer)转换之后得到相机的Bev特征。激光雷达分支:输入点云数据,经过Encoder编码得到体素化Lidar特征,然后沿z方向展平,得到Lidar Bev特征。
2024-03-23 18:33:52 177
原创 【MMDetection3D实战5】Dataset 和 model配置文件解析
在定义了如下几个全局变量: 因为是kitti数据集,所以默认为。也可以是其他数据集,比如 LyftDatasetNuScenesDataset, 也可以是自定义的数据集类型。data_root:定义数据存放的跟目录,比如: 数据的类别名,比如KITTI数据集的类型为:[‘Pedestrian’, ‘Cyclist’, ‘Car’]: 点云覆盖的有效范围,用于过滤点云数据。input_modality: 设定使用的数据对应的模态信息。对于。
2024-03-16 14:37:39 883
原创 【MMDetection3D实战4】利用mmdet3d进行训练
MMDetection3D(mmdet3d)和OpenMMlab其他代码库是一样的,在训练的时候需要准备好一个配置文件,在配置文件中定义好所使用的数据模型优化器和一系列参数,对于单GPU我们可以使用启动训练。因为mmdet3d提供了一系列标准的配置文件,通常情况下我们只需要继承这些标准配置文件,然后做一些简单的修改就可以。这些修改包括(数据路径、训练参数相关的修改注意的是,即便我们用的是标准的kitti数据集,在训练前我们还是需要利用mmdet3d提供的工具处理下数据,将零散的标注数据。
2024-03-14 22:46:37 1131
原创 【MMDetection3D实战(3)】: KITTI 数据集介绍
KITTI数据集是3D目标检测中比较基础和常用的数据集,本文以KITTI数据集为例,简单的介绍下数据的标注的格式以及3D坐标系相关知识。KITTI发布于2012年,距今也有10多年的历史了。它是针对无人驾驶任务构建的一套数据集和评价体系,其中包括2D和3D检测等一系列具体任务。1个激光雷达,一系列相机,GPS去采集位置信息等。KITTI针对检测任务一共提供了14999张图像及对应的点云,其中7481组用于训练,7518组用于测试。KITTI标注的数据只有3个类别,分别是汽车、行人、自行车。
2024-03-13 23:35:04 1078
原创 【MMDetection3D实战(2)】: 利用MMDet3D预训练模型进行推理
图像和点云不太一样,点云自己一般比较难获取,图像会比较容易获取。如果希望在自己的图像上进行推理mmdet3D也是可以实现该功能的。总体代码和之前的是一样的,唯一的区别我们需要自己提供一个标注文件, 文件中主要是提供相机的内参。(1) 准备预训练权重模型文件之前已经下载好了,这边就不介绍了(2) 准备数据和标注文件图片image:网上找的街机游戏的图片标注文件ana:网上找的街机游戏的图片这个比较麻烦的是,我们需要获得该场景的相机参数,通常该参数我们是没有的。不过我们自己简单写一个。, 其中焦距。
2024-03-13 23:33:33 1126
原创 【MMDetection3D实战(1)】:环境安装
MMDetection3D首次发布于2018年10月,是面向3D 场景中检测和分割的工具包,可以基于MMDetection3D实现基于点云、图像和多模态数据的3D检测与分割。目前MMDetection3D支持20多种不同的算法,比如基于点云的SECOND和,基于单目图像的SMOKE和FCOS3D,以及基于多模态的MVXNet和ImVoteNet等等。每个算法都提供了多个SOTA的预训练模型,可以直接使用这些预训练模型实现推理。
2024-03-13 23:31:41 427
原创 【单目3D检测】:SMOKE论文
相同的 DLA-34 backbone来提取特征,唯一的改变就是将BN替换为GN(group norm),因为GN对batch size不那么敏感, 且对于训练噪声更加鲁棒,因此 SMOKE 将所有的 BN 操作全部换为 GN 操作, 图像经过Backbone输出特征尺寸为。与centernet不同的是这里预测3d box中心点投影到2d图像上的点,而不是2d box的中心点,因为论文中直接抛弃了2d检测分支,而3d box中心点在2d图像上的投影点,可通过相机内参。为3D中心点投影到图像上的点。
2024-03-12 22:55:00 956
原创 leetcode刷题(3):双指针和哈希表的使用
题目:给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例。
2024-03-10 15:56:07 1044
原创 leetcode刷题(2):链表
数组中1-len-1的元素,对应原来0-(len-2)元素,相当于对原来0~len-2元素向右平移1次。:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。: 返回一个新链表,存储两个逆序的链表之和,返回的新链表也是逆序排列。给你一个链表的头节点 head ,旋转链表,将链表每个节点向右。:将两个升序链表合并为一个新的 升序 链表并返回。的方式存储的,并且每个节点只能存储 一位 数字。的节点,只留下不同的数字。
2024-03-08 13:09:34 887
原创 模型压缩-剪枝算法概述
学术界的 SOTA 模型在落地部署到工业界应用到过程中,通常是要面临着低延迟(Latency)、高吞吐高效率(Efficiency)挑战的。而模型压缩算法可以将一个庞大而复杂的预训练模型转化为一个精简的小模型,从而减少对硬件的存储、带宽和计算需求,以达到加速模型推理和落地的目的。近年来主流的模型压缩方法包括:数值量化(Data Quantization,也叫模型量化),模型稀疏化(Model sparsification,也叫模型剪枝知识蒸馏轻量化网络设计。
2024-03-08 09:15:39 96
原创 BevFusion (4): BevFusion 环境搭建
论文:Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation代码: https://github.com/mit-han-lab/bevfusion或者直接下载. zip 项目代码创建版本的虚拟环境,后续在该虚拟环境中配置Bevfusion的环境(1) 安装torch1.8.1+cu111(2) 安装torchvison0.9.1 + cu1111.3 安装 mmdet3d 相关环境参考博客: ope
2024-02-28 20:52:34 1011 1
原创 BevFusion (3): BevFusion论文详解
我们提出了BEVFusion,一个高效和通用的框架,用于多任务多传感器3D感知。BEVFusion将摄像头和激光雷达特征统一在一个共享的BEV表示空间中,充分保留了两者几何和语义信息。为了实现这一目标,我们将的 camera-to-BEV的转换的速度加快了40倍以上。BEVFusion打破了长期以来的点级融合是多传感器感知系统的黄金选择的惯例。BEVFusion达到了最先进的水平在3D检测和BEV地图分割任务上的性能,计算量减少1.5-1.9倍,现有解决方案相比,速度提高了1.3-1.6倍。
2024-02-27 22:58:18 1005
原创 BevFusion (2): nuScenes 数据介绍及点云可视化
nuScenes 数据集 (pronounced /nu:ːsiː:nz/) 是由 Motional (以前称为 nuTonomy) 团队开发的自动驾驶公共大型数据集。nuScenes 数据集的灵感来自于开创性的 KITTI 数据集。nuScenes 是第一个提供自动驾驶车辆整个传感器套件(6 个摄像头、1 个 LIDAR、5 个 RADAR、GPS、IMU) 数据的大型数据集。与 KITTI 相比,nuScenes 包含的对象注释多了 7 倍。
2024-02-27 22:54:47 1615
原创 BevFusion (1): 传感器介绍
激光雷达,也称光学雷达(LIght Detection And Ranging)是激光探测与测距系统的简称,它通过测定传感器发射器与目标物体之间的传播距离,分析目标物体表面的反射能量大小、反射波谱的幅度、频率和相位等信息,从而呈现出目标物精确的三维结构信息。激光雷达是自动驾驶车辆的关键传感器,如下图所示,车辆上方旋转的圆柱体对应就是激光雷达传感器。
2024-02-27 22:52:37 873
原创 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 56
原创 LSS 论文及代码详解:Lift, Splat, Shoot:
1、LSS的方法提供了一个很好的融合到BEV视角下的方法。基于此方法,无论是动态目标检测,还是静态的道路结构认知,甚至是红绿灯检测,前车转向灯检测等等信息,都可以使用此方法提取到BEV特征下进行输出,极大地提高了自动驾驶感知框架的集成度。2、虽然LSS提出的初衷是为了融合多视角相机的特征,为“纯视觉”模型而服务。但是在实际应用中,此套方法完全兼容其他传感器的特征融合。如果你想融合超声波雷达特征也不是不可以试试。1、极度依赖Depth信息的准确性,且必须显示地提供Depth 特征。
2024-02-27 17:40:55 1258
原创 语义分割(5): 保存验证结果信息
else:训练开始时,实例化EvalCallback对象,传入模型,以及输入shape,以及验证集所有图片val_lines, 以及验证指标信息存放的路径log_dir等通过实例化EvalCallback类,在每个Epoch验证结束时,调用计算每个Epoch下的mIoU指标,并将结果保存到txt文件中,同时绘制出每个Epoch下的mIoU指标变化,方便观察模型训练效果。
2024-02-20 23:18:07 373
原创 C++面试高频问题汇总( 一)
将属性和行为作为一个整体,表现生活中的事物。将属性和行为加以权限控制在设计类的时候,属性和行为写在一起,表现事物。类在设计时,可以把属性和行为放在不同的权限下,加以控制。访问权限有三种:public 公共权限;protected 保护权限;private 私有权限多态分为两类静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名动态多态: 派生类和虚函数实现运行时多态静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确定函数地址。
2024-02-20 23:15:52 921
原创 PIL Image 使用详解
需注意:Pillow加载图像后的尺寸是二维,图形化是三维,但无法打印三维尺寸。uint8的ndarray数据,通道顺序[h, w, c],颜色通道BGR。导入模块:import cv2:uint8的ndarray数据,通道顺序[h, w, c],颜色通道RGB。导入模块:import matplotlib.pyplot as plt:uint8的ndarray数据,通道顺序[h, w, c],颜色通道RGB。导入模块:import PIL。
2024-02-07 15:33:01 1231
原创 知识蒸馏综述及代码
全称:Distilling the Knowledge in a Neural Network发表:NIPS14最经典的,也是明确提出知识蒸馏概念的工作,通过使用带温度的softmax函数来软化教师网络的逻辑层输出作为学生网络的监督信息,使用来衡量学生网络与教师网络的差异,具体流程如下图所示(来自Knowledge Distillation A Survey)对学生网络来说,一部分监督信息来自hard label标签,另一部分来自教师网络提供的soft label。
2024-02-07 10:16:38 146
原创 pytorch 利用Tensorboar记录训练过程loss变化
import ostry:except:passtry:num = 5else:num = 15except:passplt.cla()(1) 首先利用类的构造函数__init__, 实例化的对象self.writer,并将网络结构图添加到self.writer中。其中__init__方法接收的参数包括,保存log的路径log_dir以及模型model和输入的shapetry:except:pass(2) 记录每个epoch的训练损失loss以及验证val_loss。
2024-02-02 23:43:54 1149
原创 python tqdm进度条详解
是 Python 进度条库,可以在 Python 长循环中添加一个。(optional);,用于定义进度条的具体格式,所包含的具体数据信息;基于新的bar_format格式,重新封装了。,是一个快速、扩展性强的进度条工具库。下面主要介绍这个参数的具体用法;如果没有传入可迭代对象,可以使用。传参,在实际中应用的更加普遍。进行了设置,没有使用原有的。格式, 简化了显示内容。用户只需要封装任意的。iterable为空。的参数,并且全部都是。前缀信息(desc)代码中将tqdm中的。指定迭代总数,并配合。
2024-02-02 22:20:49 1237
原创 语义分割(3):损失函数解析
容易学习的样本模型可以很轻松地将其预测正确,模型只要将大量容易学习的样本分类正确,loss就可以减小很多,从而导致模型不怎么顾及难学习的样本,交叉熵损失函数忽略了预测值和目标值之间的相似性,并且对于极端的像素值不够敏感。,这种损失会逐个检查每个像素,将对每个像素类别的预测结果(概率分布向量)与我们的。,对于语义分割更多的是前景区域的样本远小于背景区域。其中(1),(2)实现的是log_softmax计算,(3)实现的是。, 经过以上3步计算,得到最终的交叉熵损失的计算结果。损失函数是像素级别的。
2024-01-27 15:57:19 1221
原创 语义分割(2) :自定义Dataset和Dataloader
自定义Dataset需要继承Dataset需要实现__len__和方法,其中__len__返回样本的总数量,方法,根据传入的index,返回对应的图片和标签图片mask主要对图片和标签进行数据增强Dataset的完整代码实现如下:import cv2# 从文件中读取图像# 数据增强# 转化成one_hot的形式# 在这里需要+1是因为voc数据集有些标签具有白边部分# 我们需要将白边部分进行忽略,+1的目的是方便忽略。# 获得图像的高宽与目标高宽# 对图像进行缩放并且进行长和宽的扭曲。
2024-01-26 22:40:19 1052
原创 python高级(1): 迭代器详解
在Python中从头开始构建迭代器很容易。我们只需要实现这些方法__iter__()和__next__()。__iter__()方法需要返回迭代器对象, 最简单直接返回self,也可以返回新的可迭代对象。如果需要,可以执行一些初始化。__next__()方法必须返回序列中的下一项。在到达终点时,以及在随后的调用中,它必须引发这里,我们展示了一个示例,通过定义一个迭代器,手动实现python的range# 1. 每执行一次next,需要返回一个值。
2024-01-21 16:55:14 857
原创 日志记录logging
比如在general.py中定义logger对象LOGGERimport osimport sys= "utf-8":try:import ioelse:")首先通过设置日志级别(在主进程中使用info级别,其他进程error级别),通过将信息打印到控制台,并绑定输出的信息样式Formatter,然后将handler绑定到logger对象上定义的LOGGER 可以全局使用,包括等等中使用,使用时候从general中导入LOGGER即可。
2024-01-20 18:29:25 907
原创 hasattr、getattr、setattr
在Python中,hasattr()getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询。这些函数提供了一种方便的方式来检查对象是否具有特定属性,获取属性的值,以及设置属性的值。
2024-01-20 15:40:18 371
原创 语义分割(1): 前后处理代码详解
所以预测结果部分,四周的padding部分就需要截取掉, 上下左右padding的大小为: padding 大小 =获得每个像素的类别预测概率最大的索引,也就是获得对应类别的索引。,计算得到每个像素的颜色值array, 大小为。遍历所有类别,为各个类别位置,赋予对应的像素值。: 模型输入指定的图片大小, 其中通过。,经过letterbox后获得指定。, 得到分割后的3通道的图片。对原始备份,用于可视化绘图。, reshape为。
2024-01-19 15:31:56 1000
MIOU涨5.6个点:语义分割知识蒸馏源码
2024-03-20
yolov8 剪枝源码(集成多种剪枝策略)
2024-03-20
yolov8 多任务(目标检测+可行驶区域分割+车道线分割)
2024-01-07
SOTA 跟踪论文:BoTSORT-OCSORT-StrongSORT 等
2023-12-21
yolov8 tracking支持deepocsort、strongsort、bytetrack、botsort等各类跟踪器
2023-12-21
yolov8 知识蒸馏源码
2023-12-18
YOLO 知识蒸馏学习及落地部署(v5和v8)
2023-12-10
yolov8 PTQ和QAT量化源码
2023-12-09
零基础掌握yolov8剪枝
2023-11-26
车道线UFLD-v2落地量化部署代码
2023-11-26
mmsegmentation中文文档
2023-11-26
yolov7 ptq和qat训练及tensorrt部署
2023-09-16
yolov7旋转目标检测完整代码
2023-05-13
yolov8s模型进行剪枝源码
2023-05-13
基于Tensorrt的yolov5 实例分割源码
2023-04-18
各种卷积计算性能对比(Conv,DwConv,GhostConv,PConv,DSConv,DCNV)
2023-03-26
基于yolov5的PTQ和QAT量化完整代码
2023-03-18
图像分割FCN算法的源码及项目实战
2023-02-04
YOLOX原理及无人机检测项目实战源码
2022-11-04
模型轻量化-YOLOv5无损剪枝
2022-10-28
基于yolov5的目标检测和双目测距源码
2022-10-28
pytorch多GPU并行训练教程及源码
2022-10-16
基于yolov5的知识蒸馏实战源码
2022-10-13
makefile从入门到项目编译实战
2022-10-13
图像分类MobileNet系列源代码:v1-v3
2022-07-05
深度学习图像分类花朵数据集
2022-07-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人