自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 cider指标

需要了解一下IDF的计算原理,来了解下为什么只有一个sample的时候cider的值是0,以及所有的sample都一样的时候,cider值也是0;cider的总体思想就是如果candidates和reference中的词的重要性相似,表示candidates和reference的意思相似;总体思路就是candidates和reference的词的TF-IDF计算相似度,再除以各自句子的TF-IDF的模长;因为TF-IDF中的IDF是以整个评测中的文档为基准,如何该词在每个文档中都出现了,其重要性就是0;

2025-05-22 17:05:25 331

原创 reshape/view/permute的原理

在pytorch中,Tensor的存储是行主序的,也就是意味着最后一个维度的元素的存储时连续的,reshape和view并不改变元素存储的内存,仅仅改变访问的间隔,下面举例说明;比如一个23的Tensor在内存中的存储是连续的:[1,2,3,4,5,6]实际访问的过程中,1,2,3属于第一行,4,5,6属于第二行,对于第一个维度2,访问的间隔是3,对于第二个维度3,访问的间隔是1;如果reshape成32的Tensor,对于第一个维度3,访问的间隔是2,对于第二个维度2,访问的间隔是1;。

2025-05-19 15:12:28 287

原创 ROPE位置编码

绝对位置编码指的是为每个位置学习一个编码的向量,它的最大问题是不可以扩展,比如训练的时候学到的最大的序列长度的编码是N,那么在推理的时候N+1的位置没有学习过,位置编码不了所以无法推理,比如说bert最大的编码长度是256;相对位置编码实际上学习的是一个关于相对位置差的embed的函数f(m-n),所以是可以扩展的;ROPE就是一种相对位置编码;传统的纯文本的ROPE是1D 的ROPE,qwen2VL中因为有图像的存在,把vit那部分改为了2D rope;具体推导公式不看了;

2025-05-15 16:18:40 163

原创 reward model

也就是将IXC-2.5最后一层的MLP去掉,换成score head,对于reward model,输入就是prompt和response,输出就是score;关于PPO的部分,尊重的是传统的PPO的做法,唯一让人不解的是:这里不同于游戏,不需要很多step才得到最终奖励,为什么还需要训练critic model,以及采样数据可以边训练边采样也很方便,为什么还要用一个专门的actor去采样?1.用这个reward model,采用PPO的RL训练了IXC-2.5-Chat,用户体验明显提升;

2025-02-17 15:11:21 589

原创 RL--2

强化学习当中最难的两个点是:2.agent的行为会影响到之后看到的东西,所以agent要学会探索世界;关于强化学习的不同类型,可以分为以下三种:一种是policy based:可以理解为它是去学习一个很强的actor,由actor去指导下一步的行动;一种是value-based:学习一个好的critic,这个critic其实就是价值函数,由价值函数去指导做下一步的行动;还有一种是当下最流行的二者结合的方法叫actor+critic,也是PPO 用的方法;

2025-02-17 00:03:38 904

原创 RL基础概念

我们的policy是根据价值函数获得的,这里要注意的是,policy并不等价于采取价值最大化的行动;这里可以举个老虎机的例子,比如两个老虎机,一个均值100,一个均值500,一开始我在均值100的老虎机1得到了90的奖励,在均值500的老虎机2得到了10块的奖励,那我后面就一直采取老虎机1玩么?不同的环境有不同的行为空间,有些环境中动作是离散的,而对于真实物理环境的robot,动作是连续的,动作空间是否连续对于RL算法有着深远的影响;首先reward依赖于当前的状态,当前的行动和下一时刻的状态;

2025-02-13 17:03:59 326

原创 大模型训练中如何找到内存泄漏

2.如果我们某个Tensor在计算图中的前向计算,但是没有参与反向更新参数,可能会导致内存泄漏,因为pytorch的内存管理机制是反向传播后释放计算图中的Tensor;前者代表正在使用的内存,后者代表使用的内存峰值,如果两个iter之间的比值是个固定值,代表该句以上没有内存泄漏,如果不稳定,则代表有内存泄漏;就是从训练起始的地方打印torch.cuda.memory_allocated()/torch.cuda.max_memory_allocated()的比值,

2025-01-14 20:55:25 392

原创 daily paper 12/05

