- 博客(163)
- 收藏
- 关注
原创 C++异常的使用
C++异常的使用引入使用异常Reference引入在很多场景下, 异常是一种非常好的用来报告和处理代码中的逻辑错误和运行错误的方法。特别是当堆栈中含有多个函数调用且其中的某个函数发生了一些错误时,使用异常处理的话那么它就一些上下文来处理相应的错误。异常提供了一种正规的,定义完好的方案来处理错误并将相关信息传递给调用堆栈。使用异常程序错误主要分为两大类:逻辑错误。 比如数组越界之类错误。这类错误的发生完全是编程导致的, 程序员完全有能力控制这类错误的发生。运行时错误。比如网络连接失败,文件不存在
2021-01-10 21:08:01
1018
原创 CMake: find_package
CMake: find_package基本标志与模块模式全部标志与配置模式版本选择查找过程包文件接口变量参考***查找外部项目, 并记载它的设置。 ***基本标志与模块模式find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE] [REQUIRED] [[COMPONENTS] [components...]] [OPTIONAL_COMPONENTS components
2020-09-21 22:56:27
2147
原创 CUDA C编程手册: 编程接口(七)
CUDA C编程手册: 编程接口(七)运行时图形交互OpenGL 交互Direct3D交互SLI 交互运行时图形交互一些来自其他软件的资源, 如OpenGL, Direct3D 可以映射至CUDA的地址空间。 这样CUDA 就可读取由其他程序所写的数据, 同时也能产出可以供它们使用的数据。在将资源映射至CUDA的地址空间之前,它必须使用一些API中的函数来先进行注册。这些函数会返回一个指向CUDA图形资源struct cudaGraphicsResource的指针。注册资源会有很高的overhead
2020-06-20 13:20:00
838
原创 CUDA C编程手册: 编程接口(六)
CUDA C编程手册: 编程接口(六)CUDA C 运行时表面内存表面对象API表面引用APICubemap 表面Cubemap Layered 表面CUDA 数组读写一致性CUDA C 运行时表面内存对于计算力高于2.0的设备,使用cudaArraySurfaceLoadStore标志创建的CUDA数组, 可以通过surface object.或者surface reference进行读写。不同的设备,所支持的表面内存的大小是不一样的。表面对象API表面对象的描述可以使用struct cudaR
2020-06-20 09:10:29
519
原创 CUDA C编程手册: 编程接口(五)
CUDA C编程手册: 编程接口(五)CUDA C 运行时纹理内存和表面内存纹理内存CUDA C 运行时纹理内存和表面内存CUDA支持使用一小部分GPU用于图形显示的纹理硬件来对纹理内存和表面内存进行访问。相比于从全局内存,从纹理或者表面内存中读取数据的在之前的设备内存章节已经进行了介绍。有两类API 用来完成对纹理和表面内存进行使用: 纹理引用API在所有的设备都能使用; 纹理对象API只支持在计算力大于3.0的设备上使用。 纹理引用API有一些纹理对象API所有没有的限制,使用时需要有所注意。
2020-06-17 22:31:06
717
原创 CUDA C编程手册: 编程接口(四)
CUDA C编程手册: 编程接口(四)CUDA C 运行时多设备系统设备枚举设备选取流与事件的行为点对点内存访存统一虚拟内存地址空间进程间通信错误校验CUDA C 运行时多设备系统设备枚举一个主机系统可以拥有多个设备。下列代码演示了如何枚举这些设备, 查询它们的属性以及确定激活的设备数量。int deviceCount;cudaGetDeviceCount(&deviceCount);int device;for (device = 0; device < deviceCoun
2020-06-08 07:52:19
2603
原创 CUDA C编程手册: 编程接口(一)
CUDA C编程手册: 编程接口(一)引言NVCC编译编译工作流离线编译即时编译二进制兼容性PTX兼容性应用兼容性C/C++兼容性64位兼容性引言CUDA C 简单的编程方法,它与C语言编程非常相似,可以很快地写出在设备上运行的程序。它由一些小的C语言扩展和一个运行时库组成。核心的编程扩展已经在编程模型中有了介绍。这些扩展可以使得程序员定义C形式的核函数,且利用一些新的语法来指明网格和块的维度。任何使用了这些扩展的源文件必须使用NVCC编译器来编译。运行时库提供的C函数可以在主机端执行,包括内存的分
2020-05-20 00:00:11
627
原创 CUDA C编程手册: 编程模型
CUDA C编程手册: 编程模型核函数线程体系内存体系异构编程核函数CUDA C 是对C的一中扩展, 允许程序员定义自己的C函数, 并且将之称为 核。与传统C函数不同的是, 这样的核被调用的时候, 会被CUDA 线程并行地执行N次。核函数定义的时候使用 _global_声明标识符。同时, 在调用这样的核函数的时候, 会使用一个特定的语法<<< … >>>来指定执行的配置。每一个线程执行这个核函数的时候, 都会被分配一个独一无二的线程ID, 这个线程ID可以通过内
2020-05-18 22:59:41
430
原创 C++中的宏
C++中的宏C++中的宏宏的作用宏的展开参考C++中的宏宏的作用1. 定义常量#define NUM 100上述代码是一种非常见的宏定义, 定义一些常见的常量, 如数学公式中常用的PI等常数。因为宏只是做简单的替...
2020-04-16 22:03:40
1260
原创 池化方法
池化方法池化操作是卷积神经网络中的一个特殊的操作,主要就是在一定的区域内提出该区域的关键信息(一个亚采样过程)。其操作往往出现在卷积层之后,它能起到减少卷积层输出的特征量数目的作用,从而能减少模型参数同时能改善过拟合现象。池化操作通过池化模板和步长两个关键变量构成。模板描述了提取信息区域的大小(size_PL),一般是一个方形窗口;步长(stride)描述了窗口在卷积层输出特征图上的移动步长,...
2020-04-15 09:52:52
9627
原创 C++: 资源管理的注意事项
C++: 资源管理的注意事项资源管理用对象管理资源建立自己的资源管理类copy 行为访问原始资源new 和 delete 要呼应new出来的对象以独立语句置入智能指针资源管理C++编程中最常见的资源就属于内存了。资源在我们使用完毕之后,是需要归还给系统的,让系统知道这部分资源当前没有被占用,是可以重新利用的。一旦资源没有归还给系统,系统会认为这部分资源一直被占用而实际却未被使用,这就是我们常说...
2019-06-19 00:20:56
387
原创 C++:将文件间的编译依赖性降低的几种方法
文章目录C++:将文件间的编译依赖性降低的几种方法场景方法一方法二方法三方法四ReferenceC++:将文件间的编译依赖性降低的几种方法场景在编写c++代码的时候,我们常常将文件分为头文件(.h) 和 实现文件(.cpp)。 在头文件中的内容我们常常成为接口, 而在实现文件中我们通常写接口的具体实现(当然,这种说法不是特别准确)。当代码稍微复杂一点时, 我们会存在多个这样的文件对, 而且文...
2019-06-12 23:24:04
2764
原创 FPN: Feature Pyramid Networks for Object Detection
FPN: 目标检测FPN: 目标检测引言FPN自下而上的路径(backbone)自上而下的路径(lateral connection)功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富...
2019-06-06 21:53:11
653
原创 V-Net: 医学图像分割
V-Net: 医学图像分割V-Net: 医学图像分割引言网络结构训练参考V-Net: 医学图像分割引言卷积网络在计算机视觉和医学图像分析领域有了很广泛的应用。尽管卷积神经网络非常受欢迎,但大多是都是用来处理2D图像,而医学图像却大多是3D的。U-Net是一个全卷积的体数据分割神经网络。它采用端到端的训练方式,包含一个新式的目标函数用于训练时进行优化使用。同时能很好的处理背景和非背景之间的强烈...
2019-05-11 10:38:34
15836
原创 U-Net:医学图像分割
U-Net:医学图像分割U-Net:医学图像分割引言网络结构训练数据增强参考U-Net:医学图像分割引言目前来说,深度神经网络的训练需要许多已经标记好的数据样本这一个观点已经得到了广泛的认同。而如何依赖于较少量(并不是指非常少)的数据样本来更有效地进行网络的训练是一个很值得关注的问题。因此,一些常用的数据增强技巧和新型的网络结构有时候确实能起到很好的作用。U-Net正是一种这样的例子。U-...
2019-05-10 07:44:18
4862
原创 设计模式:装饰器
设计模式:装饰器装饰器可以在一些场合代替继承,在这些场合中可以不通过继承来动态的增加原有类的功能, 同时也能够避免类的膨胀速度过快。在装饰器模式中,主要存在四个角色:抽象构建角色(component):定义同一的接口,可以使一个抽象类,也是装饰类和被装饰类的基类。具体构建角色(concrete component):具体实现类,也就是被装饰的类。装饰角色(decorator): 实现基类...
2018-10-11 19:51:21
209
原创 设计模式:适配器
设计模式:适配器适配器起的就是一个我们容易理解的转接口的作用。它将连个对象或者类连接起来,使得两者的接口得到兼容,协同工作。它是一种结构型的设计模式。适配器中存在三个主要角色:目标抽象类(Target):这个类定义了用户所需要的接口。适配器类(Adapter):适配器模式的核心所在,它可以调用另一个接口,连接Target和Adaptee。适配者类(Adaptee):被适配的角色,有着用户...
2018-10-10 20:24:45
183
原创 设计模式: 单例模式
设计模式: 单例模式单例模式指的是在软件程序中某个类只存在一个实例。python 实现class Singleton(object): ''''' A python style singleton ''' def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): ...
2018-09-28 18:51:15
313
原创 设计模式:观察者模式
设计模式:观察者模式行为模式的一种,定义的是一种一个被观察对多个观察者的作用关系。当被观察对象发生变化时, 观察者需要根据自身的逻辑做出相应的反映。其基本结构图如下所示:在这之中,主要包含三个重要角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。Concret...
2018-09-24 17:10:31
200
原创 GIT命令学习: 暂存(stash)
GIT命令学习: 暂存(stash)当对当前版本的文档进行修改后,而又想回到最初的版本进行一些额外的修改。这种应用场景很适用于早开发的过程中发现之前的代码存在bug的情况并需要及时修改的情况。此时就可以使用stash命令,它会保存当前的修改,并切换至HEAD对应的提交版本处。基本命令git stash list [&lt;options&gt;]列举暂存的所有条目,包括其名称(eg. st...
2018-09-24 15:09:25
790
原创 pytorch:自动求导机制
pytorch:自动求导机制自动求导机制是torch的核心之一。了解这一个概念对我们编写简洁且高效率的代码具有很大的帮助。虽然不求全部理解,但希望能够做到熟悉就好。requires_grad每一个张量都含有一个标记(flag)requires_grad, 它允许在一定的“细粒度”上将其在梯度计算图中剔除以提高效率。如果一个操作(或函数)的输入需要梯度计算,那么其输出也必然需要梯...
2018-08-14 23:21:43
2145
原创 Pytorch: 自定义网络层
Pytorch: 自定义网络层Function与Module的异同Function与Module都可以对pytorch进行自定义拓展,使其满足网络的需求,但这两者还是有十分重要的不同:Function一般只定义一个操作,因为其无法保存参数,因此适用于激活函数、pooling等操作;Module是保存了参数,因此适合于定义一层,如线性层,卷积层,也适用于定义一个网络Functio...
2018-08-11 18:14:19
14465
4
原创 STN:空间变换网络(Spatial Transformer Network)
空间变换网络(Spatial Transformer Network)空间变换网络(Spatial Transformer Network)空间变换器(Spatial Transformers)本文的惨开文献为:《Spatial Transformer Networks》卷积神经网络定义了一个异常强大的模型类,但在计算和参数有效的方式下仍然受限于对输入数据的空间不...
2018-08-11 14:04:21
45508
4
原创 pytorch: 自定义损失函数Loss
pytorch: 自定义损失函数Losspytorch中自带了一些常用的损失函数,它们都是torch.nn.Module的子类。因此自定义Loss函数也需要继承该类。在__init__函数中定义所需要的超参数,在forward函数中定义loss的计算方法。forward方法就是实际定义损失函数的地方,其返回值是一个标量(Scalar),而不是张量(Tensor)和向量(Vector)。也就...
2018-08-04 18:16:25
17647
原创 pytorch: 自定义数据集加载
pytorch: 自定义数据集加载pytorch: 自定义数据集加载torch.utils.data自定义数据集自定义数据集加载器Referencepytorch 官网给出的例子中都是使用了已经定义好的特殊数据集接口来加载数据,而且其使用的数据都是官方给出的数据。如果我们有自己收集的数据集,如何用来训练网络呢?此时需要我们自己定义好数据处理接口。幸运的是pyt...
2018-08-04 16:38:18
22897
3
原创 OpenCV学习(5): 图像畸变校正
畸变校正畸变摄像机的成像过程主要是主要涉及到几个坐标系的变换(具体过程可以参考相机模型):Created with Raphaël 2.1.2物体世界坐标 摄像机坐标 图像物理坐标 图像像素坐标 从摄像机成像畸变的产生于是其“天生”的,不可避免的,这主要是由于透镜成像原理导致的。其畸变的原理可以参考相机模型)。它的畸变按照原理可以分解为切向畸变和径向畸变。 [x′y′]=...
2018-06-07 14:41:51
39278
5
原创 OpenCV学习(4):命令行解析类CommandLineParser
命令行解析类CommandLineParser命令行解析类CommandLineParser类成员成员介绍构造函数成员函数样例该类的作用主要用于命令行的解析,也就是分解命令行的作用。以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入的参数格式要与代码中的if语句判断内容格式一样,很不方便。另外如果想要更改输入格式...
2018-05-11 19:22:15
1915
原创 强化学习:动态规划(DP)
强化学习:动态规划(DP)为什么可以使用动态规划解MDP问题?动态规划能够解决的问题通常含有两个性质: 1) 拥有最优子结构:最优解可以分解为多个子问题。 2)含有重复子问题:子问题重复了很多次,其解可以存储下来重复利用。马尔科夫决策过程满足上述两个性质: 1)贝尔曼方程给出了递归分解; 2)价值函数可以被存储及重复利用。MDP使用DP时,需要知道全部的知识,也就是说模...
2018-05-07 20:48:39
1319
原创 强化学习:马尔科夫决策过程(MDP)
马尔科夫决策过程马尔科夫决策过程马尔科夫过程马尔科夫奖励过程回报(return)状态价值函数(value function)贝尔曼方程马尔科夫决策过程定义策略贝尔曼方程最优价值函数最优策略贝尔曼最优方程马尔科夫过程马尔科夫性: 系统的下一个状态St+1St+1S_{t+1}仅与当前状态有关系,而与如何之前的状态没有关系。也就是说,下...
2018-05-07 17:35:04
1914
1
原创 光流法:Farneback
光流法:Farnback光流法:Farnback基本假设Farneback光流法图像模型位移估计Reference现实世界中,万物都在在运动,且运动的速度和方向可能均不同,这就构成了运动场。物体的运动投影在图像上反应的是像素的移动。这种像素的瞬时移动速度就是光流。光流法是利用图像序列中的像素在时间域上的变化、相邻帧之间的相关性来找到的上一帧跟当前帧间存在的...
2018-05-03 16:15:05
12796
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人