(三)旋转矩阵和旋转向量的相互转化 通过分析可知,度数为正值,沿着对应轴逆时针进行,度数为负值,沿着对应轴顺时针进行。如代码所示中:(原位置先绕X轴旋转90度,再绕Y轴旋转90度)在2中给的角度值为90度,接下来测试的角度值为-90度。蓝色是先绕X轴旋转,再绕Y轴旋转。输出值: (角度是弧度)左乘是固定坐标系进行操作。1、旋转矩阵转旋转向量。绿色是绕X轴的数据。
(四)pytorch中激活函数 2)relu单元在训练中将不可逆转的死亡,导致数据多样化的丢失。如果学习率设置的太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。在神经网络中,隐含层的激活函数,最好选择Relu。1)relu的导数在大于0时,梯度为常数,不会导致梯度弥散。在小于0时导数为0,当神经元激活值进入小于0,梯度为0,也就是说,这个神经元不会被训练,即稀疏性。Relu是将所有的负值都为零,相反,leakyRelu。绿色曲线为原函数,红色曲线为导函数。
(十四)C语言杂项 str为局部变量,当传递给函数时,函数不能真正使用str,用的只是str的一个备份,str的值不变。此处str的值仍然为null,malloc分配的内存地址并没有赋给str。要输出某个值的地址写成printf("%x",&变量);若变量为指针时,则应写成printf("%x",指针)指针变量存储的是地址,所以在函数调用的时候能否将指针变量传递给函数。C语言中要输出地址需要16进制的方式输出,需要用%x格式。1、printf()输出某个值的地址。2、C语言中指针变量如何向函数中传递。
openmp交叉编译 target:这个选项只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。程序所执行的主机,因为绝大多数是本机编译,本机执行,所以这个值就等于build。只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同。build: 执行代码编译的主机,一般指自己的主机系统。host: 编译出来的。
(七)标签分配 标签分配策略,是一个预定义的规则,能够分配每个anchor的正负,也就是一个gt会对应多个anchor。1、ATSS2、OTA: Optimal Transport Assignment for Object Detection3、Freeanchor、AutoAssign 等通过使用预测的 confidence score 来动态分配正负
视频动作算法任务 时序动作检测:任务的输入是一个未经裁剪的视频,即在这个视频里有些帧是没有动作发生的,因此需要检测出动作开始和结束的区间,并判断区间内动作的类别。即输入未经裁剪的视频序列,得到动作出现的区间和对应的类别。时空动作检测:相比于时序动作检测略有不同,时空动作检测不仅需要识别动作出现的区间和对应的类别,还要在空间范围内用一个包围框标记出人物的空间位置。动作识别:是对每个输入视频进行分类,识别出视频中人物做出的动作。时序动作分割:任务的输入是一个未经裁剪的视频,输出是视频中每一帧的动作类别。
(十三)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
(四)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.
(十二)解决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
(十一)vscode代码格式化配置 1、在vscode界面,按"ctrl+"进行设置界面,搜索Format2、设置保存文件时,按格式对代码排版3、向下拉,在框内输入Google,按照谷歌代码格式排版4、 使用方式,打开c++代码文件当文件保存时,自动按照谷歌代码风格进行格式化代码。或者进行shift+ctrl+i进行保存。...
(三)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
(三)pytorch中损失函数 损失函数可以分为三类:回归损失函数、分类损失函数和排序损失函数1、L1 loss计算实际值和预测值之间的绝对值之和的平均值。y表示标签,pred表示预测值。(回归问题),当目标变量的分布具有异常值时,即与平均值相差很大的值,它被认为对异常值具有很好的鲁棒性。import torchdef lossTest(): input=torch.randn(3,5,requires_grad=True) target=torch.randn(3,5) mae_loss=
(六) 量化研究 1、基本概念量化就是将浮点型实数量化为整型数(FP32->INT8)反量化就是将整型数转化为浮点型实数(INT8->FP32)2、量化操作比如有一个FP32的浮点型数字x=5.234,将这个数变为整型。这个数字乘以一个量化系统s,比如s=100,那么量化后的值,然后对这个数字进行四舍五入(round操作)整型INT8的范围是[-128,127],无符号INT8的范围也才[0,255]。所以需要进行截断,假设INT8范围是,那么上述可以变为:这样计算方式不对
(十三) C++中虚函数的作用和多态 C++中的虚函数作用主要是实现多态的机制。基类定义虚函数,子类可以重写该函数;在派生类中对基类定义的虚函数进行重写时,需要在派生类中声明该方法为虚方法。当子类重新定义了父类的虚函数后,当父类的指针指向子类对象的地址时,[即B b; A a=&b;]父类指针根据赋给它的不同子类指针,动态的调用子类的该函数,而不是父类的函数(如果不使用virtual,请看后面★*),且这样的函数调用发生在运行阶段,而不是发生在编译阶段,称为动态编译。而函数的重载可以认为是多态,只不过静态的。注意,非虚函数静态联编,效率
(二)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
(十) 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
(一) 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