自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 资源 (3)
  • 收藏
  • 关注

原创 ncnn源码阅读(五)----算子注册机制

在使用时,将算子的对象指针转为父类的指针进行调用,这个地方使用的是多态的特性。从上面可以看出,只要我们将每个算子都对上述的结构体赋值即可,单以往对结构的赋值都是在代码中实现的,也就是在运行期才会赋值成功。通过上述的代码,可以实现通过一个头文件,对结构体的数组进行赋值,并通过sizeof得到数组的长度。然后根据每个算子中都存在上述的函数,那可以将每个算子的名字和对应算子中的函数的函数指针关联起来。在ncnn就是通过头文件的方式来初始化结构体数组,而头文件,则是在编译期生成,不是提前添加好的。

2023-08-02 14:49:03 317

原创 ncnn源码阅读(四)----模型推理过程

为了减少计算量,并不需要推理完成所有的网络,只要计算到当前需要的blob的那一层即可,所以在前向计算的时候,需要知道网络中目标层的索引,以及运行的模式。在Extractor类中的blob_mats是这个类共享的,而Net类中的blob是数据节点。blob_mats中存储的是每个数据节点的具体数值,与Net类中的blob依次对应。上述分支中表达的意思是:根据blob名字得到索引,然后根据索引在blob_mats获取的数据是无效数据,所以需要进行网络的前向计算得到当前blob数据节点的具体数据。

2023-08-01 15:34:08 271

原创 ncnn源码阅读(三)----数据结构Mat

在ncnn中的数据结构是Mat,类似于OpenCV中的Mat,但又增加了一些属于它本身的一些特性,在这个部分学习一下ncnn的Mat。上面的三个构造函数内部,都会调用到create函数,而在create内部又会调用release函数,这是因为create的调用者不局限在构造函数中,其它的调用在后面再细说。先将原始指针偏移一个指针大小,然后再做内存对齐,偏移的一个指针大小用来存储原始指针。实现:一段堆空间存储引用计数,当发生拷贝时,引用计数加1,销毁的时候,引用计数减1,如果引用计数为0,则释放资源。

2023-07-11 16:41:42 635

原创 ncnn源码阅读(二)----网络模型结构和权重参数的加载

ncnn推理框架中把模型的结构和权重参数分为两个文件进行存储,实现了结构和权重的分离。在xxx.param中存储了模型的结构信息,在xxx.bin中存储了模型的权重信息。xxx.param的文件结构如下:layer:描述网络一共有多少层,例如:ReLU、Conv 都叫一个layer;blob:表示数据节点,例如一个Conv就有一个输入blob和输出blob;bottom_count:当前层接收输入blob的层个数top_count:将当前层的输出作为输入blob的层个数。

2023-07-06 16:45:09 747

原创 ncnn源码阅读(一)----阅读方法和参考教程

目前我的工作涉及推理框架较多,所以就想阅读一些他人的开源框架,来提升自己在语言层面和框架层面的认知。这个过程中发现了一些比较好的教程,我的阅读ncnn源码之旅将参考。

2023-06-25 19:46:37 398

原创 win10、win11下WSL2环境安装

只需要在C:\Users\用户名\AppData\Local\Microsoft\WindowsApps路径下确认所安装的Linux子系统具体的版本号。打开powershell,输入wsl, 可以根据wsl的命令来安装镜像。提示安装成功,自动登入账户,登入为root账户。这样设置完成后,登入的都是root用户。至此,cuda安装完毕,但是gcc版本不匹配的问题还没有解决。安装的过程中可以看到驱动检测不到,属于正常情况。,是因为之前安装的没有卸载的原因。安装的时候可能出现找不到包的问题。

2023-02-18 00:41:50 11866 2

原创 Sphinx文档生成工具(二)

定义列表可以理解为解释列表,即名词解释条目占一行,解释文本要有缩进;定义1这是定义1的内容定义2这是定义2的内容。

