- 博客(46)
- 收藏
- 关注
原创 计算结构体大小(内存对齐原则)struct、union、class
这篇博客详细的介绍结构体的大小sizeof:union、struct、class。
2022-11-07 21:28:22
2077
1
原创 线程间的同步和互斥
1.进程是资源分配的最小单位,线程是CPU调度的最小单位,即程序执行的最小单位;2.每个进程都有自己独立的地址空间,同一个进程的多个线程共用一个地址空间;3.线程的上下文切换比进程要快;
2022-10-24 16:23:05
1150
1
原创 机器学习和深度学习——归一化处理
(1)归一化后加快了梯度下降求最优解的速度(2)归一化有可能提高精度详解:(1)归一化后加快了梯度下降求最优解的速度\qquada.左图是未进行归一化的等高线,从左图中可以看出两个特征变化区间相差大,其形成的等高线非常尖,此时使用梯度下降法寻找最优解时,很有可能走“之”字型路线,从而导致需要迭代很多次才能收敛;\qquadb.右图,对数据进行归一化处理,此时两个特征的等高线显得平滑,在进行梯度下降能较快的收敛;\qquad因此如果机器学习模型使用梯度下降求最优解时,归一化非常有必要,否则需要花费更多
2022-07-13 10:02:05
1294
2
原创 目标检测(三)——Two-Stage——Faster R-CNN
(1)解决非端到端的问题;(2)解决Selective Search拉低速度的问题;所以整个Faster R-CNN 系统由两个模块组成:第一个模块是提取候选区域的深度卷积网络第二个模块是使用候选区域的Fast R-CNN检测(1)将图像输入到CNN中,生成feature map;(2)RPN(Region Proposal Network,区域候选网络),代替Selective Search,用于生成候选框,将第一步生成的feature map输入到RPN中,接下来进行两个任务,一是分类:用于判断
2022-07-09 10:35:27
421
原创 目标检测(二)——Two-Stage——Fast R-CNN
从上一节说的到R-CNN可以看出:它的计算量很大,结构也分散,主要体现在:需要针对Selective Search方法生成的2000个候选框逐一进行计算、之后的分类和回归也是分开训练计算的。在训练的过程中,提取的特征需要先存储在硬盘上,然后训练SVM分类模型,最后训练bounding box回归模型,测试的过程,也是相类似,特征提取之后,先进行SVM分类,然后进行回归目标的准确位置,整个计算过程需要很大的开销。在R-CNN的目标检测网络提出之后,针对R-CNN 的特征提取网络要求输入图像为固定尺寸以及每个
2022-07-08 14:56:15
710
原创 目标检测——SPP-Net
SPPnet:Spatial Pyramid Pooling in Deep Convolution Networks for Visual Recognition(空间金字塔池化)1、R-CNN这个深度卷积神经网络需要输入固定尺寸的图像,经过Selective Search之后选出的2000个候选框的尺寸必定不同,在传入网络之前,就需要对图像进行截取或者拉伸,这样很大可能改变了图像原来的尺寸,极大影响了检测结果。2、R-CNN中2000个候选框,需要进行2000次的CNN操作,重复的卷积工作,造成资源消
2022-07-08 10:34:31
236
原创 目标检测(一)——Two-Stage——RCNN
因为是第一篇,所以这里记录一点基础:分类、检测、分割的区别:(1)图像分类:只需要指明图像中相应目标所属的类别就可以;(2)目标检测:需要定位到目标所处的位置,用矩形框表示;(3)目标分割:a. 语义分割:需要找到当前目标所占的区域,去除背景区域,其他目标的区域;b. 实例分割:不仅需要区分不同语义的目标,而且对于同一类别的目标也需要划分出不同的实例;下面这张图像就对应了上述的情况(图像来源)接下来都是学习目标检测系列的网络(深度学习)二者的最大区别在于是否包含RPN(候选区域目标推荐)的过程,即
2022-07-07 21:12:41
1642
原创 Yolov5系列(一)——网络可视化工具netron
netron:网络可视化工具,使用这个软件可以清晰的展示网络模型的每一层的输入输出,网络的整体的架构,而且支持不同的网络框架。类似下图:(其他版本可以参考博客)打开上述链接,划到下面 install,选择 windows 下载因为netron对 .pt 的文件没有太好的兼容性,所以需要将文件进行转换,在yolov5 工程中,提供了export.py,可以进行文件转换注意:输入命令时需要注意export.py 和 yolo5s.pt 的路径我是直接在该文件的目录下,所以不需要再写其他的路径
2022-06-29 09:19:43
4115
1
原创 机器学习(八)——KNN
一、KNN定义kkk近邻(k−NearestNeighbor,简称kNNk-Nearest Neighbor,简称kNNk−NearestNeighbor,简称kNN)学习是一种有监督学习方法。kkk近邻:可以用于分类任务中,也可以用于回归中。\qquad在分类任务常采用“投票法”,即选择k个样本中出现最多的类别作为测试样本所属的类别;\qquad在回归任务中采用“平均法”,即将kkk个样本的实际输出的平均值作为测试样本的输出结果。二、KNN工作机制\qquad工作机制:给定测试样本数据集,
2022-05-03 12:06:09
1408
原创 操作系统(C++)——生产者消费者模型
一、C++实现代码#include<iostream>#include<queue>#include<mutex>#include<thread>#include<condition_variable>using namespace std;mutex mymutex; //定义一个互斥量,即可以理解为一把锁 //防止两个线程同时操作一个内存空间condition_variable condition; //定义了一个条
2022-04-27 11:16:51
673
原创 机器学习(七)——集成学习:Boosting系列和Bagging系列
一、集成学习1.基础概念\qquad集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,也被称为多分类器系统、基于委员会的学习等。\qquad集成学习的一般结构是:先产生一组“个体学习器”,再用某种策略将它们结合起来。同质集成,和异质集成同质集成:所有的个体学习器都采用同种学习算法,例如C4.5决策树算法异质集成:个体学习器采用不同的学习算法,例如个体学习器中同时包含决策树和神经网络等。\qquad集成学习通过将多个学习器进行结合,常可以获得比单一学习器
2022-04-24 20:47:12
1546
原创 机器学习(六)——贝叶斯分类器
贝叶斯分类器是一类分类算法的总称,均以贝叶斯定理为理论基础一、预备知识—贝叶斯决策论1.公式\qquad贝叶斯决策论是概率框架下的实施决策的基本方法。对于分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策论考虑如何基于概率和误判损失来选择最优的类别标记。\qquad假设有N种输出类别,表示为 yyy={c1,c2,c3.....cNc_1,c_2,c_3.....c_Nc1,c2,c3.....cN}\qquad λij\lambda_{ij}λij表示为将一个真实属于cj.
2022-04-22 15:00:05
2250
原创 七大排序算法——C++版本
一、算法特性总结表摘抄自文章二、冒泡排序1.基础版本#include<iostream>#include<vector>#include<algorithm>using namespace std;//冒泡排序的基础版本int main() { int num; vector<int> vec; while (cin.peek() != '\n') { cin >> num; vec.push_back(num
2022-04-19 11:00:22
2123
1
原创 设计模式——工厂模式
一、概述工厂模式分为三种形式:简单工厂模式工厂方法模式抽象工厂模式二、简单工厂模式1.定义:简单工厂模式又称为静态工厂方法模式,它属于类创建型模式,在简单工厂模式中,可以根据参数的不同返回不同的实例,简单工厂模式专门定义了一个类来负责创建其他类的实例,被创建的实例通常都是具有共同的父类。2.简单工厂模式的类图3.具体代码实现(1)首先创建一个抽象的产品类;(2)然后根据需要生产的产品,分别创建具体的类别,均继承自抽象产品类;(3)创建工厂:工厂决定创建哪个类的实例。//简
2022-04-15 15:06:46
745
原创 设计模式——单例模式
一、单例模式的定义单例模式:是指在内存中值创建一个类的对象,让所有需要调用的地方都共享这个单例对象单例模式有两种实现方式:饿汉模式:是类创建的时候,就创建好了实例对象懒汉模式:需要的时候再去创建二、饿汉模式实现1.优缺点:优点:因为饿汉模式是提前创建好对象,所以是线程安全的缺点:不管系统需不需要这个创建对象,它都会创建出对象,所以会造成内存空间的浪费。2.代码实现:#include<iostream>using namespace std;//饿汉模式class
2022-04-14 17:23:11
730
原创 机器学习(四)神经网络
一、基本概念神经网络中最基本的成分是神经元模型。在生物神经网络中,每个神经元与其它神经元相连,当它“兴奋”时,就会像相连的神经元发送化学物质,从而改变这个神经元内的电位;如果某种神经元的电位超过了一个“阈值”,那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。从计算机科学的角度,神经网络就是一个包含 许多参数的数学模型,这个模型是若干个函数相互(嵌套)代入而得。二、神经网络结构一般的神经网络的模型如下图所示:每一层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层
2022-04-12 18:03:09
2752
原创 机器学习(三)决策树
一、决策树介绍决策树是一类常见的机器学习的方法。一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶子结点:叶子结点对应于决策结果,其他每个节点对应于一个测试属性;2.每个结点包含的样本集合根据属性测试的结果被划分到子结点中;3.根结点包含样本全集;二、决策树的目的决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。三、决策树学习算法1.ID3决策树学习算法该算法是以信息增益为准则来选择划分属性;该算法用于分类;该算法不支持剪枝操作;2.C4.5
2022-04-10 21:30:10
2271
原创 机器学习(零)基础----分类与回归
一、人工智能(artificial intelligence,AI)、机器学习(machine learning)、深度学习(deep learning)三者的关系其中(1)无监督学习:不需要提前知道数据集的类别标签。(2)半监督学习:是一种介于有监督学习和无监督学习之间的学习算法,半监督学习的特点就是利用极少的有标签的数据和大量的无标签数据进行学习,通过学习得到的经验对无标签的测试数据进行预测。(3)有监督学习:是使用大量有标签的训练数据来建立模型,以预测新的未知标签数据。用来指导模型建立的标
2022-04-10 16:53:44
1216
原创 机器学习(二)线性模型——线性回归、对数几率回归、线性判别分析
一、线性回归线性回归(linear regression:试图学得一个线性模型以尽可能准确地预测实值输出标记。1.最简单的形式:输入属性的数且只有一个,最小二乘法:基于均方差误差最小化来进行模型的求解,在线性回归中,最小二乘法就是试图找到一条直线,使得样本到直线上的欧氏距离之和最小。2.但是更一般的形式:输入的属性有多个求解这个的过程称为“多元线性回归”二、对数几率回归在 一 中讲到使用线性模型进行回归学习,若要进行分类任务,应该怎样做呢?此时需要借助某些函数,将分类的任务的结果与回归得到的
2022-04-10 16:18:11
2182
原创 机器学习(一) 拟合
一、拟合 欠拟合 过拟合1.拟合:根据训练样本中学习出适用于所有潜在样本的“普遍规律”,这样在遇到新样本时做出正确的判别,即具有很好的泛化能力。2.欠拟合是指对训练样本的一般性质没有学好,即无法更好的判别测试样本。3.过拟合当学习器把训练样本学习的很“优秀”,即在训练集上表现优秀,近似完美的预测或者区分出了所有的数据,但是在新的测试样本集却无法正确预测或者区分,缺乏泛化能力。二、解决过拟合和欠拟合的问题1.针对欠拟合问题:欠拟合通常是由于学习能力低下造成的,欠拟合比较容易克服,增大数据量;
2022-04-10 11:12:18
2376
原创 VINS_mono 代码详细理解(一)
一、运行命令二、简介VINS_mono 的代码是基于ROS写的,将slam的各个功能都封装成一个个功能包,相互之间通过发布和订阅的方向进行通信。具体的每个功能包的内容:三、VINS_mono代码整体框架VINS-mono是香港科技大学开源的VIO算法,单目相机+IMUVINS的功能模块分为五个部分,分别是数据预处理、初始化、后端非线性优化、闭环检测、闭环优化。四、feature_tracker 功能包(注:对于img_callback这里没有完全展示,要是需要更具体的可以评论)接
2022-03-06 11:01:37
6982
4
原创 ORB_SLAM2系统代码流程粗讲解(三)
注:本文讲解的是整个系统的运行过程,不涉及具体代码的讲解。均假设系统运行没有重复构建现象ORB_SLAM2系统代码流程粗讲解(一)ORB_SLAM2系统代码流程粗讲解(二)今天这篇文章,讲一下回环检测线程,具体的函数实现在LoopClosing.cc中,找到 Run () 函数。1.首先需要将mbFinished 置为false,表示当前线程正在运行并未结束;2.接着进入主循环,while(1) 表示一直处于运行状态;3.检查闭环检测队列mlpLoopKeyFrameQueue中有没有关键帧,
2022-01-04 21:37:37
349
原创 ORB_SLAM2系统代码流程粗讲解(二)
注:本文讲解的是整个系统的运行过程,不涉及具体代码的讲解。均假设系统运行没有重复构建现象上一篇博客:ORB_SLAM2系统代码流程粗讲解(一)系统有三个线程并行运行,其中追踪线程(tracking)在主函数,即主线程中运行。今天这篇文章讲一下局部建图线程,具体的函数实现在:***LocalMapping.cc***中,找到 ***run()***函数1.首先说明,局部建图所需要的数据是追踪线程传送过来的关键帧队列,所以在进行局部的建图的时候,需要将标志位mbAcceptKeyFrames置为fals
2021-12-24 21:12:27
1816
2
原创 ORB_SLAM1/2/3 系列 区别详解
一、区别ORB_SLAM:只针对的是单目SLAM系统ORB_SLAM2:可以用于单目、双目、RGB_D相机。(并且作者公开的源码中包含ROS版本,可以实时跑自己的数据)ORB_SLAM3:在2的基础上,还可以用于鱼眼相机;增加了视觉+imu的系统(VIO)。二、详情1.ORB_SLAMORB_SLAM:a Versatile and Accurate Monocular SLAM System(ORB_SLAM:一种通用精确的单目SLAM系统)摘要:本文提出了一种基于特征的单目ORB-SLA
2021-12-22 11:41:08
8220
原创 ORB-SLAM2系统代码流程粗讲解(一)
注:本文讲解的是整个系统的运行过程,不涉及具体代码的讲解。均假设系统运行没有重复构建现象需要说明该系统分为三个线程并行进行:追踪线程、局部建图线程、回环检测线程1.从main函数讲起,进行整个系统初始化,包括判断输入传感器的类型,加载词袋模型,初始化三个线程并运行,设置进程间的指针。2.依次遍历每张图像,将图像传入SLAM系统,先判断系统的类型(纯追踪模式还是追踪+建图),接下来根据传入的图像判断相机的位姿。3.每一帧图像进入均需要提取特征点,唯一的区别是当第一帧图像图像进入时,要求提取2倍的特征点
2021-12-18 10:49:45
648
1
原创 ORB-SLAM2 线程之间的调度
ORB_SLAM2 中包含三个并行的线程:tracking线程LocalMapping线程LoopClosing线程首先记录几个标志位:mbStopRequested:外部线程调用,为true,表示外部线程请求停止LocalMapping线程。mbStopped:为true表示可以并终止LocalMapping线程。mbNotStopped:true表示不要停止LocalMapping线程,因为要插入关键帧了,需要和mbStopped结合使用。mbAcceptKeyFrame:true表示
2021-11-11 21:45:36
796
1
原创 Linux系统下g++、make、cmake简单理解,以及makefile、CMakeList.txt
理论上,任何一个C++程序都可以用g++进行编译,但是当程序规模越来越大时,如果仅靠g++命令,则需要输入大量的编译指令,则整个编译过程就会变得异常繁琐。所以对于C++项目的编译执行,工程师们不断更新编译工具,具体的进阶过程如下:1.g++在终端直接输入编译命令,生成可执行的文件,当程序规模很大时,则会很繁琐2.make工具:它需要借助makefile文件,实质上make是根据makefile文件中的内容进行编译和生成可执行文件的。当然makefile文件是需要自己编写的,但是手写makefile
2021-09-14 11:11:44
404
原创 查找--数据结构
查找的相关定义查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表:按照操作可以分为两大种:静态查找表和动态查找表。其中:静态查找表:只作查找操作的查找表。动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。几种查找结构一、顺序表查找:又叫线性查找,从表中第一个开始逐次查找。 最好的情况第一个位置就找到,时间复杂度为O(1) 最坏的情况最
2021-09-03 15:21:59
176
转载 尺度空间与图像金字塔(多分辨率)超级细致
文章目录尺度空间什么是尺度空间(scale space)为什么需要尺度空间高斯核图像金字塔什么是分辨率为什么需要多分辨率多尺度和多分辨率图像金字塔高斯金字塔SIFT参考Why multi-scale? Why should you blur?• Computational efficiency•Coarse-to-fine • Extracting hierarchical structure• First principles of physics of observat
2021-07-23 20:58:28
4127
2
原创 最完整---在ROS用自己电脑的摄像头在运行ORB_SLAM2
默认电脑已经安装好ROS在ROS下运行ORB_SLAM2 主要包括以下几步:一、创建ROS工作空间二、下载usb_cam三、下载ORB_SLAM2四、运行接下来讲解具体的步骤一、创建ROS空间1.创建工作空间:打开终端输入以下命令mkdir catkin_slamcd catkin_slam/mkdir srccd src/catkin_init_workspace如下图所示:catkin_slam文件夹下,存在src2.编译工作空间:编译完成会出现build deve
2021-06-15 17:47:38
5195
18
原创 视觉SLAM第八讲视觉里程计2--- LK光流---代码详细讲解
光流是一种描述像素随时间在图像之间运动的方法:光流法有两个假设:(1)灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的;(2)假设某个窗口内的像素具有相同的运动一、本讲的代码使用了三种方法来追踪图像上的特征点(1)第一种:使用OpenCV中的LK光流;(2)第二种:用高斯牛顿实现光流:单层光流;(3)第三种:用高斯牛顿实现光流:多层光流。其中高斯牛顿法,即最小化灰度误差估计最优的像素偏移。在具体函数实现中(即calculateOpticalFlow),求解这样一个问题:二、代
2021-03-31 20:22:01
1604
7
原创 博途TIA 仿真+HIM显示屏 详细使用步骤 以V15为例
在没有plc实物的情况下,可以使用博途软件实现编程+仿真+上位机显示:主要的步骤首先用编程模块进行编写程序,编写完程序之后就可以进行下载仿真,如果需要HIM显示,则需要建立画面,在画面中将对应的图片进行变量连接;之后下载仿真。一.需要下载以下软件二、使用步骤1.打开软件TIA Portal V15 这个软件–点击创建新项目项目的名称:可以自己创建–路径自己选择存放的位置–设置好之后点击创建-界面如下2.点击项目视图–添加新设备–控制器–选择自己所需要的plc的型号(本例选择s7-1200系
2021-03-25 18:54:44
67501
25
原创 视觉SLAM第七讲视觉里程计--- 2D-2D对极约束求解相机运动---代码详细讲解
整个程序使用OpenCV提供的算法进行求解。//代码执行所需要的头文件#include<iostream>#include<opencv2/core/core.hpp>#include<opencv2/features2d/features2d.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/calib3d/calib3d.hpp>using namespace s
2021-03-24 19:22:58
2327
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人