- 博客(240)
- 资源 (2)
- 收藏
- 关注
原创 相机标定中的相机模型
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定。简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵P的过程。无论是在图像测量或者机器视觉应用中,摄像机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响摄像机工作产生结果的准确性。
2024-12-17 14:38:42
585
原创 qt5将程序打包并使用
一、封装程序(1)、点击创建项目->库->c++library(2)、填写自己想要封装成库的名称,这里我填写的名称为mydll1(3)、如果没有特殊的要求,则一路下一步,最终会出现如下文件列表。(4)、删除mydll1_global.h文件,编写mydll1.h文件内容如下:其中为需要封装的类名,可以在类中编写相关函数,在上述例子中,我们编写了一个add函数。
2024-11-07 17:07:39
746
原创 PCL学习——common
*角度:**两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度。如下图:**弧度:**两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度。
2024-10-31 15:00:42
542
原创 PCL学习——滤波
使用体素化网格方法实现下采样,即减少点的数量减少点云数据,并同时保存点云的形状特征,在提高配准,曲面重建,形状识别等算法速度中非常实用,PCL是实现的VoxelGrid类通过输入的点云数据创建一个三维体素栅格,容纳后每个体素内用体素中所有点的重心来近似显示体素中其他点,这样该体素内所有点都用一个重心点最终表示,对于所有体素处理后得到的过滤后的点云,这种方法比用体素中心逼近的方法更慢,但是对于采样点对应曲面的表示更为准确。原始点云中符合假设条件的激光点被视为正常点进行保留,反之,则视为噪声点并进行去除。
2024-10-25 15:33:47
1276
原创 PCL学习——点云基础
三维点云(3D Point Cloud)是一种用于表示三维空间中对象或场景的数据结构。在最基础的形式中,它是一个包含多个三维坐标点(X, Y, Z)的集合。这些点是通过对实际物体或场景表面进行离散采样而获得的,因此,点云可以被视为场景表面在给定坐标系下的离散表示。三维点云具有如下特点:1、高度灵活性:点云可以用于表示任何类型的三维形状,包括不规则形状;2、数据密度可变性:点云的密度可以非常不同,从只包含一个点(称为孤点或奇点)到包含几百万个数据点的高密度点云;
2024-10-24 09:34:13
883
原创 yolo格式数据集裁剪局部区域并且同步标签
说明:工作中,有时需要处理一批已经标注好的yolo格式的数据集,例如图片裁剪了,相应的标签应该得与裁剪后的图片呼应上,就是框的坐标应同裁剪图像一样作出相应的处理,使得处理后的标签文件里的框坐标能对应上裁剪后的图。原文链接:https://blog.youkuaiyun.com/m0_56182552/article/details/134670686。此脚本只需要更改主函数中的相关路径即可。记住在训练之前一定要先看一下标签是否正确!
2024-08-27 11:39:53
616
原创 Modbus通信协议
Modbus是一个Bus,即总线协议。目前被工业电子领域广泛应用。它具备以下三个优点:1、公开发表并且无版权要求2、易于部署和维护3、对供应商来说,修改移动本地的比特或字节没有很多限制。
2024-08-14 14:14:43
2467
原创 强化学习——学习笔记3
先上图:在上述流程图中所说的Q表即为下表:假设我们在玩一个小游戏,该游戏有上下左右不同的动作,同时也会有不同的状态,比如游戏结束等。Q表也可以称为状态-价值函数QsaQ(s,a)Qsa:这个表格的每一行代表每个 state上述例子中的游戏结束等,每一列代表每个 action上述例子中的上下左右,表格的数值就是在各个 state 下采取各个 action 时能够获得的最大的未来期望奖励。
2024-05-29 14:23:25
2030
原创 强化学习——学习笔记2
动态规划法(DP):动态规划法离不开一个关键词,拆分 ,就是把求解的问题分解成若干个子阶段,前一问题的结果就是求解后一问题的子结构。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。举一个简单的例子:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子总数为多少?
2024-05-28 16:26:04
1200
原创 强化学习——学习笔记
强化学习问题通常可以建模为一个马尔可夫决策过程,包括以下几个要素:1、状态集合 (State Set):S;2、动作集合 (Action Set):A;Ps′∣saPs′∣sa,描述在状态s下执行动作a后转移到状态s′s^′s′的概率;Rsas′Rsas′,描述在状态s 下执行动作a并转移到状态s′后获得的奖励。πa∣sπ (a∣s)πa∣s,描述智能体在状态s下选择动作a 的概率。
2024-05-27 16:46:38
2065
原创 YOLOv10: Real-Time End-to-End Object Detection
在过去的几年里,由于在计算成本和检测性能之间取得了有效的平衡,YOLO系列算法已经成为实时目标检测领域的主导范式。研究人员已经对YOLO的架构设计、优化目标、数据增强策略等进行了探索,并取得了显著进展。然而,对非最大抑制(NMS)的后处理依赖阻碍了YOLO的端到端部署,并对推理延迟产生不利影响。此外,YOLO中各部件的设计缺乏全面彻底的检查,导致计算冗余明显,限制了模型的能力。
2024-05-27 10:14:14
1291
原创 Designing Network Design Spaces
近期特斯拉自动驾驶技术大火,经过对技术发布会的了解,特斯拉基于纯视觉技术所用的特征提取骨干为:RegNet,因此对相关的论文进行了研读。论文下载:论文代码:在这项工作中,作者提出了一种新的网络设计范式。目标是帮助提高对网络设计的理解,并发现跨设置的设计原则。此文不是专注于设计单独的网络实例,而是设计网络设计空间,使网络群体参数化。整个过程类似于经典的手工网络设计,但提升到设计空间层面。作者探索网络设计的结构方面,并到达一个低维的设计空间,由简单,规则的网络组成,称之为RegNet。
2024-04-30 14:10:38
1131
原创 GPU占用显存,但看不到PID进程(已解决)
awk 命令来处理 fuser 的输出,遍历每一行输出,以 "kill -9 " 开头,后面跟着每个进程的PID。直接使用sudo kill pid,kill指定pid进程,本文案例为22131,则为以下命令。当我们使用nvidia-smi查看显卡占用时发现显存被占用,但是看不到pid进程。fuser 命令来查找哪些进程正在使用 /dev/nvidia* 文件。
2024-04-19 09:46:06
7239
原创 Linux 利用mount挂载移动硬盘(亲测有效)
若是挂载u盘,输入如下指令,其余与上几个步骤一致。第三步,创建挂载点(按照自己喜好创建文件夹)第一步cd到自己想要挂载数据的根目录。
2024-04-09 15:09:41
1775
原创 Windows10/11 D盘 安装 WSL2
WSL2适用场景:嵌入式系统等需要gnu交叉编译工具链linux服务器端开发跨平台应用开发需要linux环境的其他开发在Window10/Windows11上安装WSL2,即可替代虚拟机,远程登陆等传统开发方式。Windows11 默认可以采用 PowerShell 中的命令 wsl --install -d Ubuntu 直接安装最新版本的Ubuntu-LTS。并且可以在ubuntu中通过 sudo do-release-upgrade 保持更新。
2024-03-13 16:10:25
5747
原创 windows server 2019 服务器配置的方法步骤
在【服务器管理器上】点击【工具】–》【Remote Desk service】 -->> 【远程桌面授权管理】,打开远程桌面授权管理器,选择未激活的服务器,右击选择属性。依次点击展开【计算机配置】>>>【管理模板】>>>【Windows 组件】>>>【远程桌面服务】>>>【远程桌面会话主机】>>>【连接】右键点击【此电脑】–【属性】,进入“【控制面板\系统和安全\系统】”,点击-【远程设置】(计算机找不到就使用【win+E】快捷键)在连接项右侧找到【限制连接的数量】,并启用,设置最大用户数目。
2024-03-11 15:25:03
3283
原创 YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
paper:code。
2024-03-06 15:57:00
1536
原创 jvm实践
通过增大Eden区的大小,来减少GC发生的次数,但有时我们发现,虽然次数减少了,但Eden区满的时候,由于占用的空间较大,导致释放缓慢,此时STW的时时间较长,因此需要按照程序情况调优。堆太小,可能会频繁的导致年轻代和老年代的垃圾回收,会产生stw,暂停用户线程堆内存大肯定是好的,存在风险,假如发生了fullgc,它会扫描整个堆空间,暂停用户线程的时间长设置参考推荐:尽量大,也要考察一下当前计算机其他程序的内存使用情况。4、jstat统计检测工具,用于显示垃圾回收信息,类加载信息,新生代的统计等。
2023-11-07 15:31:58
495
原创 Segment Anything Model(SAM)论文解读
在这项工作中,作者的目标是建立一个图像分割的基础模型。也就是说,寻求开发一个提示模型,并使用一个能够实现强大泛化的任务在广泛的数据集上对其进行预训练。有了这个模型,使用即时工程解决新数据分布上的一系列下游分割问题。该计划的成功取决于三个组成部分:任务、模型和数据。为了开发它们,作者解决了以下关于图像分割的问题:1、什么任务可以实现zero-shot泛化?2、相应的模型体系结构是什么?3、哪些数据可以为这项任务和模型提供支持?这些问题纠缠在一起,需要综合解决。
2023-09-12 09:42:49
1968
原创 C++四种强制类型转换
type必须是一个类类型,在第一种形式中,type必须是一个有效的指针,在第二种形式中,type必须是一个左值,在第三种形式中,type必须是一个右值。static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换,例如non-const对象转为const对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的安全性。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
2023-08-18 14:49:16
745
原创 C++ 中 const 和 static 关键字(定义,用途)
const 作用:限制可读性1、const修饰基础数据类型const 在基础数据类型前、后结果一样,在使用这些常量的时候不能改变常量的值。修饰符 const 可以⽤在类型说明符前,也可以用在类型说明符后,其结果是一样的。在使用这些常量的时候,只要不改变这些常量的值即可。常量不可修改//Min = 2;常量只读性2、修饰指针变量和引用变量如果const 在 * 左侧 ,则const修饰指针所指向的变量 ,即指针指向常量。
2023-08-16 15:18:33
609
原创 C++中重载(overload)、重写(override,也叫做“覆盖”)和重定义(redefine,也叫作“隐藏”)的区别?
指派生类的函数屏蔽了与其同名的基类函数。特点:①函数名称相同,但是返回值可以不同。②作用域分别位于基类和派生类之中;①如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。②如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。所以,此处只要求是同名函数,不管参数列表是否相同,基类函数都会被隐藏。
2023-08-15 21:14:10
1944
原创 C++智能指针
C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。头文件:#include < memory>
2023-08-15 20:13:56
202
原创 匈牙利算法详解
匈牙利算法(Hungarian Algorithm)是一种组合优化算法(combinatorial optimization algorithm),用于求解指派问题(assignment problem),算法时间复杂度为O(N^3)。Harold Kuhn发表于1955年,由于该算法基于两位匈牙利数学家的早期研究成果,所以被称作“匈牙利算法”。假设有三位工人A,B和C,需要分配他们每人完成一件工作;对于不同的工作他们所需要花费的时间不同,如下表所示。问题就是要找到一套耗时最小的指派方案。
2023-08-08 17:02:43
12022
1
原创 机器学习指标计算
现在我们指定一个阈值为0.9,那么只有第一个样本(0.9)会被归类为正例,而其他所有样本都会被归为负例,因此,对于0.9这个阈值,我们可以计算出FPR为0,TPR为0.1(因为总共10个正样本,预测正确的个数为1),那么我们就知道曲线上必有一个点为(0, 0.1)。对于不同的模型在相同数据集上的预测效果,我们可以画出一系列的PR曲线。其中,该曲线的横坐标为假阳性率(False Positive Rate, FPR),N是真实负样本的个数,FP是N个负样本中被分类器预测为正样本的个数,P是真实真样本的个数。
2023-07-13 21:39:12
580
1
原创 计算机视觉中的感受野
感受野(ReceptiveField)的定义是卷积神经网络每一层输出的特征图(featuremap)上的像素点在原始输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应原始输入图片上的区域,如下图所示。
2023-07-11 08:38:16
2121
原创 深度学习之权重初始化
的初始化则显得至关重要,一个好的权重初始化虽然不能完全解决梯度消失和梯度爆炸的问题,但是对于处理这两个问题是有很大的帮助的,并且十分有利于模型性能和收敛速度。而言,损失函数的导数都是相同的,因此在随后的迭代过程中所有权重都具有相同的值,这会使得隐藏单元变得对称,并继续运行设置的。初始化方式一样,都希望初始化使得正向传播时,状态值的方差保持不变,反向传播时,关于激活值的梯度的方差保持不变。后每层的激活函数输出值的分布,从图中我们可以看出,深层的激活函数输出值还是非常服从标准高斯分布。下面代码为权重初始化为。
2023-07-10 22:21:23
1568
原创 深度学习调参技巧
过拟合是一个需要解决的问题,因为它会让我们无法有效地使用现有数据。有时我们也可以在构建模型之前,预估到会出现过拟合的情况。通过查看数据、收集数据的方式、采样方式,错误的假设,错误表征能够发现过拟合的预兆。为避免这种情况,请在建模之前先检查数据。但有时在预处理过程中无法检测到过拟合,而是在构建模型后才能检测出来。我们可以使用上述方法解决过拟合问题。
2023-07-09 20:49:11
1160
原创 深度学习各类优化器大总结
深度学习中的优化算法采用的原理是梯度下降法,即最小化目标函数Jθ,最优化的求解过程,首先求解目标函数的梯度∇Jθ,然后将参数θ向负梯度方向更新,θtθt−1−η∇Jθη为学习率,表明梯度更新的步伐的大小,最优化的过程依赖的算法称为优化器,可以看出深度学习优化器的两个核心是梯度与学习率,前者决定参数更新的方向,后者决定参数的更新程度。我们定义θ为待优化的参数,Jθ为目标函数,初始学习率为η。再进行一次梯度下降过程中优化算法的执行框架如下:gt∇。
2023-07-09 20:33:05
1298
原创 标签平滑知识点
标签平滑(Label smoothing),像L1、L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善泛化能力差的问题。Label smoothing将hard label转变成soft label,使网络优化更加平滑。标签平滑是用于深度神经网络(DNN)的有效正则化工具,该工具通过在均匀分布和hard标签之间应用加权平均值来生成soft标签。它通常用于减少训练DNN的过拟合问题并进一步提高分类性能。
2023-07-04 14:40:14
486
原创 算法与数据结构(五)
1)、首先,我们需要知道每一个节点的层数:每一个节点的层数是其父节点层数+1所以,我们在push一个节点的孩子节点进入队列时,可以保存其孩子节点的层级:当前层级+1。从上图可以看出,在中序遍历中,所有结点都是升序的,即为搜索二叉树。2、弹出队列中的第一个结点,然后打印该结点,并将该节点的左右子节点先后放到队列中(没有左或者右则直接跳过放另外一个结点)。1、将压入结点下的每颗子树整棵树左边界进栈(第一次先从根节点开始),对于下图,进栈的为(1,2,4)宽度优先遍历输出为:1,2,3,4,5,6,7,8,9。
2023-06-09 21:32:28
937
原创 算法与数据结构(三)——排序算法大总结
但我们并不能确定待排元素中究竟哪一部分是有序的,所以我们一开始只能认为第一个元素是有序的,依次将其后面的元素插入到这个有序序列中来,直到整个序列有序为止。在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。实际上,我们可以一趟选出两个值,一个最大值一个最小值,然后将其放在序列开头和末尾,这样可以使选择排序的效率快一倍。5.tem插入到该元素的后面,如果已排序所有元素都大于tem,则将tem插入到下标为0的位置。左边大于右边交换一趟排下来最大的在右边。
2023-06-01 22:04:42
613
原创 opencv_c++学习(三十)
model:模型文件名称config:配置文件名称framework:框架种类blob:新的输入数据,数据类型为CV_32F或CV_8U。name:输入网络层的名称。scalefactor:可选的标准化比例(尺寸缩放)。mean:可选的减数数值(平移)。
2023-05-30 10:36:31
1006
原创 opencv_c++学习(二十九)
首先给出一个阈值k,后寻找距离黑色圆点最近的k个元素,占据比例大的元素即为黑色所属的类别。如图所示,即k=3时,黑色圆属于三角形,k=5时圆点属于正方形。trainData:训练时使用的数据,数据为Ptr类型。flags:构建模型方法标志,例如UPDATE_MODEL表示对使用新数据对模型进行更新。samplcs:输入数据矩阵,矩阵数据类型必须是cV_32。results:对输入数据预测结果的输出矩阵。flags:模型方法标志,取决于具体模型。
2023-05-29 21:58:17
973
原创 opencv_c++学习(二十八)
如上图所示,根据图像的情况反推相机的运动情况。如实现上述功能则需要拍摄当前物体的图像,然后拍摄一段时间之后物体的图像,然后联合两张图像则可以获取两个时刻的相机位姿关系。objectPoints:前一时刻世界坐标系中的3D点的三维坐标。imagePoints: 3D点在图像中对应的像素点的二维坐标。cameraMatrix:相机的内参矩阵。distCoeffs:相机的畸变系数矩阵。rvec:世界坐标系变换到相机坐标系的旋转向量。tvec:世界坐标系变换到相机坐标系的平移向量。
2023-05-29 16:45:31
1420
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人