- 博客(61)
- 资源 (10)
- 收藏
- 关注
原创 重构(4)
一些词汇,创建(create,init,load),销毁(destroy,release,uninit,deinit),动词(get,fetch,load,read,write,find、serach,receive,pull),(set, write,put,push),更新(update,reset,refresh),添加/移除(add,remove,append,insert,delete);启动/停止(start,open,launch, close,stop,finish);
2025-01-22 18:04:26
950
原创 重构(3)get的不同场景的变种
1.直接从对象或者数据结构中得到数据,直接用get。2.通过计算获取的数据,采用calc。3.数据库查找得到的数据。4.从配置文件中加载数据。5.网络请求获得数据。
2025-01-22 15:10:10
84
原创 重构(2)判断型函数和判断型变量的命名
前缀词+名词+动词(is/can/has。+something + verb)前缀词+名词(is/can/has。+something + verb)表示是否含有的状态---has/include/contains;表示是否应该的状态---should/needs;主要是针对返回值是bool类型的变量。表示是否符合的状态--- is;表示是否能够的状态---can;几个判断的词汇,分别是,
2025-01-22 14:59:22
403
原创 arduino通过串口控制产生高低电平
在用Serial.parseInt()、Serial.readstring等函数的时候发现总是有1秒左右的延迟,这两个都是阻塞式函数,为的是让数据流传输过来完。如果用Serial.read的时候read和read之间也要有时间间隔,防止数据流还没有流过来,导致read出来的是乱码。经过测试发现可以满足要求,写入串口再读出来,1000次耗时在0.7秒左右,平均一次耗时在0.7毫秒,整体上来说满足实际需求。delayMicroseconds(200)的时候,1000次耗时0.7秒。1)延迟要有一定时间。
2024-10-26 19:45:25
377
原创 Pvnet(一)结构
cur_hyp_pts就是根据idx中的i*2,2*i+1索引,对应的coords和direct,也就是每一个点就有一个点位置和一个方向,计算交叉点就得到了cur_hpy_pts。或者可以理解为该像素点点和该像素点对应的方向 是否是 该特征点的内点。在这里面net就是Resnet18_8s,使用Resnet18_8s提取出来了seg_pred, vertex_pred,其中seg_pred表示分割出来的像素, vertex_pred表示每个分割出来的像素点的方向(理想情况下为指向真值特征/像素点的方向)。
2024-09-22 11:57:04
824
1
原创 PointNet2(一)分类
选择该最远点的索引作为第1次迭代(注意从第0次迭代开始),然后还是与每一个点进行比较,计算距离,如果距离小于distance中的距离,则让该距离小的值填充distance中对应位置,最后,在选择该轮中distance中的最大值所对应的索引作为 farthest。看这一行参数,表示,最远点采样采集512个点作为中心点,开始聚组,球半径分别为,0.1,0.2,0.3,在每一个半径中选择16个点,32个点和128个点。最终每一个组中,每一个点,都采样到了相同个数(nsample个)的点,
2024-09-15 23:59:14
1379
原创 PVN3D(一)代码框架
2.N*1792特征 投入到三个网络中,一个是特征点偏移探测网络,一个是实例分割网络,一个是中心偏移网络。后两个网络特征经过投票聚类,得到了实例级的点云目标,然后结合关键点投票,得到关键点位置;按照论文图上的流程,特征提取,实例分割、特征提取、偏移提取,loss计算、meanshift,RT计算等找到了位置,整体上构成了整个训练和RT计算的流程。深度图的特征,通过pointnet++提取,然后把两个特征连接起来。mesh_kps是模型上提取的3D特征点,是真值点。2.2 深度学习框架。
2024-09-04 21:46:18
433
原创 halcon(二)控制语句
有for-endfor,while, repeat, assign, assign_at, insert, :=, if-elseif-else-endif,try-catch-throw-end,注释等,涵盖了目前大部分控制语句。1.学习了halcon相关控制语句的代码。
2024-08-23 23:02:19
207
原创 立体相机镜面重建(二)双目立体镜面重建
该点与 步长点、右相机投影中心构成了一个反射光路,就可以根据这三个点计算在右相机下的该点在左相机中的法线了。4.把该按步长计算出来的三维点,根据左右相机的变换关系,变换到右相机坐标系下,然后投影到右相机中,得到带畸变的图像点,使用该图像点内插出来相位值,并对应到屏幕上该点的屏幕坐标。3.按照1中所计算的方向线,以一定的步长计算三维点,由于该点在左相机坐标系下,可以根据该点的方向、屏幕坐标在左相机坐标系下的坐标点 计算该点的法向了。1.用标定板的格网点 在左相机的像素点 计算出来的镜面点。
2024-08-12 22:55:40
409
原创 立体相机镜面重建(一)镜面标定
1.相机标定的时候,标定板的精度一定要高一点,如果不高,我发现在标定过程中,如果相机标定误差是镜面标定误差的3倍的时候,优化出来的镜子大小和相机到镜子之间的距离也会发现严重的失真,发生等比例缩放【笑哭】,一直找不到问题,后来发现是这个问题。(4)使用相机到虚像的旋转和平移矩阵,以及屏幕到相机的旋转、平移矩阵,计算剩下n张图像的镜面距离和法向。(5)全局优化,优化(屏幕到相机的旋转和平移矩阵,每一个图像下的镜子法向和相机中心到镜子的距离)(1)使用购买的棋盘格或者圆点标定板对单目相机标定,或者双目相机标定。
2024-08-10 22:28:01
557
原创 经典网络(一)resnet
因此需要 用conv(in_channel,out_channel, kernel_size =1, padding =0, stride =2)来改变通道数和图像长宽。#nn.Linear(512,numClass) 512*10,最后得到10类,选择最大的一个数字作为目标判别出来的类。#每一个layer有两层迭代,第一层迭代具有降采样和通道变换,第二层的时候,没有降采样,也没有通道数量的改变。# 如果stride=1,则长和宽是不变的,输出的长和宽是多大,输出的就是多大。
2024-07-22 23:33:58
478
原创 pytorch学习(十七)pycharm安装requirement.txt中的配置
最后,如果在pip install过程中,出现了某个安装包的版本无法找到,则查看其报错中所提供的可以找到的版本,选择一个版本号比较邻近的版本进行下载。在github上下载别人的代码后,一般和自己本地的环境是不一致的,这时候就需要配准环境。1)在github上下载该代码,使用pycharm打开该代码文件。python xx.py来执行一下看看会不会报什么错误。3.如果出现错误,无法执行,则换源。2.配置requirement。2)为代码创建一个虚拟环境。
2024-07-21 20:32:11
1118
1
原创 pytorch学习(十六)conda和pytorch的安装
在安装了cuda驱动后,用everything查找到nvidia-smi,exe这个文件所在的目录,cd到包含nvidia-smi.exe的目录下,如图,查看cuda version发现版本是10.2下载pytorch的时候就下载10.2的就可以了。conda create -n (env-name虚拟环境名子) python=pythonxx(比如python3.7)可以看到下面这个界面,如果没有与cuda version版本一致的版本的pytorch,就需要点击下图中的安装以前的版本。
2024-07-21 20:21:25
622
原创 pytorch学习(十五)二维卷积和转置卷积
卷积爆喊了stride步长,padding是否加边,groups是否完全计算,kernel_size卷积核的大小,等尺寸,不同的尺寸组合,可以让图像在卷积后保持原来的形状,也可以让图像的通道数增加。具体参数的意义可以跟着代码来看,其中conv2d在本博客中分析的相对详细,转置卷积的padding没有测试。话有一个是转置卷积,当kernel_size核stride设置为一致的时候,可以扩大倍数的升采样。
2024-07-21 19:48:28
191
原创 pytorch学习(十四)层结构容器
本篇文章列举了nn.Sequential,nn.ModuleList,nn.ModuleDict三个容器的使用方法,并且还学习了一种使用类封装模块的方法。通过本篇博客的学习,你将学习到三个容器和使用类构建容易的方法。1.nn.Sequential第一种方法直接列出每一层结构,第二种方法通过add_module的方式堆叠层,第三种方法使用字典的方式对层进行组织,第四种方法通过LIST列表的方式先堆叠层,然后再用sequential来骄傲如每一层,*表示拆散成一个一个的。import torch
2024-07-21 18:49:09
341
原创 pytorch学习(十三)torch维度变换
包含了flatten、view reshape transpose permute squeeze unsqueeze cat stack;在琢磨一遍之后就比较好理解了。
2024-07-20 23:52:27
502
原创 pytorch学习(十二)c++调用minist训练的onnx模型
在实际使用过程中,使用python速度不够快,并且不太好嵌入到c++程序中,因此可以把pytorch训练的模型转成onnx模型,然后使用opencv进行调用。所需要用到的库有:opencv。
2024-07-20 22:32:36
606
原创 pytorch学习(十一)checkpoint
当训练一个大模型数据的时候,中途断电就可以造成已经训练几天或者几个小时的工作白做了,再此训练的时候需要从epoch=0开始训练,因此中间要不断保存(epoch,net,optimizer,scheduler)等几个内容,这样才能在发生意外之后快速恢复工作。min_loss_val 定义成全局的变量之后,应该在用到的函数中,使用global min_loss_val再次定义,否则会报错误。通过本博客的学习,你将学会最优模型保存和模型自动加载的方法。
2024-07-20 21:00:33
500
原创 pytorch学习(十)优化函数
优化函数主要有,SGD, Adam,RMSProp这三种,并且有lr学习率,momentum动量,betas等参数需要设置。3.大家copy代码后,可以调一调batch_size,lr,momentum,betas等参数。通过测试,发现每一次的结果都不一样,每一次结果的显示图也不一样。因为shuffle=True。代码参考《python深度学习-基于pytorch》,改了一下网络结构,其他没变化。通过这篇文章,可以学到pytorch中的优化函数的使用。
2024-07-20 19:39:05
228
原创 pytorch学习(八)Dataset加载分类数据集
item就是所要取数据的索引,这个函数主要是返回一个训练数据(比如一个图像),和一个结果数据,比如(该图像的分类结果是一个ant),因此用到刚os.listdir所列出的文件名字,用os.path.join加入路径,得到图像的绝对路径,用PIL导入图像,并给label赋值,返回图像和;一直报错,查找原因,发现是该数据集中的图像存在两个问题,第一个是大小不一,第二个貌似通道个数也不一致。可以直接len(os.listdir所列出的文件名的数组),就可以得到数据集的长度。4)第三个要实现的就是数据集的长度。
2024-07-19 22:52:46
647
原创 pytorch学习(七)torchvision.datasets的使用
网络上已经有公开的数据集,并且这些数据集被整合到了torchvision.datasets中,使用自带的函数可以直接下载。结果为 torch.Size([3, 32, 32])
2024-07-19 21:10:59
318
原创 pytorch学习(六)transforms使用
中心裁剪、数据标准化、缩放、裁剪、旋转、仿射、反转、填充、噪声添加、灰度变换、线性变换、亮度饱和度以及对比度变换等。1.Transforms可以对训练图像进行预处理,以提高模型的稳定性,提高泛化能力。
2024-07-19 20:43:51
266
原创 pytorch学习(五)tensorboard使用
2.2图像实现的方法是add_image,第一个仍然是给显示框起个名字,第二个是图像,可以按住ctrl, 把光标放在add_image上,可以看到显示类型,有HWC,CHW等,如果是HWC,则需要使用dataformats指明格式。0,1,2就表示的是第0,1,2次。意思就是第0次显示img1,第1次显示img,第二次显示img1。2.1标量实现的方法是add_scalar,第一个参数是给显示框起个名称,第二个参数是一个标量(也就是一个数值),第三个参数是第几次。然后安装tensorboard。
2024-07-18 23:09:05
367
原创 pytorch学习(三)cpu-gpu训练
在训练模型的时候,不可避免的要使用GPU进行加速,但是我们一般加载或者创建生成的数据都是处于CPU上,怎么把数据加载到GPU上呢?初次学习需要注意的是 :直接使用x.to(device)是不能把x数据加载到GPU上,必须使用x=x.to(device)1.首先看变量的CPU和GPU转换。2.训练过程中如何转换呢?主要是数据和模型的转换。
2024-07-17 23:14:53
336
原创 pytorch学习(四)绘制loss和correct曲线
这一次学习的时候静态绘制loss和correct曲线,也就是在模型训练完成后,对统计的数据进行绘制。以minist数据训练为例子。
2024-07-17 23:13:27
589
原创 ubuntu18.04上遇到的一些bug修复
在安装完nvidia驱动之后,重启屏幕一直处在黑屏状态,然后就用上一篇博客中的方法在reboot中卸载了nvidia,可以进入桌面了,在使用pcl库做一些算法的时候,编译过程中遇到了这个问题。然后把libGL.so拷贝到/usr/lib/x86_64-linux-gnu中。使用这一行代码找到所有libGL.so库文件,然后。编译pcl程序,成功。
2024-07-15 15:48:48
454
原创 ubuntu18.04安装显卡驱动后无法进入桌面的解决办法
reboot相当于是重启,重启后选择ubuntu, 不用选高级模式。然后就进入界面,可以正常操作了。1.第一步 进 安开机键进入 1 开机进入 选项界面,选择高级模式(ubuntu 高级选项)2.第二步 进去以后选择一个括号里面带recovery mode的选项,数字选最高最大的。我没有尝试完美恢复的方法,只尝试了卸载nvidia显卡的方法。3.然后弹出一个框,按上下键选择root 点击enter键。4.进入到了一个命令行中,按回车进入到自己的用户名下。5.输入命令卸载显卡驱动。
2024-07-13 16:54:08
1149
原创 ubuntu 上vscode +cmake的debug调试配置方法
ubuntu vscode c++ 引用了PCL库ceres库,但是不用配置库的 调试方法
2024-07-10 14:10:40
663
原创 平面法向的角度表示以及坐标系变换
f为在当前帧坐标系下的平面参数(nx,ny,nz,d). f'为在世界坐标系下的平面参数,T表示的是当前帧在世界坐标系下的位姿。经过这个变换就可以把当前帧中平面参数变换到世界坐标系下。1.根据法线计算法线的垂直角sint和法线在水平投影与x轴的夹角phi。2.根据角度计算法线。
2024-07-08 15:52:33
311
原创 自组装mid360便捷化bag包采集设备
找到 ws_livox/src/livox_ros_driver2/launch_ROS1中的 msg_MID360.launch文件,设置rosbag_enable为true,就可以同时启动数据采集和包录制了。背着主机+电池,屏幕固定在mid360的支架上,qt程序开机自启动,启动后,点击launch开始,就可以开始采集数据了,然后手指点击关闭触屏中的终端,一个包包就录制完毕了。采集mid360数据的过程中,发现了头疼的问题,得一手拿着电脑,一手拿着mid360来采集,实在是累胳膊。
2024-06-28 14:19:38
1392
6
原创 mid360配置lio-sam、point-lio和faster-lio(faster-lio未敢配置)
由于要把gcc升级到版本9,害怕升级后原有的代码会出现错误,因此暂时这个先不做实验了。也先不安装和配置了。下载能支持mid360的lio-sam版本到 ws_livox/src中,直接编译,就可以成功。最终可以重建出来了三维场景,但是在重建过程中,一卡一卡的,不知道是啥问题。以及播之前我才记得Mid360的包,就可以到结果。一、使用mid360配置lio-sam。下载并编译point-lio。三、faster-lio。二、point-lio。
2024-06-26 15:37:29
2189
8
CloudCompare_v2.6.1.beta_bin_x86
2015-01-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人