自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 大模型低秩适配器LoRA源码解读

以上两篇博客写的非常好,强烈建议仔细阅读,本篇博客是对上面第二篇博客中的 LoRA 微软官方源码的进一步解读。包含对源码框架的解读,对源码中训练过程和推理过程的分析,以及对源码一句一句的汉语注释。

2024-05-22 15:26:43 337

原创 【python】中的可迭代对象、迭代器、生成器

在类中只要实现了 __getitem__(),则会自动生成 __iter__() 方法,所以凡是实现了__getitem__()方法的类也都称之为。凡是包含 yield 的函数都会自动生成一个包含 __iter__() 方法和 __next__() 方法的类,这个类称之为。,凡是实现了 __iter__() 方法和 __next__() 方法的类都称之为。凡是实现了__iter__() 方法的类都称之为。凡是实现了__iter__() 方法的类都称之为。

2024-05-13 21:34:20 253 1

原创 对 Transformer 中位置编码 Position Encoding 的理解

位置编码 | PositionEncoding | Sinusoidal 位置编码 | RoPE 位置编码 | ALiBi 位置编码

2024-03-26 22:12:25 987

原创 深度学习常用代码总结(k-means, NMS)

因为图像中的目标是多种多样的形状、大小和长宽比,目标检测算法中为了更好的保障目标的召回率,通常会使用 SelectiveSearch、RPN (例如:Faster-RCNN)、Anchor (例如:YOLO) 等方式生成长宽不同、数量较多的候选边界框 (BBOX)。step5:将IOU与NMS预设阈值Thre进行比较,若某bbox与bbox1的IOU大于Thre,即视为bbox1的“邻域”,则在该类别边界框列表中移除该bbox,即去除冗余边界框;step8:输出列表即为想要输出的检测框,NMS流程结束。

2024-01-16 23:26:10 1492

原创 图片双线性插值原理解析与代码 Python

图片插值是图片操作中最常用的操作之一。为了详细解析其原理,本文以 3×3 图片插值到 5×5 图片为例进行解析。

2024-01-11 23:05:27 1451

原创 leetcode滑动窗口问题总结 Python

滑动窗口是一类比较重要的解题思路,一般来说我们面对的都是非定长窗口,所以一般需要定义两个指针 left 和 right,分别用来限制窗口的左边界和右边界。在解题时一般需要设定两个嵌套的循环,外循环不设定条件,完全是遍历模式,驱动右指针的移动;内循环需要设定条件,在满足条件的情况下,驱动左指针的移动。整体实现滑动窗口的向右移动。外循环虽然没有设定条件,但其实存在隐藏的条件就是不满足内循环所设定的条件时运行。在这个框架下,我们可以增加对窗口长度和数据的记录,进而实现丰富的功能。

2024-01-09 15:15:24 1110

原创 leetcode动态规划问题总结 Python

如果第 i-1 数字为 1,那 dp[i] == dp[i-1] + dp[i-2];本题采用二维 dp 作为中间存储数据结构,dp[i,j] 表示 s[i] 到 s[j] 是否为回文字符串,主对角线表示每个单独的字符均为长度 1 的回文字符,如果首尾两个元素相等,中间部分也是回文字符串,那当前字符串也为回文字符串,所以递推公式为 dp[i,j] = dp[i+1,j-1] and s[i]==s[j],从递推公式可以得到遍历输出是 i 从大到小 j 从小到大,至此可以获取任意字符串是否为回文字符串。

2024-01-07 18:52:37 1114

原创 leetcode双指针问题总结 Python

这两个思路都需要解决同一个问题即怎么判断两个 node 是同一个 node,leetcode 原生代码是推荐使用 == 运算法直接判断,但是这样判断只能说明两个 node 的值相等,不能保证是同一个 node,所以还是推荐使用 id() 函数比较 node 的地址。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。给你一个字符串 s,最多可以从中删除一个字符。输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3。

2024-01-04 10:31:57 1016

原创 leetcode深度优先搜索和广度优先搜索总结 Python