1.25%的LLM tokens是有效的,其他的都是没太大用处;3.减少text token或者image token放在早期的layers来做会影响精度,也就意味着减少image token放在后面的layers来做可以保持住精度,因为LLM前几层主要在cross image和text,后面几层主要focas在text token的优化上。也是减少tokens数目的剪枝,是通过对于image tokens的Linear+softmax(可学习)得到重要性排序;用蒸馏的方法压缩VLM;

2024-12-05 16:53:23 200

原创 minicpm-v

从以上这张图来看,达到gpt4v性能所需的模型体量越来越小;(还是模型越大性能越好);minicpm-2.5的优势主要在于:1.在opencompass上的评分性能优于gpt4v;2可在端侧部署;3.强大的ocr能力;4.支持30多种语言;

2024-10-10 16:29:45 740 1

原创 python不用ide也能进行调试

使用 import pdb 和 pdb.set_trace() 是一种有效的调试方法,可以帮助你深入检查代码的执行过程和状态。import pdb 和 pdb.set_trace() 是 Python 中用于调试代码的工具。调用 pdb.set_trace() 后,程序的执行会暂停,允许你检查当前的变量状态、调用栈等信息。pdb.set_trace() 是一个函数调用,当程序执行到这一行时,会触发调试器进入交互模式。通过 import pdb 语句,你可以引入这个模块,从而使用其提供的调试功能。

2024-10-09 10:46:50 765

原创 用streamlit做问卷调查的示例代码

然后会以用户名.txt作为文件名保存该用户的所有的评测结果。

2024-10-08 11:46:35 353

原创 pytorch--流水线并行

为了构建PipelineStage,需要提供包含了nn.Parameters and nn.Buffers的nn.Module,同时定义了能够执行对应stage的forward函数。流水线并行(pipelining )部署实施起来非常困难,因为这需要根据模型的weights把模型分块(通常涉及到对源码的修改),此外,分布式的调度和数据流的依赖也是要考虑的点;PipelineStage需要知道输入输出的shape大小,方便创建通信缓存,shapes必须是固定大小的,也就是训练执行的时候它不能是变化的;

2024-09-20 17:33:34 1094

原创 multimodel ocr dataset

再finetune阶段是混合的策略,对于需要高分辨率的任务,比如说图表,就采用的分辨率HD55,,有一些是origin_size。当固定token数目的时候,是否使用换行符\n影响不大,但是tokens数目非常动态的时候,不使用换行符会导致性能降低;在其他任务上,提升分辨率带来的收益比较小,但是对于ocr任务而言,提升分辨率带来的收益比较大;然后为了保留图片的2D信息,每一行结束的时候有个\n的分隔符,不同view之间有个sp分割符。blip3训练的时候没有带上框,论文里面说可以训练下带上框的潜力;

2024-08-19 16:03:28 921

原创 NLP大模型的训练

接下来会在特定任务上进行finetune==>supervised finetuning (SFT)这里列举两种:MLM和NSP,NSP由于在某些论文中被证明是无效的,所以用的少;1.先进行通用任务的训练;无监督的样本是无穷无尽的;

2024-04-22 10:44:14 537

原创 代码规范工具

然后可以在pre-commit的config里面配置需要的代码规范;这样子代码检查的规范的执行就会注册在git的hook当中。有些规范不会帮你修改,只会报错,比如flake8;然后可以在代码仓里面配置pre-commit。commit的时候会触发hook帮你检查;有些规范可以帮你修改,

2024-03-15 15:21:31 799

原创 关于- bounding box reparameterization

因为detr以及大部分detr的变体都是将box的x,y,w,h映射到[0~1]之间;这样对于小目标的检测的话就会比较困难,因为损失被大目标主导了,

2024-03-13 09:52:06 459

原创 三维相机选型主要考虑哪些方面

2024-03-10 17:37:59 463

原创 vslam的优化方向

2024-03-10 17:36:38 426

原创 Group DETR

所以groupDETR提出的方法是在训练的时候用多组query,每组内仍然保持一对一匹配,推理的时候只用任意一组query就可以不用NMS了;1.如果增加query的数量,是可以提升检测性能的,但是计算开销也会增大,原因在于query个数越多,越容易命中目标;2.如果改成一对多的匹配,比如把一个gt匹配上2个positive box,可以加速收敛,提升一点性能;groupDETR要解决的问题是:既能够一对多的匹配,又能够不用NMS,节约计算开销;但是会导致使用的时候需要用到NMS;

