- 博客(313)
- 资源 (14)
- 收藏
- 关注
原创 c语言链表(插入,删除,更改,查找)
初始化链表int main( ) { int i; struct link // 定义链表的类型 { int data; // 数据区 struct link *next; // 地址区用来存放下一个元素的地址 }; struct link *p = (struct link *) malloc(sizeof(struct link)); // 创建一个头结点 就是指向链表的第一个元素 struct link *te
2021-05-12 23:31:04 4791 16
原创 pandas数据处理库使用
Pandas(Panel Data的缩写)是一个开源的Python数据处理库,它提供了高性能、易用的数据结构和数据分析工具,用于处理和分析结构化数据。Pandas的核心数据结构是DataFrame和Series,它们使数据的清理、转换、分析和可视化变得非常便捷。
2024-09-04 21:43:50 493
原创 C++常见面试题(面试中总结)
不同继承对象,对同一个消息做出不同的响应,多态三要素:1、有继承关系,2、子类重写父类的virtual3、父类指针或者引用指向子类对象对一个文件描述符来说,是一个状态,当不满足读写条件的时候会进行堵塞,非阻塞表示对文件描述符进行读写操作的时候,当不满足条件的时候,不会阻塞, 会立即返回。STL 是 C++ 标准模板库的缩写。它是 C++ 标准库的一部分,提供了一组通用的模板类和函数,实现了常用的数据结构和算法,以及一些函数对象和迭代器概念,使得 C++ 程序员可以更加高效地进行编程。
2024-08-27 16:37:41 2912
原创 Djangorestframework+Vue搭建前后端分离项目
打开命令行工具,出现base就表示安装成功了,表示当前的虚拟环境名。在setting中加入rest_framework。1、进入手动配置项目(空格选择和取消回车表示确定)创建虚拟环境的python3.8版本的虚拟环境。// 注册ant-design。node是一个服务端语言。// 配置echarts。安装anaconda。2、选择vue3.x。
2024-08-22 16:09:07 335
原创 Docker快速入门
Docker 是一个应用打包、分发、部署的工具你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,普通的虚拟机则是一个完整而庞大的系统,包含了所有文件系统和软件。Docker 的主要优势包括:一致性和可移植性:应用程序可在任何支持 Docker 的环境中运行。轻量和高性能:容器化应用程序更加轻量,资源利用率高。快速部署和扩展:通过编排工具可实现自动化部署和弹性扩展。安全隔离:容器化应用程序彼此之间以及与宿主机之间实现了良好的隔离。
2024-08-14 21:12:10 608
原创 YOLOv1-v5总结
两阶段模型和单阶段模型单阶段:不提取候选框,直接讲全图喂到算法里面,算法直接输出目标检测结果。两阶段:先从图像提取若干候选框,在逐一对候选框分类甄别,输出结果。1.3、后处理阶段1.6、yolov1网络由于YOLOV1的框架设计,该网络存在以下缺点:每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果较差。原始图片只划分为7x7的网格,当两个物体靠的很近时,效果比较差。最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。对于图片
2024-08-03 23:41:18 382
原创 卷积神经网络基础篇
特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。卷积层的作用是对输入数据进行卷积操作,也可以理解为滤波过程,一个卷积核就是一个窗口滤波器,在网络训练过程中,使用自定义大小的卷积核作为一个滑动窗口对输入数据进行卷积。
2024-07-07 22:33:07 826
原创 CUDA编程基础
参考链接GPU 意为图形处理器,也常被称为显卡,GPU最早主要是进行图形处理的。如今深度学习大火,GPU高效的并行计算能力充分被发掘,GPU在AI应用上大放异彩。GPU拥有更多的运算核心,其特别适合数据并行的计算密集型任务,如大型矩阵运算,与GPU对应的一个概念是CPU,但CPU的运算核心较少,但是其可以实现复杂的逻辑运算,因此其适合控制密集型任务,CPU更擅长数据缓存和流程控制。1、GPU不能单独进行工作,GPU相当于CPU的协处理器,由CPU进行调度。
2024-07-05 20:32:07 1199
原创 yolov3 详解
通过大量图片去训练这个模型,通过反向传播的方法,神经网络的到一个结果,将其和真实的结果进行比较误差计算(损失函数),我们的目标就是将损失函数降到最低,通过修改卷积核的参数和全连接每一层的权重来进行微调,使得损失函数最小。σ:激活函数,论文作者用的是sigmoid函数,[0,1]之间概率,之所以用sigmoid取代之前版本的softmax,原因是softmax会扩大最大类别概率值而抑制其他类别概率值 ,图解如下。h2是卷积之后的高度,h1是原图像高度,f卷积核高度,p是填充多少,s是卷积核步长。
2024-06-12 22:49:16 993
原创 C++侯捷
可以给类中函数和成员变量前面添加static关键字,让他们变成静态的,他不属于对象,而是属于类本身,静态函数只能处理静态的数据,不能处理其他数据。红色部分用来记录,开辟内存数,因为开辟内存必须要是16的倍数,所以最后3位都是0,所以利用最后一位来做记录1是给出,0是销毁。构造和析构的顺序,编译器调用的是默认的构造函数,如果满足不了,则需要自己在初始化列表中写需要调用的构造函数。这种写法也是非常流行,左边是对外提供的接口,右边是类的具体实现功能,左边类通过类指针去访问具体功能。2、赋值(在大括号里面赋值)
2024-05-21 10:12:11 400
原创 Pytorch学习
它的目标是通过迭代的方式找到一个函数的局部最优解或全局最优解,梯度就是导数,梯度下降法就是一种通过求目标函数的导数来寻找目标函数最小化的方法。Residual指的是残差(residual)连接或残差块(residual block),它是一种用于构建深层神经网络的技术,旨在解决梯度消失和网络退化的问题。反向传播算法的核心思想是根据损失函数的梯度,将误差从网络的输出层向输入层进行反向传播,然后利用梯度信息来调整网络参数,使得网络能够逐渐优化和学习任务中的模式和特征。这有助于减少计算量,并引入非线性变换。
2024-05-09 11:38:23 686
原创 YOLOv1原理解读
参考文章参考文章yolov1的核心思想是将目标检测问题转化成了回归问题,将输入的图像转化成ss个网格(grid cell),每个网格负责预测B个候选框(bounding box),每个候选框包含5个参数(x,y,w,h,confience置信度),为了得到候选框的类别, 使用confience类别概率相乘,可以得到每个边界框属于每个类别的置信度得分。yolov1算法优点。
2024-04-25 15:36:54 744
原创 YOLOv8 关键点检测模型训练部署
optimizer 梯度下降优化器,默认’SGD’,备选:[‘SGD’, ‘Adam’, ‘AdamW’, ‘RMSProp’]device 计算设备(device=0 或 device=0,1,2,3 或 device=cpu)kobj 关键点置信度损失函数keypoint_loss权重,默认2.0(只在关键点检测训练时用到)pose 关键点定位损失函数pose_loss权重,默认12.0(只在关键点检测训练时用到)close_mosaic 是否关闭马赛克图像扩增,默认为0,也就是开启马赛克图像扩增。
2024-04-23 13:55:54 1510
原创 损失函数-交叉熵 梯度下降
参考梯度下降法在机器学习中常常用来优化损失函数,是一个非常重要的工具。说白了,就是在高中学习过的「极值」的概念,那么什么是极值呢?用非常形象的方式来说极值点,梯度下降法的作用就是寻找一个 「极小值点」,从而让函数的值尽可能地小。相信你也发现了,这么多个极值点,那么梯度下降法找到的是哪一个点呢?关于这个问题就要看运气了,算法的最开始会 「随机」 寻找一个位置然后开始搜索「局部」的最优解,如果运气好的话能够寻找到一个最小值的极值点,运气不好或许找到的就不是最小值的那个极小值点了。
2024-04-10 16:05:06 1270
原创 线性、逻辑回归算法学习
总结:MSE计算简单,RMSE和MAE保持了和样本同样的量纲,MSE和MAE适用误差相对明显的时候,大的误差就会有比较大的权重,RMSE针对误差不是很明显的时候,MAE相比MSE更能凸显异常值,在回归模型中损失函数一般使用MAE、MSE、RMSE,性能评估指标一般使用R^2。
2024-04-08 15:22:53 773
原创 机器学习KNN最邻近分类算法
KNN (K-Nearest Neighbor) 最邻近分类算法,其核心思想“近朱者赤,近墨者黑”,由你的邻居来推断你的类别。图中绿色圆归为哪一类?1、如果k=3,绿色圆归为红色三角形2、如果k=5,绿色圆归为蓝色正方形参考文章knn算法实现原理:为判断未知样本数据的类别,以所有已知样本数据作为参照物,计算未知样本数据与所有已知样本数据的距离,从中选取k个与已知样本距离最近的k个已知样本数据,根据少数服从多数投票法则,将未知样本与K个最邻近样本中所属类别占比较多的归为一类。
2024-04-02 13:54:38 2325
原创 Python Numpy Matplotlib使用
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
2024-04-02 01:08:52 347
原创 机器学习理论知识补充
用一个例子来解释什么是线性回归比较容易理解假设你想在商场开一家店,想提前预测一下开这家店会不会赚钱,就需要计算成本和收入,成本可以很轻松计算出来(房租+人工+设备),但是收入怎么计算呢。这个时候正好你有一份同类型店的数据,是日均人流量和日均收入的数据,画成散点图的形式可以发现,每增加一定人流量,收入也是成比例增加的,此时我们想到了线性回归来预测我们的收入,
2024-03-29 14:07:05 1070
原创 opencv 傅里叶变换(低通滤波 + 高通滤波)
因此,当您计算两个数组的卷积或执行数组的频谱分析时,通常有必要在输入数据中填充零,以获得比原始数组转换速度快得多的更大的数组。)的数组处理速度最快。但是,数组的大小是2、3和5的乘积(例如,300 = 55322)的处理效率也很高。2、从频域角度分析:不在是以时间为参照物了,而是这个事情的频率,1分钟放1块冰糖,2分钟放3粒红豆,3分钟放2粒绿豆,4分钟放4块西红柿,5分钟放1杯水。1、从时域分析:就是六点零一放了1块冰糖,3颗红豆,2颗绿豆,4块西红柿,1杯纯净水,六点零二放了1块冰糖。
2024-03-20 00:16:26 1099 12
原创 c++ opecv项目实战
操作流程:1、提取模板的每个数字读取图片->转换为灰度图像->二值化图像(大于10取0,小于取255)->轮廓检测->绘制轮廓->对所有轮廓进行排序->提取模板所有轮廓每个数字2、读取信用卡->转换为灰度图像->(顶帽操作、sobel算子操作、闭操作、二值化、二次膨胀+腐蚀轮廓检测、绘制轮廓)
2024-03-05 11:35:34 1091
原创 C++ opencv 学习
如果norm_type为其他类型,则为归一化要乘的系数。函数原型,归一化类型,常见的有NORM_L1, NORM_L2, NORM_INF, NORM_MINMAX,不同的norm计算方式不一样。原理:取卷积核的中位数,作为卷积核的结果,当卷积核在图像上进行移动,获取到的数之后进行排序,取中位数作为卷积核的结果。边缘处的二阶导数=0,我们可以利用这一特征去寻找图像的边缘,注意:二阶导数为0的位子也可能是无意义的位置(噪声)h2是卷积之后的高度,h1是原图像高度,f卷积核高度,p是填充多少,s是卷积核步长。
2024-03-03 22:01:11 997
原创 ubuntu18.04 TensorRT 部署 yolov5-7.0推理
说明:推理流程来源官方文档:https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5。不拷贝到yolov5目录下直接在tensorrx目录下执行就会报错。下载yolov5对应版本的包。
2024-01-11 18:33:17 685 1
原创 踩坑RV1106板端部署rknn模型
按照官方的流程可以跑通,他自己提供的yolov5s.rknn(640*640)的模型,但是跑自己的模型的时候加载就会出错E RKNN: failed to decode config data!这个文件就是源码里面埋了很大一个坑,取反了,模型输入要求是NHWC,但是他将h取到w上面了,所以出现错乱,为什么官方自己的模型没问题推理是正常的,因为官方的是640*640,高宽尺寸是一致的,所以没有出现这个bug。如果直接拿自己的模型不修改代码,直接推理,会出现这种报错,就是类别没有对上。修改之后再次验证正常了。
2023-12-28 18:35:00 3774 17
原创 ubuntu18.04 安装yolov5环境及推理环境
去到下载的文件夹内,执行命令:bash Anaconda3-2023.09-0-Linux-x86_64.sh。至此CUDN + cuDNN安装完成,可以执行相关训练文件查看是否有gpu信息输出,或监控一下gpu状态。tensorRT官网网址(GA表示正式发布稳定版本、EA抢先版)查看tensorRT python api 版本。yolov5-pytorch推理速度。tensort推理(384*640)查看是否安装NVIDIA显卡。Torchhub模型预测使用。
2023-12-16 17:54:15 1742
原创 Lua与C++交互
1、lua和c++交互机制是基于一个虚拟栈,C++和lua之间的所有数据交互都通过这个虚拟栈来完成,无论何时C++想从lua中调用一个值,被请求的值将会被压入栈,C++想要传递一个值给Lua,首选将整个值压栈,然后就可以在Lua中调用。编译命令: g++ main.cpp -o main -llua -ldl。编译指令:g++ test.cpp -o test -llua -ldl。编译指令:g++ test.cpp -o test -llua -ldl。2、将脚本中的my_pow函数,压入到栈顶。
2023-10-24 15:53:10 1611 1
原创 Lua快速入门教程
以上实例中,我们定义了一个名为 foo 的函数作为协同程序。在函数中,我们使用 coroutine.yield 暂停了协同程序的执行,并返回了一个值。在主程序中,我们使用 coroutine.create 创建了一个协同程序对象,并使用 coroutine.resume 启动了它的执行。在第一次调用 coroutine.resume 后,协同程序执行到 coroutine.yield 处暂停,并将值返回给主程序。然后,我们再次调用 coroutine.resume,并传入一个值作为协同程序恢复执行时的参
2023-10-19 18:01:30 3752 1
原创 Linux 原子操作CAS与锁实现
该函数并不检查当前是否有线程正在使用该 TSD,也不会调用清理函数(destructor function),而只是将 TSD 释放以供下一次调用 pthread_key_create() 使用。该函数从 TSD 池中分配一项,将其地址值赋给 key 供以后访问使用,第2个参数,是指定销毁函数,可以设置为NULL,设置为NULL的情况下,系统使用默认的销毁函数对数据进行销毁,不为空的时候,当线程退出时(pthread_exit()),将key对应的数据调出来,去释放。一键多值依靠的一个结构体数组,即。
2023-10-17 14:58:10 1210 3
原创 Redis的C客户端(hiredis库)使用
Hiredis是一个Redis的C客户端库函数,基本实现了Redis的协议的最小集。这里对hiredis的api作基本的介绍以及应用,主要参考hiredis的README文件以及相关源码。
2023-10-09 17:45:58 1485 1
原创 基础组件(线程池、内存池、异步请求池、Mysql连接池)
代码解读总结2、异步请求池同步向DNS服务器发送请求异步发送请求3、内存池4、mysql连接池4.1、什么是数据库连接池4.2、 连接池和线程池的关系头文件DBPool.hcpp文件4.3、另外版本mysql连接池1、锁、条件变量、信号量封装2、头文件sql_connection_pool.h3、cpp文件4.4、mysql连接重连机制1、设置启用(当发现连接断开时的)自动重连my_bool reconnect = true;mysql_options(m_m
2023-09-21 17:17:12 284
原创 yolov5 v7.0自动标注
在学习深度学习的时候有一个非常头疼的事情就是标注,特别浪费时间和费眼睛,最近在网上发现博主开源了自动标注的程序,原理是,通过训练好的模型,对图像进行推理,通过推理出来的信息写入到xml中。可能会有误差,所以需要检查调整一下错误的标注,但是大大提升了效率。
2023-09-15 15:37:29 697 3
原创 使用Cmake编译项目从入门到精通
当前环境创建5个cpp文件分别是加减乘除函数,和main函数,最简单的方式是g++ *.cpp -o app 这种方式进行编译生成可执行程序,现在我们通过cmake来进这个项目进行编译在软件发布之前很多地方都使用了调试信息,但是为了提高效率,在软件发布的时候要去掉这些调试信息,可以通过自定义宏来解决# 添加自定义宏DEBUG add_definitions(- DDEBUG)int main()#endifreturn 0;
2023-09-07 15:49:30 1081
原创 netmap安装使用及用户协议栈实现
所谓协议栈,栈是先进后出,比如upd协议,在发送端掉用sendto之后,我们先将用户数据起那么加上upd协议头,然后经过网络层,加上ip协议头,然后经过数据链路层,加上以太网帧头,经过网卡将数字信号转换成物理信号发送出去,对端网卡接收到光电信号进行转换成数字信号之后,然后进行层层拆包,最终拿到我们应用层发送的数据,这个过程和栈一样先进后出,协议族,因为有udp、tcp、icmp、ip这些协议形成了一个家,所以也叫协议族。以太网协议:两个地址皆为6字节的mac地址,后面2字节的类型区分是什么协议。
2023-08-31 00:25:18 810
原创 Tensorflow调用训练好的yolov5模型进行推理
Onnx(Open Neural Network Exchange)是一种开放的深度学习模型交换格式,用于在不同的深度学习框架之间共享模型。它提供了一个中间格式,可以将模型从一个框架转换为另一个框架。Tensorflow是一个广泛使用的深度学习框架,提供了强大的模型构建和训练工具。Tensorflow模型通常以.pb文件格式保存,它包含了模型的结构和参数。
2023-08-29 11:30:31 1722
原创 yolov5 V7.0版本 使用Pascal voc 2012 数据集训练
在models目录下新建一个yolov5s-voc.yaml文件,内容如下,只是将yolov5s.yaml第一行nc:80修改成了nc:20,其他不变。通过目录结构可以看出,将刚才下载好的数据集解压在了data目录下的VOC目录里面,然后在VOC目录下创建一个main.py进行训练数据的转换。保存了分割后的标签图(2913张png图片),标注出了每一个像素属于哪一个具体的物体。第67行到77行:此部分应该为将数据集拆分为测试集和验证集的源文件,需要与42到43行的文件名对应。1、nvidia安装驱动安装。
2023-08-23 14:54:04 1013
原创 TensorFlow2.1 模型训练使用
数据集下载地址:https://www.kaggle.com/datasets/rmisra/news-headlines-dataset-for-sarcasm-detection。很明显是一个线性问题,y=2x-1,下面我们通过tensorflow来解决这个问题,输入当x=10的时候求y的值?通过卷积神经网络对FAshion MNIST数据集进行训练,得出的准确率比神经网络的更准确,当时也更耗时。26,64是过滤器,经过第一次卷积就变成64张图片了,(3。3,最后会去掉两个像素,所以是26。
2023-08-17 17:50:00 724
原创 实现UDP可靠性传输(KCP介绍使用)
TCP协议是基于IP协议,面向连接,可靠基于字节流的传输层协议1、基于IP协议:TCP协议是基于IP协议之上传输的,TCP协议报文中的源端口+IP协议报文中的源地址+TCP协议报文中的目标端口+IP协议报文中的目标地址,组合起来唯一确定一条TCP连接。2、面向连接:与UDP不同,TCP在传输数据之前,需要进行三次握手,建立一条TCP连接,然后在进行数据传输,释放需要进行四次挥手。
2023-08-09 00:01:42 1302 2
原创 Windows 安装Tensorflow2.1、Pycharm开发环境
如果出现cudart64_101.dll找不到去官网进行下载一个放到C:\Windows\System32目录下。创建成功之后,输入以下代码进行验证,第一行时获取版本号,第二行时获取当前是否支持GPU,后面的计算两个变量之和。官网网址:https://www.dll-files.com/cudart64_101.dll.html。打开pycharm创建项目,选择刚才通过anaconda创建的虚拟环境进行开发。打开命令行工具,出现base就表示安装成功了,表示当前的虚拟环境名。在刚才的命令行中进行操作。
2023-08-04 11:50:20 897
原创 Qt 中操作xml文件和JSON字符串
XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而非显示数据XML 标签没有被预定义。您需要自行定义标签。XML 被设计为具有自我描述性。XML 是 W3C 的推荐标准JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
2023-07-31 15:44:26 892
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人