访问完右分支后,退回到最初根节点的上一级节点,再访问右分支。迭代法的思路其实是以层作为粒度,弹出一层的所有节点,然后放进去下面一层的所有节点,这里需要在注意的是在 que 中我们是无法区分两个节点是否来自于同一层的,所以在编程时,需要实现获取一层的长度。递归法就是函数在函数实现中调用函数本身,但函数实现中还需要增加调用终止条件,在函数实现中可以先假定函数已经实现,所以在考虑一个根节点和两个子节点时,可以直接调用函数本身实现两个子节点的遍历,函数实现中仅仅考虑根节点的遍历和终止条件即可,编程思路一目了然。

2024-01-03 16:40:06 1147

原创 leetcode回溯问题总结 Python

每次分割都可以看做一个选择,所以本问题依然是不定数量的选择问题,所以本问题用回溯来实现分割,但与之前回溯不一样的是,本问题在调用回溯函数时,需要完成两个数值的选择,之前的应用都是仅仅完成一个数值的选择(其实本质上没有区别)。该问题看起来与有重复元素的子集问题极为相似,都是遍历的每个路径都需要保存,都是包含重复元素,都是需要去除重复子集,但是实际解法有些不同,原因是该问题不能首先排序,因为排序会打乱原有的顺序,而本问题需要提取非递减序列。回溯算法是在递归思想的基础上制定的算法框架,用于解决一类问题。

2024-01-02 16:17:30 986

原创 CAN/CANFD总线简述

​CAN总线是由德国博世公司在20世纪80年代专门为汽车行业开发的一种广播机制的串行通信总线。速率最高可达1Mbps,当信号传输距离达到10km时,CAN仍可提供高达50Kbps的数据传输速率。在没有CAN总线之前,不同车载ECU之间通过直连的方式进行通信,这会造成线束过多,连接点过多,可靠性不足的问题。

2023-11-19 16:59:50 321

原创 Github常用命令记录

Github 常用命令记录

2023-11-12 20:23:08 112 1

原创 markdown 教程与 Jupyter 教程

Jupyter notebook 源于 Fernando Perez 发起的 IPython 项目。IPython 是一种交互式 shell,与普通的 Python shell 相似,但具有一些更高级的功能,例如语法高亮显示和代码补全,还有一些 magic 操作,十分方便。Jupyter notebook 将 IPython 做成了一种 Web 应用,我们可以通过它的基本架构更清楚的了解。

2023-09-22 15:29:45 607

原创 bevfomer/maptr模型中时序对齐模块的改进

当前在自动驾驶感知领域,最流行的算法就是基于bev原理的检测算法,其中基于bev目标检测的典型算法是bevformer,基于bev建图的典型算法是maptr。为了提升模型性能,两者均使用了完全相同的bev时序对齐模块以实现bev时序检测。其bev时序对齐模块的原理比较难懂,本文主要对bev时序对齐模块的原理进行解释,并基于发现的问题做出了改进,同时附上了具体实现代码。

2023-05-26 17:13:01 2095 8

原创 无人驾驶中常用坐标系及相互转换的数学原理介绍

在无人驾驶中存在多种传感器,例如相机camera,激光雷达lidar,毫米波雷达radar等。在每个传感器中都有自己的坐标系,所以在无人驾驶中存在诸多的坐标系转换问题。本文将会基于nusenes数据集介绍一下世界坐标系,自车坐标系,相机坐标系,像素坐标系,激光雷达坐标系,毫米波雷达坐标系,IMU坐标系,以及最近在无人驾驶领域最流行的bev检测方案中的bev坐标系和bev像素坐标系,之后会说明一下nusenes数据集与argoverse数据集的区别,最后会介绍相机内外参和不同坐标系之间的转换。

2023-05-26 09:45:59 4974 4

原创 torch中affine函数与grid_sample函数的注解

