- 博客(101)
- 收藏
- 关注
原创 (三)旋转矩阵和旋转向量的相互转化
通过分析可知,度数为正值,沿着对应轴逆时针进行,度数为负值,沿着对应轴顺时针进行。如代码所示中:(原位置先绕X轴旋转90度,再绕Y轴旋转90度)在2中给的角度值为90度,接下来测试的角度值为-90度。蓝色是先绕X轴旋转,再绕Y轴旋转。输出值: (角度是弧度)左乘是固定坐标系进行操作。1、旋转矩阵转旋转向量。绿色是绕X轴的数据。
2023-06-09 17:33:39 1032
原创 (四)pytorch中激活函数
2)relu单元在训练中将不可逆转的死亡,导致数据多样化的丢失。如果学习率设置的太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。在神经网络中,隐含层的激活函数,最好选择Relu。1)relu的导数在大于0时,梯度为常数,不会导致梯度弥散。在小于0时导数为0,当神经元激活值进入小于0,梯度为0,也就是说,这个神经元不会被训练,即稀疏性。Relu是将所有的负值都为零,相反,leakyRelu。绿色曲线为原函数,红色曲线为导函数。
2023-01-05 20:02:54 435 1
原创 (十四)C语言杂项
str为局部变量,当传递给函数时,函数不能真正使用str,用的只是str的一个备份,str的值不变。此处str的值仍然为null,malloc分配的内存地址并没有赋给str。要输出某个值的地址写成printf("%x",&变量);若变量为指针时,则应写成printf("%x",指针)指针变量存储的是地址,所以在函数调用的时候能否将指针变量传递给函数。C语言中要输出地址需要16进制的方式输出,需要用%x格式。1、printf()输出某个值的地址。2、C语言中指针变量如何向函数中传递。
2023-01-04 18:04:38 252
原创 openmp交叉编译
target:这个选项只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。程序所执行的主机,因为绝大多数是本机编译,本机执行,所以这个值就等于build。只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同。build: 执行代码编译的主机,一般指自己的主机系统。host: 编译出来的。
2022-12-08 17:17:17 1099
原创 (七)标签分配
标签分配策略,是一个预定义的规则,能够分配每个anchor的正负,也就是一个gt会对应多个anchor。1、ATSS2、OTA: Optimal Transport Assignment for Object Detection3、Freeanchor、AutoAssign 等通过使用预测的 confidence score 来动态分配正负
2022-12-07 16:06:17 1426
原创 视频动作算法任务
时序动作检测:任务的输入是一个未经裁剪的视频,即在这个视频里有些帧是没有动作发生的,因此需要检测出动作开始和结束的区间,并判断区间内动作的类别。即输入未经裁剪的视频序列,得到动作出现的区间和对应的类别。时空动作检测:相比于时序动作检测略有不同,时空动作检测不仅需要识别动作出现的区间和对应的类别,还要在空间范围内用一个包围框标记出人物的空间位置。动作识别:是对每个输入视频进行分类,识别出视频中人物做出的动作。时序动作分割:任务的输入是一个未经裁剪的视频,输出是视频中每一帧的动作类别。
2022-10-18 14:42:43 418
原创 (十三)valgrind在ARM上交叉编译和内存泄漏检测
valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。1、下载valgrind-3.17.02、交叉编译修改configure: armv7*) 改成 armv7*|arm)然后进行make -j8编译和安装make install。/gzy_mnt/valgrind目录下生成好的bin、include、lib、libexec、share目录3、运行/gzy_mnt是挂载在arm板子上的共享目录。我们对NanoDet的MNN进行内存泄露检测。在目录/gzy_mnt/valgrin
2022-06-07 15:22:52 2240
原创 (四)pytorch中张量数据转化关系
import torchimport numpy as np# int -> tensor -> inta = torch.Tensor(1)b = a.item() # list -> tensor(cpu)l0 = [1, 2, 3]t = torch.Tensor(l0) # tensor(cpu) -> numpy -> lista = t.numpy()l1 = t.numpy().tolist() # list -> numpy.
2022-05-31 14:23:50 163
原创 (十二)解决nvidia中glxserver_nvidia不能加载问题
明明已经正常安装nvidia驱动,但是关闭屏幕后(例如挂起,或者重新启动后),出现nvidia lost。nvidia无法启动X的问题。1、使用dmesg可以查看到,使用nvidia-bug-report.sh进行得到日志2、在当前文件夹下获取日志,nvidia-bug-report.log[ 5.283] (II) LoadModule: "glxserver_nvidia"[ 5.283] (WW) Warning, couldn't open module glxser
2022-05-16 19:55:02 2727
原创 (十一)vscode代码格式化配置
1、在vscode界面,按"ctrl+"进行设置界面,搜索Format2、设置保存文件时,按格式对代码排版3、向下拉,在框内输入Google,按照谷歌代码格式排版4、 使用方式,打开c++代码文件当文件保存时,自动按照谷歌代码风格进行格式化代码。或者进行shift+ctrl+i进行保存。...
2022-04-21 08:56:47 14271
原创 (三)ubuntu20.04搭建gitlab服务器
1、安装依赖sudo apt install ca-certificates curl openssh-server postfix对于postfix的安装,域名后续可以更改2、安装gitlabcd /tmpcurl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh可以随意检查下载的脚本,执行下面可找到该脚本的托管脚本less /tmp/script.deb
2022-04-16 15:06:35 7887
原创 (三)pytorch中损失函数
损失函数可以分为三类:回归损失函数、分类损失函数和排序损失函数1、L1 loss计算实际值和预测值之间的绝对值之和的平均值。y表示标签,pred表示预测值。(回归问题),当目标变量的分布具有异常值时,即与平均值相差很大的值,它被认为对异常值具有很好的鲁棒性。import torchdef lossTest(): input=torch.randn(3,5,requires_grad=True) target=torch.randn(3,5) mae_loss=
2022-04-11 11:50:55 5890
原创 (六) 量化研究
1、基本概念量化就是将浮点型实数量化为整型数(FP32->INT8)反量化就是将整型数转化为浮点型实数(INT8->FP32)2、量化操作比如有一个FP32的浮点型数字x=5.234,将这个数变为整型。这个数字乘以一个量化系统s,比如s=100,那么量化后的值,然后对这个数字进行四舍五入(round操作)整型INT8的范围是[-128,127],无符号INT8的范围也才[0,255]。所以需要进行截断,假设INT8范围是,那么上述可以变为:这样计算方式不对
2022-04-07 11:58:05 2105
原创 (十三) C++中虚函数的作用和多态
C++中的虚函数作用主要是实现多态的机制。基类定义虚函数,子类可以重写该函数;在派生类中对基类定义的虚函数进行重写时,需要在派生类中声明该方法为虚方法。当子类重新定义了父类的虚函数后,当父类的指针指向子类对象的地址时,[即B b; A a=&b;]父类指针根据赋给它的不同子类指针,动态的调用子类的该函数,而不是父类的函数(如果不使用virtual,请看后面★*),且这样的函数调用发生在运行阶段,而不是发生在编译阶段,称为动态编译。而函数的重载可以认为是多态,只不过静态的。注意,非虚函数静态联编,效率
2022-04-06 11:38:19 133
原创 (二)pytorch中算法分析和总结
1、卷积算子 torch.nn.Conv2d(1)原理:假设输入图像input尺寸为4x4,元素矩阵为:卷积核kernel尺寸为3x3,元素矩阵为:步长strides =1,填充padding=0,即i=4,k=3,s=1,p=0,则按照卷积计算公式,输出图像output的尺寸为2x2。(2)代码import torchimport numpy as npimport cv2import os# convdef conv(): randed_data=np
2022-04-02 17:22:01 3499
原创 (十) yaml-cpp编译和使用
1、版本选择建议使用yaml-cpp-0.6.0这个版本。它有以下特点:1)只需要c++112)去掉对boost等其他的依赖,干净下载链接:https://github.com/jbeder/yaml-cpp/releases/tag/yaml-cpp-0.6.02、编译和安装将yaml-cpp装在指定目录下,工程下有cmakelists.txt文件,新建build,然后cmakecmake .. -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_P
2022-03-21 09:55:17 4643 2
原创 (一) pytorch中API总结
1、unsqueeze(增维度)和squeeze(减维度)函数分析import torchimport numpy as npimport matplotlib.pyplot as plta = torch.arange(0,6).view(2,3) #tensor([[0, 1, 2],[3, 4, 5]]) 维度:(2,3) print(a) #在第二维增加一个维度b= a.unsqueeze(1)#tensor([[[0, 1, 2]],[[3, 4
2022-03-10 10:18:09 1618
原创 (九)在vscode中更改anaconda运行环境
快捷键ctrl+p,在弹出的框框中,输入>select interpreter来选择相应的Anaconda环境。
2022-03-04 15:05:44 1028
原创 (五) thrust下进行lambda表示式
1、使用lambda进行测试,求解x*x+y*y+z*z。新建test.cu文件#include <thrust/copy.h>#include <thrust/device_vector.h>#include <thrust/functional.h>#include <thrust/generate.h>#include <thrust/host_vector.h>#include <thrust/sort.h>#
2022-03-02 09:03:08 655
原创 (四) opencl测试
1、在gpu编写opencl代码#include <iostream>#include <stdlib.h>#include <string.h>#include <stdio.h>#if defined(__APPLE__) || defined(__MACOSX)#include <OpenCL/cl.hpp>#else#include <CL/cl.h>#endifusing namespace std;
2022-02-25 15:15:51 9652
原创 (三)MNN与Opencl联合编译
在MNN与opencl进行联合编译中,需要注意一些事项:1、在MNN中cmakelists进行修改后2、在source/backend/opencl/core/runtime中OpenCLWarpper.cpp中文件进行修改。否则在编译过程中不报错,而在执行过程报以下错误:OpenCL init error, fallback ..例如我们使用全志T507的liunx系统进行开发,需要把liunx下opencl链接库进行添加和修改static const std::vector<
2022-02-23 20:10:41 1912
原创 (六)深度学习面试总结
1、nms和soft-nms实现过程(1) nms实现过程初始时,非极大值抑制过程开始于一个检测框列表B、对应的置信度标S、空的检测列表D、阈值N_t。首先,找到最高置信度对应的检测框M,将其从B中删除,并添加到最终框列表D中。然后,计算M与B中其他检测框的重叠程度IOU,将IOU大于阈值N_t的目标检测从B中删除。对于B中剩余的检测框,继续重复这个过程,直到B为空时结束。(2) soft nms解决哪些问题nms的一个主要问题是,将与NMS重叠度大于阈值的其他检测框直接从B中删除。造成如果
2022-02-21 22:24:14 1099
原创 (十) 图
1、定义:由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),G表示一个图,V是图G中顶点的集合,E是图G中边的集合。线性表中数据元素叫元素,树中叫结点,在图中数据元素叫顶点。线性表可以没有数据元素称为空表,树中可以没有结点叫空树,图结构强调顶点集合V要有穷非空。线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,图结构中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。2、无向图:若顶点Vi到Vj之间的边没有方向,则称该边为无向
2022-02-18 16:03:46 259
原创 (九) 字符串
定义:串是由零个或多个字符组成的有限序列。字符串的存储结构与线性表相同,分顺序存储结构和链式存储结构。字符串的顺序存储结构是用一组地址连续的存储单元存储串中的字符序列的。(1)BF算法有两个字符串S(主串)和T(字串),长度N和M。首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一 直到T[M]为止;若S[1]和T[1]不等,则T向右 移动一个字符的位置,再依次进行比较。该算法最坏情况下要进行M*(N-M+1)次比较,时 间复杂度为O(M*N)。(2)KMP算法n
2022-02-18 15:40:13 179
原创 (八) 队列
一种先进先出的线性表,在一端进行插入操作,而在另一端进行删除操作的线性表,是一种先进先出的线性表。1、队列的链式存储(1) 队列的链式存储结构typedef struct QNode { ElemType data; struct QNode *next;} QNode, *QueuePrt;typedef struct { QueuePrt front, rear; // 队头、尾指针} LinkQueue;将队头指针指向链队列的头结点,而队尾指向终端结点(
2022-02-18 15:37:29 223
原创 (七) 线性表
1、定义:由零个或多个数据元素组成的有限序列,若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。InitList(*L): 初始化操作,建立一个空的线性表L。ListEmpty(L): 判断线性表是否为空表,若线性表为空,返回true,否则返回false。ClearList(*L): 将线性表清空。GetElem(L,i,*e): 将线性表L中的第i个位置元素值返回给e。LocateElem(L,e): 在线性表L中查找与给定值e相等的元素,如果查找成
2022-02-18 15:26:50 300
原创 (六) 栈的链式存储结构
1、存储结构typedef struct StackNode{ ElemType data; // 存放栈的数据 struct StackNode *next;} StackNode, *LinkStackPtr;typedef struct LinkStack{ LinkStackPrt top;// top指针 int count; // 栈元素计数器}2、进栈操作对于栈链的Push操作,假设元素值为e的新结点是s,top为栈顶指针..
2022-02-18 15:08:41 296
原创 (五) 栈
栈的元素必须“后进先出”;栈的操作只能在这个线性表的表尾进行;对于栈来说,这个表尾称为栈的栈顶,相应的表头称为栈底。1、栈的顺序存储结构:typedef struct{ElemType *base;ElemType *top;int stackSize; //栈的最大容量}sqStack;base是指向栈底的指针变量,top是指向栈顶的指针变量,stackSize指示栈的当前可使用的最大容量2、创建一个栈#define STACK_INIT_SIZE 100
2022-02-18 15:03:30 688
原创 (一) KNN和Kmeans分析
KNN、Kmeans是常用机器学习算法,但也经常弄混。本文将详细介绍这两种算法含义、实现过程、用途、区别等方面进行详细讲解。1、KNN属于监督学习,属于分类学习(需要进行训练)。最简单粗暴就是将预测点与所有点距离计算,然后保存并排序,选出前面K个值看看哪些类别比较多,则预测的点属于哪类。(1) 流程对未知类别属性的数据集中的每个点依次执行以下操作:a、计算已知类别数据集中的点与当前点之间距离(曼哈顿距离计算、欧式距离计算)b、按照距离递增次序排序c、选取与当前点距离最小的k个点(
2022-02-18 11:49:33 1197
原创 (一) RecognitionComponent模块分析
1、初始化模块Init(1) 参数初始化:主传感器名称、是否在世界坐标系跟踪、车辆尺寸和相对尺寸(速度)(2) 算法初始化:1) lidar::LidarObstacleTracking的参数LidarObstacleTrackingConfig包括以下 multi_target_tracker: "MlfEngine" fusion_classifier: "FusedClassifier" 然后初始化MlfEngine和FusedClassifier模块//s...
2022-02-17 11:53:04 1986
原创 (二) 使用vscode
1、在拉代码过程中,使用代码对比工具左侧有个分支工具,点击左侧栏中某个文件,右侧出现两栏。以102行为例,红色部分为代码改动之前显示,右侧绿色部分为代码改动之后显示。2、文件工具文件后面的图标,第1个为“打开文件”,第2个为“放弃更改”,第3个为“暂存修改”...
2022-02-16 09:26:18 964
原创 (一)CNN网络结构
1、开山之作:LeNet对经典LeNet-5做深入分析:1)输入图像是单通道的28*28大小的图像,矩阵表示[28,28,1]2)conv1所用卷积核尺寸5*5,滑动步长1,卷积核数目20,该层后图像尺寸变为28-5+1=24,输出矩阵[24,24,20]3)pool1核尺寸为2*2,步长2,输出矩阵[12,12,20]4)conv2所用卷积核尺寸5*5,滑动步长1,卷积核数目50,该层后图像尺寸变为12-5+1=8,输出矩阵[8,8,50]5)pool2核尺寸为2*2,步长2,输出
2022-02-15 19:54:45 3261
原创 (五)目标检测- 基于候选区域的目标检测器
1、RCNN的关键点(1) 用selective search生产RP(Region Proposals),RP的大小不一样,之后通过warp,把RP变成统一的227*227的大小(2) 将227*227的RP输入到CNN中进行特征提取(3) 用独立的SVM对RP进行特征分类(4) 用Bb回归(Bounding box regression)校正原来的RP,生产预测窗口的坐标2、fast rcnn(1)用Selective Search生成约2K个RP(2)整张图像输入C..
2022-02-15 19:08:51 856
原创 (二十八) 基于轮廓特征的形状匹配
1、链码直方图链码直方图将人眼看上去相似的物体归为一类。方向链码是用来表示物体轮廓的典型链码表示法。一条离散曲线可以定义为z2域内一组数量有限的8联通的。因此,一条数字化二值曲线可以用方向链码表示方向链码是相邻两像素连线的8种可能的方向值。一条曲线被网格离散化后形成n个链码方向,最终此曲线链码可表示为,每条链指向8个方向中的一个方向,i为像素的索引值,ai是由像素i指向像素i+1的方向链码。 (a)编码的方向示意 (b)简单物体形状 (c)形状的链码表示...
2022-02-15 17:03:06 1695
原创 (二十七) 开运算、闭运算、形态梯度、顶帽、黑帽
首先形态学的主要用途是获取物体拓扑和结果信息,通过物体和结构元素的某些运算,得到物体更本质的形态,在图像处理中的主要应用有:(1)利用形态学的基本运算对图像进行观察和处理,从而达到改善图像质量的目的(2)描述和定义图像的各种几何参数和特征如面积、周长、连通、颗粒度、骨架和方向性1、开运算开运算是通过先对图像腐蚀再膨胀实现,其原理表达式如下: dst=open(src,element)=dilate(erode(s...
2022-02-15 16:55:52 1374
原创 (四)目标检测- YoloV3和SSD对比
SSD的loss中,不同类别的分类器是softmax,最终检测目标的类别只能是一类。而在yolo-v3中,例如对于80类的coco数据集,对于类别进行判断是80个logistic分类器,只要输出大于设置的阈值,则都是物体的类别,物体同时可以属于多类,例如一个物体同时是person和woman。SSD损失函数分为两个部分:对应搜索框的位置loss(loc)和类别置信度loss(conf).i指代搜索框序号,j指代真实框序号,p指代类别序号,p=0表示背景,中取1表示此时第i个搜索框和第j个类别框...
2022-02-15 16:34:09 2585
原创 (三)目标检测-单次目标检测器总结
1、YOLO1具体做法:将image划分为S*S个网格,每个网络预测B个bbox的位置(x,y,w,h)、置信度(confidence为交并比)、类别概率。输出维度为S*S*(B*5+C),C为类别数。无论网格中包含多少个boxes,每个网格只预测一组类概率。测试时,将条件类概率和预测框的置信度乘起来,表示每个box包含某类物体的置信度,这个分数可以将box中的类别可能性和预测精确度同时表示出来。基本网络模型为Google net,但未使用inception模块,而是交替使用1*1和3*3卷积层。
2022-02-15 16:28:12 429
原创 (十二) 关于耗时打印
用来判断某个程序耗时打印#include <chrono>int main(){ auto start = std::chrono::steady_clock::now(); int res=countNonZero(s,srcBase,s.width); //do some things auto end = std::chrono::steady_clock::now(); auto ms = std::chrono::duration_cast<std::chron
2022-02-14 16:46:34 705
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人