2023-02-15 14:17:55 645

原创 Sphinx文档生成工具(一)

创建FindSphinx.cmake,这个名字只能是这个。

2023-02-14 15:43:00 792

原创 doxygen注释生成api文档(二)

doxygen在实际项目中的应用部署。

2023-02-10 11:42:13 496

原创 doxygen注释生成api文档(一)

doxygen注释的使用规则

2022-10-11 23:12:12 317

原创 C++的编译、链接

C++的编译、链接C++的编译、链接的过程一般分为四部:预处理、编译、汇编和链接。简单理解整个过程(理解可能有所偏差):从编译入手,编译就是将自己写的C++代码翻译成相应的汇编代码,可以理解为,每一行C++代码都对应着相应的汇编代码。自己编写的代码中存在条件编译、宏定义和头文件引入等,所以需要通过预处理将条件编译、宏定义等进行处理。生成的汇编代码与机器码转换,这个过程就叫做汇编。因为存在多个文件的情况,所以会存在,一个文件中声明,另一个文件中定义的情况。这样在程序执行时,就需要找到对应的定义,这个过程叫

2022-05-25 10:01:26 662

原创 【深度学习】empty() received an invalid combination of arguments - got (tuple, dtype=NoneType, device=None

构建yoloV3的resblock时,python的一个小坑在构建一个简单的卷积层时,出现如下的错误:代码如下:class resblock(nn.Module): def __init__(self,inputDims): super(resblock,self).__init__() self.inputChannels = inputDims self.middleChannels = int(inputDims/2) #

2022-03-24 10:45:25 9675 7

原创 leetcode:剑指offer----替换空格

题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000解答思路:看到题目想到的是, 遍历每一个字符,遇到空格就换为"%20".- C++解答思路C++中就是利用for循环判断,每一个字符。string replaceSpace(string s) { string finnal = ""; f

2021-10-14 22:58:46 96

原创 leetcode:剑指offer----二维数组中查找

题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例:解答思路:面对这样的问题第一反应是暴.

2021-10-13 23:15:01 98

原创 leetcode:剑指offer----数组中重复的数字

题目:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例1:[2, 3, 1, 0, 2, 5, 3]输出

2021-10-12 23:02:04 88

原创 C++中在浏览器打开html文件

C++中在浏览器打开html文件在C++中打开相应的html文件,需要借助ShellExecute函数,对于该函数的输入参数比较复杂,所以在调用的过程中,花费了很多的时间。#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <shellapi.h>#include <tchar.h>#include <iostream>int main(int argc, char** argv){

2021-09-14 19:35:38 1801

原创 pcl完整分割聚类流程

前言在接触了pcl库三天后,根据一篇博客https://blog.csdn.net/ys578676728/article/details/104657262实现了自己的分离出人体的点云。参考的博客中,实现将一个人的点云信息分割出来。在今天参考该博客的流程,实现对场景中的五个人的点云图进行分割。这个流程可以作为pcl基础学习的一个流程。效果每次看别人的博客都喜欢看别人实现了什么效果,总是拉到页面最下面,所以先把效果贴出来,提起兴趣再看流程和代码,图会比较多,耐心看。左图为拿到的原图,右图为分割出来的

2021-08-11 20:06:46 4385 5

原创 visual studio2017调用SDK各个操作步骤的作用

visual studio中Debug和Release以及x86、x64的区别Debug通常称为调试版本,包含调试信息,不做任何优化;Release称为发布版本,往往进行了各种优化,使得程序在代码大小和运行速度上都是最优的,Release打包出来的程序文件也相对会小一些。x86平台和x64平台编译得到的可执行文件和dll库都不同,Any CPU取决于当前操作系统的位数。头文件包含路径、库文件路径头文件包含路径:即为包含目录或者是附加包含目录库文件路径:即所谓的库目录或者是附加库目录包含

2021-06-30 17:14:01 900

原创 Pytorch中GPU使用

本文中的内容转载自:《动手学深度学习》GPU计算到目前为止,我们一直在使用CPU计算。对复杂的神经网络和大规模的数据来说,使用CPU来计算可能不够高效。在本节中,我们将介绍如何使用单块NVIDIA GPU来计算。所以需要确保已经安装好了PyTorch GPU版本。准备工作都完成后,下面就可以通过nvidia-smi命令来查看显卡信息了。!nvidia-smi # 对Linux/macOS用户有效输出:Sun Mar 17 14:59:57 2019 +--------------

2021-04-29 15:42:53 963

原创 Pytorch中参数和模型的保存与读取

Tensor变量的存取(包括parameter)对于普通Tensor变量的存取,如下代码所示:import torchimport torch.nn as nnx = torch.ones(3)torch.save(x,'x.pt')x2 = torch.load('x.pt')print(x2)读写模型参数保存模型参数torch.save(net.state_dict(),'model_param.pth')载入模型参数mynet = MLP()mynet.load_stat

2021-04-29 15:36:13 780

原创 ROS服务中自定义数据类型

ROS服务中自定义数据类型在上一篇文章中,描述了一种两层封装的点集传输服务消息类型,比较复杂。上一篇文章事后我就在想何必包两层,直接在服务中利用提供的数据类型定义数组不就行了。所以动手试了一下:自定义数据类型代码应用//server端#include "ros/ros.h"#include "gm_ros_package/objectPosition.h"#include "gm_ros_package/test.h"bool process_position(gm_ros_pac

2021-01-14 09:43:44 969

原创 ROS中自定义复杂数据类型

ROS中自定义复杂数据类型先说一下需求,想要服务的请求数据为一个point(x,y,z)的数组。具体的形式表示如:[point1,point2,...]geometry_msgs::Point首先是对ROS官方提供的数据类型geometry::Point的认识和理解:可以看到该数据类型格式如上图。所以我们想是不是定义一个Point的数组就可以了。自定义新的数据类型gm_ros_package::Points来看一下自定义的数据类型的格式:实现对geometry_msgs::Poin

2021-01-13 20:22:40 1001

原创 使用OpenCV可视化Intel Realsensen D435 深度图为彩色图

使用OpenCV可视化Intel Realsensen D435 深度图为彩色图使用OpenCV将深度图转化为彩色图像,主要使用下面两个函数:cv2.convertScaleAbs(depth_image,alpha = 0.03)cv2.applyColorMap(src,colormap,dst=None)cv2.convertScaleAbs(depth_image,alpha=0.03)该函数依次执行三个操作:缩放、获取绝对值、转换为无符号的8位类型。参考:https://blog.

2021-01-08 16:23:06 3026

原创 python中调用C++函数

python中调用C++函数无参调用单变量传入与返回调用numpy数组传入与返回调用用python写不香吗?还这么复杂调用C++?一、 无参调用在python中调用无参数和无返回的C++函数,具体的使用方式如下:C++API函数的编写形式:#include<iostream>#include<string>using namespace std;extern "C"{ int hehe(void){ cout << "hello worl

2021-01-04 14:48:13 6587 6

原创 ZED ROS包发布topic介绍

ZED ROS包发布topic介绍本文中的内容来源于一下网址:https://www.stereolabs.com/docs/ros/#starting-the-zed-nodehttps://www.stereolabs.com/docs/ros/zed-node/#published-topicshttps://www.stereolabs.com/docs/ros/zed-node/#zed-parametersDisplay images(传感器默认左侧)rgb/image_rec

2020-12-29 17:09:05 648

原创 ubuntu下ZED相机开发环境安装

ubuntu下ZED相机开发环境安装安装设置ROS安装NVIDIA显卡驱动安装CUDA安装ZED SDK(SDK和CUDA的版本需要对应)安装ZED ROS包前三步的话在我拿到的机子上已经装好了,所以从第四开始安装SDKSDK的安装需要和CUDA版本相对应,对应关系可以在https://www.stereolabs.com/developers/这网址中查看相应SDK版本需要的CUDA版本。查看已经安装CUDA版本:cd /usr/local/ls就可以看到cuda的版本。然

2020-12-29 16:26:54 1842

原创 Intel Realsense d435 使用python对深度图进行预处理

Intel Realsense d435 使用python对深度图进行预处理本文中主要翻译一下一篇关于深度图预处理过滤器的内容,后面还会有关于距离测量的。原文中的图像显示,是使用matplotlib.pyplot工具,在本文中,使用opencv来显示深度图》首先常规操作导入包:import cv2import numpy as npimport pyrealsense2 as rs获取我们所需要的图像,通过摄像头或者本地都可以pipe = rs.pipeline()cfg = rs.co

2020-12-17 14:57:04 9793 22

原创 ubutnu16.04下Intel Realsense D435驱动的安装和python环境的配置

ubutnu16.04下Intel Realsense D435驱动的安装和python环境的配置一、 Intel Realsense D435驱动的安装普遍操作:这里就复制别人的:1、Register the server's public key:sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu

2020-12-14 17:13:31 710

原创 ubuntu16.04源码安装opencv3.4.0

ubuntu16.04源码安装opencv3.4.0opencv下载地址:https://opencv.org/releases/page/3/1、下载安装包2、安装依赖 sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev libtbb-dev3、解压安装包unzip opencv-3.4.0.zip4、在解压

2020-12-11 15:12:22 112

原创 ubuntu16.04源码安装python3.7

ubuntu16.04源码安装Python3.7python源码安装包下载:https://www.python.org/downloads/release/python-371/在安装的过程中,出现挺多问题,这里一一解决一下:1、首先可能会出现类似下面的问题:解决办法:sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock2、可能会出现:安装会报错:ModuleNotFoundError: No module nam

2020-12-11 12:02:26 411

原创 OpenCV中鼠标交互-绘制矩形框

OpenCV中鼠标交互-绘制矩形框·具体流程:1、绑定回调函数2、在回调函数中检测触发的事件3、根据不同事件做出不同动作一、绑定回调函数cv2.setMouseCallback('origianl',click_event)'origianl’为窗体的名字,client_event为回调函数的函数名二、在回调函数中检测触发的事件回调函数的的参数为固定格式:第一个参数event:事件类型x:为坐标xy:为坐标yflags:为鼠标滚轮的方向param:为传入参数def click

2020-09-24 21:53:41 1928

原创 OpecCV颜色分割

颜色分割普通读取的图片都是RGB格式,就意味着每种颜色都是由三种RGB组合而成。同样的常用的格式还有HSV,具体的看下面的百度贴过来的:色调H用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;饱和度S饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。

2020-09-22 14:57:08 300

原创 图像处理------图像细化

图像处理------图像细化算法流程参考自:图像处理细化算法参考博文中没有细化算法的代码实现,只有算法的具体流程,在本文中,使用python实现图像细化的代码实现,但其运行效率没有考虑,只为理解算法原理:算法原理步骤对二值图像进行细化,就是骨架提取,删除不需要的轮廓点,保留其骨架点。假设一个像素点,该点为p1,八邻域为p2->p9,通过考虑P1邻域的实际情况,以便决定是否删除P1点。假设处理的图像为二值图形,背景为黑色0,细化的前景为1.算法流程,分为两步,每步判断四个条件,然后决定像素点

2020-09-16 16:09:39 2254 1

原创 二值图像轮廓追踪算法

二值图像轮廓追踪算法主要分为两个方面,一个是算法的原理,二是算法的代码实现。这里为了实现方便选用python来对算法进行实现。一、算法原理对于二值图像来说,其中每一个像素不是255就是0,这里假设背景为255,前景为0,即在图像中找到黑色物体的轮廓。1、遍历二值图像找到其中某个黑像素,然后以此为开始点。2、将开始的8邻域分为8个方向,先从0向开始,如果0向的为黑像素,则将该点设置为当前像素,否则将方向加一(顺时针转45度),继续判断,直到有黑像素,若八个方向全部遍历都没有黑像素,则当前的开始点放弃

2020-09-15 16:11:27 4105 4

原创 C\C++不经意间留下的知识空白------const使用

const使用(四种使用方法)一const int x = 1;x = 3;//这行会报错//x为const常量,值不能改变二int b = 10;int c = 12;const int* a1 = &b;a1 = &c;*a1 = 23;//这行会报错//const int* a1 可以理解为a1变量中存储的地址,所指向的内存空间为const不能改变,但a1变量所在的空间是自由的。三int b = 10;int c = 12;int* const a2

2020-09-11 21:20:55 82

原创 初识卷积神经网络

一、LeNet网络(1998)LeNet网络有五层。两个卷积层,三个全连接层。这里说的卷积层包括激活层和池化层,全连接层包括连接层和激活层。self.conv = torch.nn.Sequential( torch.nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,stride=1,padding=0),

2020-09-03 15:31:22 165

原创 C\C++不经意间留下的知识空白------宏

C/C++中的宏C/C++中的宏极易被忽视,并且很多时候想不起使用,如果宏使用得当,可以极高的提升代码复用效率,极大的方便开发,在看面试书的过程中遇到的几种宏的使用,在这里总结一下预处理使用这部分在我的理解中,有点像if else来看一下具体的代码:#include<stdio.h>#define DEBUGint main(){#ifdef DEBUG printf("Hello world\n");#endif printf("end\n"); return 0;

2020-08-27 09:40:09 109

原创 C\C++不经意间留下的知识空白------有符号数和无符号数

C和C++C和C++应该是大多数工科生最先接触的两门语言,个人感觉这两门还是挺难的。今天在看面试题时,看到有符号数和无符号数时竟然懵了,这基础是有多不扎实啊!有符号数和无符号数对于浮点数来说都是有符号数,不存在无符号数。所以就拿8位一个字节的char类型来说一下这个有符号数和无符号数。首先,对于无符号数我们知道:8位的话最大表示255例:0000 0001 = 11111 1111 = 255对于有符号数,我想很多就知道首位表示符号位,后面怎么表示的都忘了,我就是把这个忘了,才弄了挺久才搞懂。

2020-08-25 14:07:25 245

原创 PyQt5中使用代码实现嵌套布局

PyQt5中使用代码实现嵌套布局PyQt5中有四种布局:水平(QHBoxLayout)、竖直(QVBoxLayout)、网格(QGridLayout)、表单(QFormLayout)对于嵌套布局来说,主要分四步:1、定义布局2、将内层布局加载到一个空的QWidget3、然后将该QWidget添加到外层布局4、将外层布局加载到窗体#第一步:定义布局 #外层布局 hori = QHBoxLayout() #内层布局 h = QHBoxLayout() v = QVBoxLayout()

2020-08-19 23:00:50 1294

原创 sklearn.model_selection中train_test_split的坑

坑无论是做机器学习还是深度学习,有个叫做数据集的东西不可忽视,有时候数据集的好坏会影响最后学习的效果。特别是没有现成处理好的数据集时需要我们自己动手搜集整理得到训练和测试的数据集。我在处理数据集的时候喜欢把数据放在一个列表,label放在一个一个列表,然后利用sklearn.model_selection中的train_test_split函数来分割得到训练集和数据集。该函数的具体返回值和用法如下:train_x,test_x,train_y,test_y = train_test_split(dat

2020-08-14 17:30:10 806

知识点.pdf

知识点.pdf

2022-03-20

five_people.pcd

five_people.pcd

2021-08-11

DMA_USART.zip

在STM32中利用两个外部中断控制DMA的传输。DMA用于从USART2读取数据到内存,然后再由其将数据从内存发送至USART1。

2020-06-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除