在深度学习算法开发中,尤其是在图片时序对齐部分中,经常会对原始图片进行旋转和平移,然后重新采样,在这个过程中,最常用的函数就是affine和grid_sample。affine函数是先旋转再平移,旋转部分是支持二维线性差值的,但是平移部分平移数值只能是整数,这会造成一定的取整误差,但是其使用方便,只需提供旋转和平移数值即可。grid_sample函数只是一个采样函数,支持二维线性差值,为了完成采样,需要自己基于旋转矩阵和平移矩阵,计算出采样位置,所以使用比较麻烦。

2023-05-23 18:44:48 778

原创 【python】关于import相关知识总结

为了理解mmcv中的模块导入过程,首先需要理解python中的相对路径/绝对路径,以及__init__.py文件在import中的作用,然后再学习mmcv关于Register类和build的相关知识。

2023-05-19 23:25:47 3718 1

转载 [转载]卡尔曼滤波(kalman filter)和均值滤波有什么关系?

​看了一篇文章《傻瓜也能懂的卡尔曼滤波器(翻译自外网博客)》,发现评论里很多人说看不懂,决定写一篇真傻瓜也能懂的卡尔曼滤波。文章先从简单的平均值开始,问题从简单到复杂,最后引入卡尔曼滤波。...

2022-07-31 21:22:40 451

原创 CenterNet目标检测模型及CenterFusion融合目标检测模型

CenterNet是一种基于free-anchor的目标检测模型,其继承自CornerNet目标检测模型,可以很容易迁移到例如3D目标检测和人体关键点检测等任务。CenterFusion是一种通过融合毫米波雷达数据和可见光相机数据进行3D目标检测模型,该模型属于中端融合模型..........................................

2022-07-12 23:57:53 4114 1

原创 DLA模型(分类模型+改进版分割模型) + 可变形卷积

Deep Layer Aggregation (DLA) 是一种网络特征融合方法,发表于CVPR 2018。相比传统串联的卷积网络,其典型特点是实现了不同层级的深度融合,相比目标检测中的FPN和PAN结构,相比Desnet的密集连接,其连接方式更复杂更综合。论文中包含两个网络,一个是DLA的特征提取模型,可用作分类模型和检测模型的backbone,第二个网络是在DLA的基础上加入一个decoder模块,组成一个分割模型,相当于把DLA看做encoder。...........................

2022-06-25 23:00:32 7483 1

原创 轻量级实时语义分割:ENet & ERFNet

ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation 发表在CVPR2016。ERFNet: Efficient Residual Factorized ConvNet for Real-Time Semantic Segmentation 发表在2018年1月的IEEE Transactions on Intelligent Transportation Systems。两者任务均为轻量级实时性语义分割。.

2022-06-07 18:51:34 2106

原创 ConvNeXt的网络结构和实现代码总结(torch)

ConvNext是在ResNet50模型的基础上,仿照Swin Transformer的结构进行改进而得到的纯卷积模型,当然原生模型是一个分类模型,但是其可以作为backbone被应用到任何其它模型中。ConvNext模型可以被称之为2022年cv算法工程师抄作业必备手册,手把手教你改模型,把ResNet50从76.1一步步干到82.0。

2022-04-17 22:45:24 7400 5

原创 densenet的网络结构和实现代码总结(torch)

​densenet网络是CVPR 2017 (Best Paper Award),这篇论文是在Stochastic Depth的启发下提出的。densenet和Stochastic Depth都是清华的黄高博士提出的。DenseNet(密集卷积网络)的核心思想是密集连接,即某层的输入除了包含前一层的输出外还包含前面所有层的输出。

2022-04-17 22:44:15 8021 1

原创 深度学习模型计算量评价指标FLOPs, MACs, MAdds关系

在评价深度学习模型的大小和计算量时,经常使用的参数有:parameters, FLOPs, MACs, MAdds。除此以外,我们还经常见到FLOPS, GFLOPS, TFLOPS,这三个参数其实并非用来评价模型的计算量,而是用来评价计算机硬件的计算能力。

2022-03-28 20:58:30 14809 1

原创 shufflenet v1/v2的网络结构和实现代码总结(torch)