2024-02-22 16:14:28 559

原创 mmdetection及mmengine源码结构

mmdet的注册机机制是基于装饰器实现的,Register这个类中有一个装饰器函数register_module(),通过这个装饰器函数可以把类/函数装入到Register这个类的成员变量_module_dict中,_module_dict的目的是维护每个注册器中的类和函数到字符串的映射;个人感觉跟C++中的虚函数的概念和目的是有区别的,虚函数的目的是相同的函数名,不同的对象会调用不同的虚函数实现;然后我们就可以把需要的函数/类注册到对应的register的_module_dict里面;

2023-10-17 15:15:33 662

原创 transformer比CNN好在哪里

1.Dynamic比static好:transformer的参数是随着输入变化的,不像CNN是fixed住的;动态参数提取特征的能力会更强,所以很多CNN也在朝Dynamic的方向发展,比如Dynamic cov,Dynamic relu;2.attention机制更关注不同feature之间的相对关系,对于绝对的value值并不敏感(对于形变和噪声不敏感),所以相对于CNN具有更好的普适性;而CNN更关注对于局部的描述(类似于传统算法中的特征点提取);(在此过程中也会损失掉分辨率);

2023-07-10 14:56:47 1200

原创 Tensor core原理

Tensor core是nvidia底层执行运算的硬件单元,不同于nvidia以往的cuda core(全浮点型),Tensor core是近几年推出来的、混合精度的、将累加和累乘放在一起的计算硬件;混合精度指的是在输入、输出的时候使用FP16,计算的时候使用FP32;在GPU编程中,"kernel"一词有特定的含义,与计算机操作系统中的内核不同。在GPU编程中,"kernel"是指在并行计算中由多个线程同时执行的函数。它是在GPU上执行的并行计算任务的入口点。

2023-06-28 14:33:44 9078 3

原创 AI芯片的基础

简言之,就是为了AI算法的运行而专门设计的芯片;

2023-06-27 15:57:58 1594

原创 swin-transformer在Jeston Nx部署

1.arm\x86-64的区别指令集不一样2.arm架构上的conda要安装miniforge3.arm上的ubuntu的软件管理器是pacman,这个安装起来也有点麻烦,因为这个库有一些前置依赖库pkg-config;4.如果dockerfile里面的CMD和entrypoint什么都没写的,直接docker run起来的容器会很快退出,而且没有log,如果要在容器中停留比较久的话需要-it进入交互式界面;6.cmake。

2023-06-27 11:17:35 631 3

原创 关于深度学习训练的工程技巧

符号位表示数的正负,指数位用于表示数的指数部分,尾数位用于表示数的尾数部分。线性层和卷积层,本质上都是线性操作,卷积层相当于共享参数的线性操作,但是self-attention是高阶的非线性操作,ResNet是由齐次运算堆叠而成,关注局部区域,而transformer是由非齐次运算堆叠而成,关注更大区域和更高的语义,齐次和非齐次运算的雅可比矩阵有非常不同的特性,会导致不同的优化难度;雅可比矩阵的连乘可以得到对某个参数的导数,根据该导数可以对该参数进行更新,关于具体的更新方式,不同的优化器有不同的方式;

2023-06-20 19:19:02 859

原创 如何用vscode调试第三方库的源码

vscode debug

2022-08-01 11:50:54 1092

原创 视觉目标检测及分割任务中使用解耦头的好处

什么是解耦头?在做实例分割时,我们需要输出分类置信度图和实例mask图;在做目标检测时,我们需要输出目标的分类和边框位置;所以,这两类任务都需要输出分类和位置!采用两个不同的头解耦输出分类和位置,称为decoupled;其中目标检测的解耦头如下图所示:solov2的解耦头如下图所示:为什么要用到解耦头?因为分类和定位的关注点不同!分类更关注目标的纹理内容!定位更关注目标的边缘信息!如上图所示分类更关注中心的内容区域,而边框回归更关注边缘信息!有实验表明使用解耦头之后目标检测任务

