- 博客(96)
- 收藏
- 关注
原创 向量/矩阵的范数、谱半径和条件数
本文介绍了向量和矩阵的常见范数定义及计算方法。向量的范数包括L1范数(绝对值之和)、L2范数(欧几里得距离)和无穷范数(最大绝对值);矩阵范数涵盖1范数(最大列和)、2范数(最大奇异值)、无穷范数(最大行和)和Frobenius范数(元素平方和的平方根)。此外还介绍了谱半径(特征值绝对值的最大值)和条件数(衡量矩阵稳定性的指标)。文中给出了各种范数的数学定义、计算示例和对应的MATLAB实现代码,便于实际应用参考。这些概念在线性代数、数值计算等领域具有重要作用。
2025-05-26 07:30:00
848
原创 C++实时统计数据均值、方差和标准差
采用Welford 算法:避免传统方法(如先计算总和再求均值)的浮点数精度损失,保证了数值稳定性。处理边界条件:当数据量(n < 2)时,方差返回0.0。本文算法的优势:内存效率高,仅需要维护3个成员变量,适合实时或大数据场景。对比传统算法:避免存储全部数据,计算复杂度O(1)。
2025-04-28 21:37:30
724
原创 衡量矩阵数值稳定性的关键指标:矩阵的条件数
矩阵的条件数衡量矩阵对扰动或误差的敏感性。对于非奇异矩阵A∈Rn×nA∈Rn×nCondA∥A∥⋅∥A−1∥CondA∥A∥⋅∥A−1∥其中∥⋅∥∥⋅∥为矩阵范数。2-范数(谱条件数)Cond2AσmaxσminCond2Aσminσmaxσmaxσmax和σminσmin分别为最大和最小奇异值。1-范数和∞-范数。
2025-04-27 23:05:53
1277
原创 TensorRT入门:ONNX转换为TensorRT引擎文件
trtexec 工具是 TensorRT 的命令行工具,位于 TensorRT 的安装目录中,随 TensorRT 的安装就可以直接使用。trtexec,不仅打包了几乎所有 TensorRT 脚本可以完成的工作,并且扩展丰富的推理性能测试的功能。通常我们使用 trtexec 完成下面三个方面的工作,一是由 Onnx 模型文件生成 TensorRT 推理引擎,并且可以序列化为 .plan 文件。二是可以查看 Onnx 或者 .plan 文件的网络的逐层信息。
2025-04-27 07:30:00
1203
原创 pytorch手动调整学习率
在此,将进行拓展,学习如何手动更新学习率(即不使用pytorch自带的学习率调度器)。当我们在使用预训练的模型时,需要对分类层进行单独修改并进行初始化,其他层的参数采用预训练的模型参数进行初始化,这个时候我们希望在进行训练过程中,除分类层以外的层只进行微调,不需要过多改变参数,因此需要设置较小的学习率。总而言之,通过引入学习率衰减,在模型训练初期,会使用较大的学习率进行模型优化,随着迭代次数增加,模型逐渐收敛,学习率会逐渐进行减小,保证模型在训练后期不会有太大的波动,从而更加接近最优解。
2025-04-22 07:30:00
1075
原创 C++(OpenCV)实现MATLAB的edge(I, “sobel“)边缘检测
函数的C++代码,我们需要复现其完整的边缘检测流程,包括梯度计算、非极大值抑制和阈值处理。此代码实现了类似MATLAB的Sobel边缘检测流程,结合非极大值抑制和自动阈值处理,能够有效提取图像边缘。为了实现类似于MATLAB的。
2025-04-17 20:54:46
478
原创 C++动态链接库的创建及使用
运行时加载:程序运行时动态加载,节省内存。独立更新:更新库无需重新编译主程序。可重用性:由于多个应用程序可以共享一个DLL,因此它们可以共享相同的代码和数据,从而提高了代码的可重用性。节省内存:由于DLL在运行时才加载到内存中,因此它们可以在不占用过多内存的情况下提供所需的功能。稳定性:由于多个应用程序共享相同的DLL,因此如果DLL中的代码或数据发生问题,则可以在一次更新后修复所有使用该DLL的应用程序。
2025-04-17 08:00:00
1406
原创 C#调用C++动态库时出现`System.DllNotFoundException`错误的解决思路
确认DLL位置:将DLL放在C#输出目录。检查依赖项:确保所有依赖的DLL存在。缺少目标XXXdll的依赖,例如要用到的是A.dll,A.dll用到时需要添加B.dll动态库文件,在用到时需要两个dll同时存在。其中,B.dll导出有问题时通过dumpbin检查A.dll不能检查出来,需要进一步检查B.dll。匹配平台:统一x86或x64。验证导出函数:使用dumpbin检查名称。安装VC++运行时:确保目标机器已安装。通过逐步排查上述问题,通常可以解决。
2025-04-07 21:02:43
1278
原创 Dumpbin 完全指南:深入解析所有命令与实战技巧
Dumpbin 是 Microsoft Visual Studio 提供的 COFF/PE 二进制文件分析工具,可以深入分析 EXE、DLL、OBJ、LIB 等文件格式的内部结构。它是逆向工程、性能优化和调试的强大助手。显示文件简要统计信息。
2025-04-07 08:00:00
2264
原创 使用dumpbin和depends查看dll(exe)的依赖
dumpbin只能查看一级依赖,如果需要一次查看所有依赖则需要使用Dependency Walker。Dependency Walker 可以自定义搜索目录,合理设置搜索目录,会大大提高搜索速度!默认情况下,Dependency Walker 会搜索 PATH 指定的路径,所以也可以通过修改 PATH 环境变量的值达到相同的效果。如果长时间(大概 5 秒钟)没有处理界面消息的话,界面就会无响应。VS2017 程序在新电脑环境出现 “无法加载DLL “xxxx.dll“:找不到指定模块。
2025-03-29 20:31:51
1457
原创 线性代数之矩阵特征值与特征向量的数值求解方法
特征方程与求解方法根据定义A−λIu0A−λIu0若A−λIA−λI非奇异,则方程只有零解。detA−λI0。
2025-03-08 17:11:42
3022
原创 MATLAB实现最小二乘法拟合直线
最小二乘法拟合直线的核心思想是:给定一组数据点xiyi(x_i, y_i)xiyi,其中i=1, 2, …, N,我们希望找到一条直线y = kx + b,使得这些点到直线的垂直距离的平方和最小。这里的k是直线的斜率,b是直线的截距。
2025-03-03 08:00:00
1544
原创 最小二乘法拟合直线(平面和空间)
最小二乘法(英文:least square method)是一种常用的数学优化方法,所谓二乘就是平方的意思。这平方一词指的是在拟合一个函数的时候,通过最小化误差的平方来确定最佳的匹配函数,所以最小二乘、最小平方指的就是拟合的误差平方达到最小。通过上面的式子不难发现,实际计算时,我们只需要计算出t1, t2, t3, t4即可进一步计算a,b。若存在噪声,拟合直线则为最小二乘最优解。求多元函数的极值点,我们可以令其各个偏导数等于0,然后解方程即可。通过解方程进一步得到y=ax+b的参数a和b。
2025-02-23 19:56:56
1097
原创 三维空间中直线的多种表示方法
无论是二维还是三维空间的直线方程,它们都是用来描述满足特定条件的所有点的集合,即直线的轨迹。虽然两者都描述直线,但二维空间直线方程更多地与平面几何相关,表示平面内满足某一条件的所有点的集合。而三维空间直线方程则与立体几何相关,表示空间中满足某一条件的所有点的轨迹,具有更复杂的几何意义。而在三维空间中,由于坐标轴的增多,其表示形式也更多,其中参数方程形式更为常用和直观。这些方法在不同场景下各有优势,参数方程便于生成点,对称式直观,交面式适合代数分析,而Plücker坐标适用于几何计算。
2025-02-23 19:31:59
2530
原创 3D空间中的旋转:欧拉角,旋转矩阵,四元数,旋转向量
一般用一个齐次矩阵表示位姿,即同时表示旋转和平移。MATLAB中的转换函数% 已知按顺序绕n系下x,y,z轴旋转对应角度后得到b系% 即描述物体在n系下的姿态角(角标描述先下后上)% 欧拉角→方向余弦% 欧拉角→四元数% 方向余弦→欧拉角% 方向余弦→四元数% 四元数→方向余弦% 四元数→欧拉角。
2025-02-21 16:13:44
1502
原创 2024年度总结:做一个持续精进的人
这一年过得很快,但只写了38篇博客,对自己并不是很满意,但很庆幸竟然获得了博客之星的评选资格。这入围的条件是什么,我是没有看过的。在此,我也仅仅将个人的想法写了下来,若有不适的地方,敬请大家批评指正。在下一年,将继续不断创作。
2025-01-23 22:58:21
755
原创 C++设计模式学习
设计模式是一种经验总结,它描述了在特定环境中经常出现的问题,并提供了问题解决方案的模板。设计模式就像是一套编程阵法,让你在编程世界中更加游刃有余,掌握了这些阵法,你的代码将更加健壮,逻辑清晰,方便维护。通过学习设计模式,你可以实现代码组件间的高度解耦和协同,让你的应用变得更加稳定和可扩展。使用工厂模式,你可以将对象的创建过程与具体类解耦,让代码更加灵活;使用策略模式,你可以根据不同情境灵活切换算法;使用单例模式,确保一个类只有一个实例,并提供全局访问点;
2024-12-16 16:51:52
1311
原创 UML类图学习
UML类图是UML中最常用的图之一,主要用于描述系统中的类、接口、协作和它们之间的关系,如继承、聚合、组合、依赖和实现。它以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。类图用来描述系统中有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等,是对现实世界中事物的抽象。类图不仅帮助我们理解系统的静态结构,还能够辅助设计阶段的工作。它们提供了对系统组件的高层次视图,有助于识别系统的关键概念,并促进团队成员之间的交流。
2024-12-12 22:43:39
1275
原创 (C++)堆已损坏CRT detected that the application wrote to memory after end of heap buffer
在使用内存之前,务必一定要确定内存已经分配了,且不要越界,否则会出现此类错误。另外,在调试程序时,最好先在debug模式下跑通,然后再在release下运行,这样也容易排查一些潜在的错误。这篇文章应该就是一个越界使用的例子,本质上也是使用了自己未分配的内存。
2024-12-10 07:30:00
556
原创 pycharm或conda中配置镜像源
由于Python在下载包时,容易出现超时等问题,主要是因为Python库的服务器都在国外,国内下载库的速度会很慢,所以需要配置国内镜像源来加快下载速度。打开pycharm,File – Settings – Project-- Project Interpreter。配置镜像源有两种方式这里以清华镜像源举例,具体用哪个可根据实际情况。然后点击“+”添加镜像源地址(建议先把本地镜像源删除)然后点击“Manage Repositories”也可以通过打开文件来增加删除镜像源。
2024-12-01 14:58:57
2909
原创 深度学习之pth转换为onnx时修改模型定义
在将PyTorch模型(.pth文件)转换为ONNX格式时,通常的转换过程是通过torch.onnx.export函数来实现的。这个过程主要是将PyTorch模型的计算图导出为ONNX格式,以便在其他框架或环境中使用。在转换过程中,你通常不能直接在原有的PyTorch模型前后“添加函数”,因为ONNX导出的是静态计算图,它表示的是模型在某一时刻的结构和参数,而不是动态的执行过程。不过,你可以通过修改模型定义的方式来实现类似的功能。
2024-12-01 13:12:25
739
原创 【python, C++, CUDA】双线性插值(Bilinear Interpolation)实现
双线性插值是一种更为平滑的图像缩放算法,它考虑了目标像素周围四个源像素的影响,并根据距离进行加权。其主要经过三次线性插值得到,如下为线性插值的公式,可以将插值点的值解释为两个点的距离加权,其中距离近的点权重大,距离远的点权重小。已知Q11(x1,y1)、Q12(x1,y2)、Q21(x2,y1)、Q22(x2,y2),求其中点P(x,y)的值。不难发现,其中每个点的权重和对角点到点P的距离是相关的(水平距离x垂直距离)。当然,也可以简化为如下的加权公式,可以看到该点由四个点加权求和得到。
2024-11-28 23:59:57
1348
原创 PyCharm 中Debug时如何在断点处编写测试代码
综上所述,虽然 PyCharm 没有一个特定的插件能在断点下直接执行全新代码,但其内置的调试控制台和 “Evaluate Expression” 功能已经提供了相当强大的交互式调试能力。在调试模式下,PyCharm 提供了一个交互式的调试控制台(Debug Console),你可以在这里执行任意的 Python 代码。这是最直接的方法,在断点处检查和修改变量的状态,或者执行新的代码片段。在 PyCharm 中,你可以使用一些内置功能和插件来增强调试体验,包括在断点处编写和执行新的测试代码。
2024-11-24 21:23:16
1084
原创 最优化之各种牛顿法
牛顿法可以用于求解非线性方程的根(零点),也可以用于求函数的极值点。当问题是求非线性方程的根时,f(x)=0;当问题是求函数的极值点时,f(x)'=0,也就是我们常见的最优化问题。本文主要基于最优化问题对牛顿法进行介绍。
2024-11-16 16:03:36
1834
原创 深度学习之pytorch常见的学习率绘制
在PyTorch中,可以通过torch.optim.lr_scheduler模块提供的多个学习率调度器(Learning Rate Scheduler)来实现学习率的动态调整。这些调度器可以帮助优化训练过程,提高模型的性能。
2024-11-11 07:00:00
1308
原创 python-opencv给图片或视频去水印
inpaint函数基于图像修复算法,通过对缺陷区域周围像素的分析和插值,生成合适的像素值来填充缺陷区域。这种算法通常用于去除图像中的污点、划痕或其他不需要的对象。注:对于视频的去水印,通过读取第一帧图像获取mask后,其余图像帧都可以使用该mask进行操作。使用cv2.inpaint函数进行图像修复,效果还是不佳,后续有空尝试训练去水印的AI模型。本文主要基于cv2.inpaint函数实现图片的水印去除。
2024-10-30 22:21:42
1352
1
原创 python-PyQt项目实战案例:制作一个视频播放器
在前面的文章中已经分享了pyqt制作图像处理工具的文章,也知道pyqt通过使用label控件显示图像的方式。在此,对于视频的显示,其本质上一帧一帧的图像,因此也可以使用同样的方式对其显示。要使用定时器,需要先创建一个QTimer实例,将定时器的timeout信号连接到相应的槽函数,并调用start(),定时器就会以设定的间隔发出timeout信号。注意:可以设置槽函数的执行次数,默认为定时器开启后周期性调用槽函数。PyQt5 中的 QTimer类提供了重复的和单次的定时器,为计时器提供了高级编程接口。
2024-10-19 10:50:32
1416
原创 OpenCV打开摄像头或视频
cv2.CAP_DSHOW 参数含义: 当你将cv2.CAP_DSHOW 与摄像头编号相加时,实际上是告诉OpenCV使用DirectShow框架来打开并操作指定的摄像头设备。DirectShow是Windows操作系统中用于处理音/视频流的一种API集合,它可以动态构建数据源到渲染器之间的过滤器链,支持多种音频和视频格式,并具有一定的硬件加速能力。使用外设摄像头时,cv2.CAP_DSHOW设置后,初始加载比较快,但帧率下降了,另外也不能设置图像大小。另外,查看网上也有人遇到相同的问题。
2024-10-12 18:10:25
2646
1
原创 python-PyQt项目实战案例:制作一个简单的图像处理工具
对于UI的设计可以通过qt designer直接绘制,也可以通过编写python代码实现。当然,一般情况下还是建议使用designer绘制,然后转换为py代码后再进行微调。设计好ui后将其保存,并导出为py文件。
2024-10-11 22:27:12
1592
原创 C++高精度计时方法总结(测试函数运行时间)
此处需要注意的是,这个函数所求的的运行时间并非准确运行时间,不过相对来说比较准确,它的精度和CPU有关,一般精度在16ms左右,由于GetTickCount()返回值以32位的双字类型DWORD存储,所以它的存储最大值是(2^32-1) ms约为49.71天,一旦一个程序运行时间超过这个值,这个数字就会归为0。3、clock() 函数,返回从 开启这个程序进程 到 程序中调用clock()函数 时之间的CPU时钟计时单元(clock tick)数(挂钟时间),返回单位是毫秒。
2024-09-22 18:04:56
4601
原创 python-在PyCharm中使用PyQt5
如果 Python 或 Anaconda3安装在其他路径下,或者选择其它路径中的 python.exe 作为 Python Interpreter,可以从 Pycharm ->Settings -> Project -> Python Interpreter 打开配置窗口,从右侧上方 “PythonInterpreter:” 选项框找到 python.exe 的路径。例如,要将 .ui 文件保存在当前 Project 的路径下,则填写 “$ProjectFileDir$ ”;
2024-09-17 22:06:50
3470
1
原创 线性代数之QR分解和SVD分解
设A是m×n实矩阵,且其n个列向量线性无关,则A有分解A=QR,其中Q是m×n实矩阵,且满足QHTQ=E,R是n阶实非奇异上三角矩阵该分解除去相差一个对角元素的绝对值(模)全等于1的对角矩阵因子外是唯一的.用Schmidt正交化分解方法对矩阵进行QR分解时,所论矩阵必须是列满秩矩阵。还是看上面的式子,再结合第三部分的图,也很容易看出,经过SVD分解以后,要表示原来的大矩阵AA,我们只需要存U,Σ,V三个较小的矩阵的即可。非奇异矩阵的对比:非奇异矩阵(可逆矩阵)行列式不为零,满秩,有唯一逆矩阵和零解。
2024-09-17 16:12:16
2910
原创 深度学习之图像数据集增强(Data Augmentation)
数据增强(Data Augmentation)是一种技术,通过对现有数据进行各种变换和处理来生成新的训练样本,从而增加数据集的多样性和数量。这些变换可以是几何变换、颜色变换、噪声添加等,使模型在训练过程中能够见到更多种类的数据,从而提升模型的泛化能力和鲁棒性。在机器学习和深度学习中,数据的数量和质量对模型的性能至关重要。然而,获取大量标注数据通常既耗时又昂贵。数据增强通过对现有数据进行多种处理,模拟出更多样化 的训练样本,有效解决了数据稀缺的问题。
2024-09-17 15:18:25
3090
原创 C++ 获取文件夹下的全部文件及指定文件(代码)
原因: _findnext()第一个参数”路径句柄”,返回的类型为intptr_t(long long),如果定义为long,在win7中是没有问题,但是在win10中就要改为long long或者intptr_t。vs2017版本可以使用C++17,但也需要设置下项目属性:右击项目 -> 属性 -> 配置属性 -> C/C++ -> 常规 -> 语言 -> 编译器语言,然后将编译器语言改为C++17。对于每个文件,我们输出其文件名。如果使用的是更早的C++标准,可能需要使用其他库或方法来实现相同的功能。
2024-09-13 22:26:29
5213
原创 OpenCV仿射变换和透视变换函数(C++)
透视变换:按照物体的成像投影规律将图像重新投影。常见用例是修正镜头与拍摄目标存在斜角时产生的图像畸变。如果知道目标变换前后的三个像素点坐标之间的关系,即可求出仿射变换矩阵M。旋转变换是仿射变换的一个特殊情况,将此矩阵用于仿射变换函数即可仅作图像旋转。使用getPerspectiveTransform()函数获取变换矩阵。使用warpPerspective()函数应用透视变换。图像的几何变换通常包括拉伸、缩放、扭曲和旋转等操作。注:仿射变换的矩阵M是2×3的矩阵。注:透视变换的矩阵M是3×3的矩阵。
2024-09-09 22:20:10
1374
原创 TensorRT模型量化实践
2. onnx导出为tensort engine时可以采用trtexec(注:命令行需加–int8,需要fp16和int8混合精度时,再添加–fp16),比较简单;trtexec 有提供 --calib=接口进行校正,但需要对中间特征进行cache文件保存,比较麻烦,官方文档也是采用上述方式进行int8量化;1.导出onnx时,显存占用非常大;3.量化过程中发现,即使模型为动态输入,校正数据集使用时也必须与推理时的输入shape[N, C, H, W]完全一致,否则,效果非常非常差,动态模型慎用。
2024-09-01 21:18:09
1855
3
算法工程师-C++和数学基础知识
2023-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人