# 根据torch官方代码修改的shufflenetv2的网络模型 https://github.com/pytorch/vision/blob/main/torchvision/models/shufflenetv2.py# 权重文件下载 download url: https://download.pytorch.org/models/shufflenetv2_x0.5-f707e7126e.pth# 权重文件下载 download url: https://download.pytorch....

2022-03-09 20:35:51 6801 3

原创 torch的pth模型转换为onnx模型并对比测试

import torchimport torch.onnxfrom PIL import Imageimport torchvision.transforms as transformsimport onnxruntime as rtimport numpy as np################################################################################################################.

2022-02-22 20:17:36 2292 6

原创 通过python全量备份或增量备份文件夹中所有文件

基于《python实现对文件的全量、增量备份 - goodTOgreat - 博客园》代码修改而成的新代码,新代码能够实现基于python全量备份或增量备份文件夹中所有文件。# 用于实现对某些要求文件夹的全量备份和增量备份import osimport shutilimport timeimport hashlibimport pickle as p# 将文件转换为md5文件def md5check(fname): m = hashlib.md5() with ope

2022-02-09 23:44:18 1595

原创 ghost的网络结构和实现代码总结(torch)

ghost的网络结构和实现代码总结(torch)

2022-01-26 19:01:40 5411

原创 Torch的编程方式示例以及必备知识

Torch的编程方式示例以及必备知识

2022-01-12 16:00:47 1813 1

原创 mobilenet v1 v2 v3的网络结构和实现代码总结(tf2.x+torch)

本文总结了mobilenet v1 v2 v3的网络结构特点,并通过tensorflow2.x以tf.keras的方式实现了mobilenet v2 v3。其中,mobilenet v3代码包含large和small两个模型,所以本文包含3个模型的代码实现,所有模型都包含通道缩放因子,可以搭建更小的模型。其实tensorflow官方已经实现了v1 v2 v3的代码,可以直接调用,但是自己手动实现一遍可以加深对网络结构的理解,以及进行自定义网络结构修改。

2022-01-03 14:31:50 2566 2

原创 mAP的计算原理、与其它评价指标的对比和实现代码

mAP的计算原理mAP的具体计算原理可以参看【1】,这里针对第三部分的代码实现进行了过程解释,也即从代码层面解释了如何计算mAP。计算mAP的过程:总过程:首先确定iou阈值,然后计算每一类的ap数值,最后计算所有类ap的均值,可得到在该iou阈值下的mAP,某类的ap值反映的是该类平衡精确率和召回率的能力。大过程,计算ap的过程:首先得到某类的PR曲线,然后计算PR曲线下的面积就是ap值,关于ap值的计算分voc07和voc10两种办法,总面积受到最大recall的影响,最大recall肯

2022-01-02 16:48:39 382

原创 tensorflow2.x的模型输入从NHWC格式转换为NCHW格式