2022-02-07 22:35:16 8210

原创 两个不规则的box求取IOU-python

第一步:构造该框以四条线段表示该框,构造一个二进制的mask因为框里的像素只需满足四个公式,在L4的下面,在L2的上面,在L1的左边,在L3的右边第二步:相与和相或两框的mask相与求交集,相或求交集,载相除得到iouimport osimport numpy as npdef get_k(x1,y1,x2,y2,x3,y3,x4,y4): k1=(y2-y1)/(x2-x1) k2=(y3-y2)/(x3-x2) k3=(y4-y3)/(x4-x3) k4=.

2022-01-26 23:15:30 3755

原创 PSPNet--语义分割网络

简介作者认为不同像素之间的语义信息是有关联的,比如车不可能在水里;所以利用全局像素的语义对单个像素的语义进行调整是有必要的;也就是要用到attention机制;PSPNet的attention是通过不同尺度的pooling+upsample+contact实现的;网络结构这篇文章讲述了具体的细节以及实验结果:https://zhuanlan.zhihu.com/p/97706803...

2022-01-17 16:25:47 918

原创 关于牛顿法梯度下降

2021-12-20 10:38:40 293

原创 本质矩阵 基础矩阵 单应性矩阵

单应性矩阵表示同一个平面在不同相机的图像坐标系下的变换;三个矩阵之间的关系单应性矩阵虽然跟本质矩阵同为点在像素坐标系下的变换,但是单应性是中的点是共面的;本质矩阵与基础矩阵如下图所示:其中E为本质矩阵,KKK及K′K^{'}K′是两个相机的内参,F为基础矩阵,我们可以这么理解:本质矩阵是一个三维点在相机坐标系下的变换,A相机坐标系下的三维点经过内参的转置变换可以其在A相机图像坐标系的位置,经过基本矩阵获得其在B相机图像坐标系的位置,再经过B的内参,获得其在B相机坐标系下的位置;...

2021-12-14 17:14:44 3087

原创 P3P求解相机姿态原理介绍

简介首先,PnP算法是利用相机内参、瞄点在图像坐标系以及对应世界坐标系下的位置 ,求取相机在真实坐标系下姿态的问题 ;其本质上是求解相机坐标系到世界坐标系的变换;p3p利用三个点对,余弦定理来求解 ,可以求出4个解,所以至少需要四个点对才能求取出没有歧义的解;其求解过程可以分为两个步骤1.根据余弦定理估计投射线的长度;2.计算方向参数;我们首先需要知道的是P3P并不是直接根据3D-2D点求出相机位姿矩阵,而是先求出对应的2D点在当前相机坐标系下的3D坐标,然后根据世界坐标系下的3D坐标和当

2021-12-14 15:38:12 4786

原创 残差/shortcur/Resnet 究竟好在哪里

为什么要使用残差?众所周知,更深的网络会遇到退化问题,即在网络的层数达到最大值后,随着网络深度的增加,准确性会降低。并且这种准确性的降低不是由于训练集的过度拟合;因为训练误差开始增加。然而,可以证明(并且作者确实证明了)如果较浅的网络以一定的精度执行,那么任何较深的网络至少可以与较浅的网络一样好。额外的层可以只是恒等映射(什么也不做),并给出与浅层网络相同的结果。但是实验中并不是这样的。这表明优化器难以通过多个非线性层学习恒等映射。残差的本质是将恒等映射变成了残差拟合;深度学习网络在层数加深的过程中,

2021-12-14 14:44:44 1366

原创 简单易懂--可形变卷积deformable convolution

可形变卷积解决什么问题?1.很多目标物体的形状不是固定的,比如纸袋子,再比如动物跑跳、睡觉情况下会有不同的形状,简言之,目标除了光照、位置会发生变化,还有形变!传统CNN对应位置采用固定的系数去卷积,对于形变物体就会缺少建模和表达能力,所以需要可形变卷积!什么是可形变卷积?下图当中a是普通卷积;b,c,d是可形变卷积,可以看到不是固定对应位置的卷积;每个待卷积的点的位置会发生偏移!且偏移不固定!这个偏移也是网络要学习的!可形变卷积如何实现的?其是在卷积核参数的基础上,加上了偏移量参数δx\de

2021-12-13 21:20:18 2812

原创 RANSAC如何动态更新最大迭代次数

简介:RANSAC的流程是:1.随机取一组点model_points,求解出模型方程;model_points为求取模型的最小点数;2.计算满足该模型方程的点数占总点数的比例(即内点占比);3.若内点占比满足一定阈值,或者当前迭代次数大于最大值,则停止迭代;4.若当前内点占比大于当前统计得到的最大内点占比,则根据内点占比更新最大迭代次数;5.继续迭代;那么最大迭代次数是如何更新的?首先,RANSAC的目的是找出内点占比最大的模型;假设当前统计的最大内点占比是(1-ep),也就是对应的外点占

2021-12-13 10:37:11 1536

原创 SeNet--通道注意力卷积

简介SeNet是一种通道注意力卷积,通俗的讲,就是对每层特征图求平均值,得到(N,C,1,1),然后经过全连接得到对应系数(N,C,1,1),再乘到原始的特征图上(N,C,H,W);原理上是挑选出更需要关注的特征,特征图是由卷积核卷积得到,有的卷积核关注横向的梯度,有的关注纵向的梯度,每个卷积核提取的特征不同,如果一个卷积核的系数值比较小,特征图的值也就比较小,也就意味着这个卷积核没有那么重要,那么SENet就希望缩小不重要的特征的系数,增大重要特征的系数;网络流程图介绍SeNet是放在卷积之后,对

2021-12-07 11:11:54 2868 1

原创 多线程与多进程

简介操作系统最小分配资源的单位是进程,操作系统的最小调度单位是线程;一个程序的执行就是一个进程,一个进程可以包含多个线程,单个CPU内核只能执行一个进程;多进程才是真正的并发操作,多线程如果仅仅使用同一个CPU内核,仍然是多线程之间的交替执行,不是真正的并发;每个进程会被分配独立的内存空间;多进程之间的内存共享往往比较麻烦~一个进程下的多线程内存共享,但是如果做到内存同步需要用到锁机制;多进程之间的内存共享的话可以用队列;python的多进程可通过multiprocessing实现多线程可通

2021-11-26 09:52:05 183

原创 稀疏光流与稠密光流

稀疏光流光流用在目标追踪过程中,基于上一帧的位置,预测目标在下一帧的位移;该预测基于的先验条件如下:1.上一帧跟当前帧拍摄的时差较小,物体的位移不大;2.某点像素(待检测目标上)周围的像素与该点具有相同的位移;3.亮度恒定,上一帧与当前帧的变化不大;具体步骤:1.在上一帧中目标所在的区域内提取N个特征点;2.在每个特征点周围划取5*5的像素大小稠密光流稀疏光流在上一帧检测出来的目标区域内利用若干个特征点计算位移;...

2021-11-25 15:44:55 3341

原创 OCRNet

简介这是HRNet+TRansformer在语义分割方面的应用;最近的研究中,把TRansformer用在语义分割中的很多,因为不同位置不同实例的语义是有相关联性的,比如说飞机不可能在厕所里面等等;这是OCRNet官方的解读:https://zhuanlan.zhihu.com/p/43902175网络结构直接上网络结构:OCR 方法的实现主要包括3个阶段:(1) 根据网络中间层的特征表示估测一个粗略的语义分割结果作为 OCR 方法的一个输入 ,即软物体区域(Soft Object Regi

2021-11-05 17:09:05 2848

原创 PSA极化注意力机制:Polarized Self-Attention: Towards High-quality Pixel-wise Regression

摘要在计算机视觉任务中,语义分割和关键点检测是具有挑战的,因为既要尽量保持高分辨率、又要考虑计算量,以及尽量连接全局信息得到结果。由于提取全局信息的有效性以及对全局像素special的注意力,attention机制在计算机视觉领域变得非常的流行。CNN本身是卷积共享的核,且具有平移不变性,也就代表其是local且丧失special注意力的。但是long-range的attention参数量大,训练耗时长且难以收敛;很多学者都在研究轻便易于训练的attention机制。本文提出了一种极化注意力机制,其优势在

2021-11-05 15:14:06 9669 7

空空如也

空空如也

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

TA关注的人

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