tensorflow2.x的模型输入默认格式是NHWC格式,但是某些应用场景下需要在模型中将NHWC输入格式转换为输入NCHW格式,操作代码如下import tensorflow as tfmodel_path = "./xxx.h5"output_path = "./yyy.h5"model.load_model(model_path)new_model = tf.keras.models.Sequential([Input((3, 128, 128)), tf.keras.layers

2022-01-01 19:30:29 1399 3

原创 tensorflow2.x针对h5模型的自定义评测(acc,召回率,精确率,混淆矩阵和混淆矩阵绘图代码)以及常用的四种图片读取方式

import tensorflow as tfimport numpy as npfrom tqdm import tqdmimport os# 读取数据IMG_SIZE = (128, 128)BATCH_SIZE = 128test_dir = "./train"# test_dir = "./test"# 得到dir路径下所有文件的具体路径以及标签,file_paths_list, labels_list都是list分别对应着每个文件的具体路径和标签编号,class_names.

2022-01-01 19:09:41 235

原创 计算图片数据集的整体均值、方差和直方图

在深度学习中经常需要分析图片数据集的均值和方差以及直方图,如下代码实现了该功能,可以计算整体图片数据集的每个通道的所有像素的整体均值和方差,计算时又分包含0像素和不包含0像素,所以输出是6个均值和6个方差,之所以这样划分,原因是在深度学习中需要将所有图片缩放至同等的宽高,这时一般选用等比例拉伸,那必然带来大量的padding像素,而这些padding像素,我们一般赋予0值,所以0像素值是最大量的,远远高于第二。该代码还能输出每个通道的直方图,当然只能输出3个直方图,对应RGB,每个通道的直方图是整个数据集累

2022-01-01 17:11:39 2964

原创 tensorflow2.x中的h5转换为onnx以及onnx的x86端测评

在日常使用中经常需要做模型转换,那tensorflow2.x的h5模型转onnx是必要的知识,如下代码实现了该转换,可以设置输入张量的形状,也可以选择opset。# 读取h5模型转换为onnx模型,教程来自于https://github.com/onnx/tensorflow-onnx/blob/master/tutorials/keras-resnet50.ipynbimport tensorflow as tfimport numpy as npimport cv2import tf2on

2022-01-01 16:40:54 6493 2

原创 tensorflow2.x中的量化感知训练以及tflite的x86端测评

tensorflow 2.x的模型训练结束后一般保存为.h5或save_model的模型格式(只能是fp32格式),如果模型想要部署在移动端,一般需要将模型转换为.tflite格式,这里又分为动态格式、fp32格式、fp16格式和int8格式的tflite【1】。一般而言,如果直接将fp32的h5转换为int8格式的tflite会存在精度下降,为了尽量减少转换过程中的精度下降,可选的方式是在转换前对模型进行量化感知训练。具体办法是在权重保持fp32的情况下,按照int8量化的需求进行训练,之后再正式进行in

2022-01-01 16:29:34 2129 6

原创 tensorflow2.x主要的两种编程方式

tensorflow从1.x变到2.x的过程中,编程方式发生了很大的改变,且从tensorflow2.x开始官方推荐tf.keras的编程方式,这样的变化让很多初学者非常困惑,从网上随便搜索一下,可以搜索到各种版本的tensorflow编程方式,且1.x的教程偏多,让初学者不知该选择哪种版本。这里总结了我认为比较受欢迎的两种编程方式,分别是基于tf.keras的编程方式和基于tensorflow2.x原生的编程方式,可以用于验证tensorflow是否安装成功。基于tf.keras的编程方式基于tf

2021-12-30 15:30:03 330

原创 tensorflow2.0和torch的数据读取方式总结

1. tensorflow2.0的数据读取方式1.1 直接读取图片数据tf2.0读取数据的方式有很多种【0】,当想要直接读取数据时,推荐采用tf.data.dataset的方式。该方式可以并行读取数据,也可以在训练网络的同时读取数据,可以充分发挥GPU和多核CPU的实力。根据个人的理解,我认为tf.data.Dataset对象在读取图片时,并非一次性把所有数据都读入内存中,而是在使用时才读取数据,这里牵扯三个存储位置第一个位置是硬盘中的数据,第二个是shuffle()设置的内存中的一块区域,

2021-12-30 15:21:37 127

原创 模型量化、感知训练以及混合精度训练的理论理解和总结

1. 深度学习模型从模型定义到模型部署2. 什么是模型量化3. 什么是"后量化"4. 什么是感知量化5. 什么是混合精度训练参考

2021-12-21 20:45:58 500

原创 BN(Batch Normalization) 的理论理解以及在tf.keras中的实际应用和总结

1. BN层的概念,其与LN、IN、GN的异同BN层于2015年由谷歌提出,可以有效的提升网络训练效率。BN层可以加快收敛速度,可以缓解梯度消失,具有一定的正则化作用。BN层本质上使损失函数变得平滑,所以收敛速度变快且不易落入局部最优值【1】【2】。BN层针对全链接网络结构是计算前面输出层在一个batch内每一个节点的均值和方差,然后针对每一个节点分别减去对应均值和除以对应方差,然后针对每一个节点再进行一次线性变换(即先乘以一个参数再加上一个参数),所以每一个节点具有4个参数;针对CNN网络结构,为了缩

2021-12-19 23:55:45 2200

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除