自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 D3D处理2D图像: NV12格式及其转换(1)

1. NV12格式介绍YUV 4:2:0是视频和图片编码和解码最常用的输入和输出格式。而在D3D中NV12是支持最广泛的YUV 4:2:0格式,主要因为它在GPU中处理的效率最高,只有两个plane, 而且UVplane和Luminance(Y) plane的pitch(stride)相等,高度为前者一半,所以在很多场景都是可以一起处理,而不需要分为两个或者三个plane来分别进行操作,不管是渲染,拷贝,还是在graphic pipeline中通过映射成其他格式,都非常方便和高效。反观其他的YUV格式,

2022-05-21 16:23:43 4535 2

原创 D3D处理2D图像:2D Quad坐标系介绍(2)

常见的一段代码在以前的实现中,我们需要自己组织Vertex,对于2D Quad场景来说,一般组织这样的一组数据: const ScreenVertex svDefault[4] = { // x y z w u v { { -1.0f, 1.0f, 0.5f, 1.0f },{ 0.0f, 0.0f } }, // 0 { { 1.0f, 1.0f, 0.5f, 1.0f },{ 1.0f, 0.0f } }, // 1 { {

2022-05-16 23:01:51 281

原创 D3D处理2D图像:2D Quad坐标系介绍(1)

Direct3DDirect3D是Windows平台上开发硬件加速的程序一个架构,它提供了图形处理和渲染加速视频编解码加速并行计算加速Direct3D和OpenGL非常相似,很多概念、术语和流程基本上是相通的,在显卡(GPU)内部的加速原理基本上差不多,它不仅是Windows和XBox游戏开发的渲染基本技术架构,我们还能利用显卡(GPU)强大的计算能力,为高清视频、图像和图形编解码,渲染和特效处理提供实时和流畅的处理能力,是Windows平台上视频和图像处理进阶的必备编程技术。本系列主要介绍

2022-05-15 22:13:30 659

原创 AVX2 初探

Intel最近 发布了AVX-512,据说对浮点运算有很大提升,我的机器目前不支持AVX-512,但是支持AVX2,按照之前Intel给出的数据,据说能提速将近8倍:Introduction to Intel® Advanced Vector Extensions测试环境可能这篇文章有点偏老,我这边也想验证一下没有优化的C/C++浮点运算和AVX2优化后的浮点运算到底快多少。这是我机器的配置:Manufacturer GenuineIntelName Intel Core i7 7820

2021-04-09 16:57:13 3349

原创 torchvision Faster-RCNN ResNet-50 FPN代码解析(ROI)

总体架构ROI对从RPN中选出来的1000个Proposal Boxes,以及从FPN中输出的多层特征图进行ROI Pool,对于box中的对象进行分类,并再次进行Proposal Boxes偏移(offset/delta)数值回归,产生新的分数和再次微调的box,以及得到标签,最后再次进行非极大值抑制(NMS):基于FPN的ROI处理会比传统的Faster RCNN多出一些步骤,要更加复杂一些。主要包含如下步骤:Box ROI Pool,根据1000个Proposal box的面积,确定选择在

2020-10-11 22:31:47 2672 2

原创 torchvision Faster-RCNN ResNet-50 FPN代码解析(RPN)

总体架构RPNHead

2020-10-08 20:46:42 3068 2

原创 torchvision Faster-RCNN ResNet-50 FPN代码解析(总体结构)

总体结构首先花了点时间把整个代码架构理了理,画了如下这张图:主体部分分为这几大部分:Transform,主要是对输入图像进行转换Resnet-50,主要是特征提取FPN,主要是构建特征金字塔给RPN提供输入特征RPN,主要是产生region proposalsROI,主要是检测object区域,各个区域的labels以及各个区域的scoresTransform请看torchvision Faster-RCNN ResNet-50 FPN代码解析(图片转换和坐标)Resnet-50

2020-10-07 17:52:10 11059 4

原创 torchvision Faster-RCNN ResNet-50 FPN代码解析(图片转换和坐标)

图像转换在torchvision\models\detection\faster_rcnn.py构造函数中,指定了image mean/std,这些前面笔记中都介绍了原因,这里不多说了,这里还指明了最大和最小的图像长宽,这里是800和1333,表明转换出来的图像不能超出800x1333或者1333x800这个尺寸。class FasterRCNN(GeneralizedRCNN): def __init__(self, backbone, num_classes=None,

2020-10-04 20:13:58 3118 1

原创 libtorch学习笔记(17)- ResNet50 FPN以及如何应用于Faster-RCNN

FPN,即Feature Pyramid Networks,是一种多尺寸,金字塔结构深度学习网络,使用了FPN的Faster-RCNN,其测试结果超过大部分single-model,包括COCO 2016年挑战的获胜模型。其优势是小尺寸对象的检测。torchvision中包含了ResNet50 FPN完整的源代码(这里参考的是torchvision 0.7.0里面的代码),这里就解读一下对应的实现,为了解释流畅,尽量采用ResNet50中的layer name,以及对应的参数:这里画了一个全局图,将

2020-09-19 22:15:34 10458 5

原创 libtorch学习笔记(16)- Faste-RCNN的RPN如何训练以及训练的参数集

学习小结通过前面的学习,很多基本概念基本上已经理解;也通过标准的C/C++函数和Windows自带的D2D技术实现了MNIST, CIFAR10, CIFAR100, Image Folder数据集加载,和图像到张量的转换(当然也支持常见的转换,比如Center Crop, Random Crop, Flip Horizontal, Padding Scale…等等转换);同时自动写的网络加载器,也能同时定义和加载VGG和RESNET等各类网络,并且在MNIST,CIFAR和猫狗训练集上训练之后的准确率也

2020-09-19 09:56:57 1177 1

原创 libtorch学习笔记(15)- 方向导数和梯度的推导

几个基本数学概念线性近似(linear approximation):又称线性逼近,在数学中,线性近似是指使用线性函数对一般函数进行近似处理的方法。线性近似就是用线性函数对普通函数进行近似。这个线性函数称为仿射函数。...

2020-09-04 17:54:39 1755

原创 libtorch学习笔记(14)- 梯度的数学解释

梯度可以说是神经网络优化器最基本的一个概念,一直听到这次,但是对于其数学含义,以前还不是特别明白,最近看到一篇不错的文章介绍梯度的文章An introduction to the directional derivative and the gradient,这里翻译一下,并附上自己的理解方向导数(The directional derivative)假设用一个函数f(x,y)f(x, y)f(x,y)表示在一条山脉每个位置x=(x,y)\bold x = (x,y)x=(x,y)的高度。如果你站在一个

2020-09-04 10:06:17 493 1

原创 libtorch学习笔记(13)- 学习率参数调整

关于学习率学习率是机器学习中一个重要参数,对loss的收敛速度和准确性有重要的影响,在深度学习中它一般需要动态调整,在TensorFlow中有很多种学习调整的算法,在libtorch中还没有发现,好在算法不是很复杂,这里就做一些学习笔记,并用C/C++进行实现,同时也应用到ResNet的具体实现中。学习率参数在说明这些参数之前,先讲一下step的概念, 这里step就是optimizer调用一次step,或者训练完一次batch,它就增加1,相当于调整一次网络参数(权重和偏置量)。参数说明

2020-08-31 21:52:40 1231

原创 libtorch学习笔记(12)- 权重和偏置量的初始化

权重和偏置量在libtorch中各个神经网络模块中都有实现,比如conv2d1Conv2dImpl::Conv2dImpl( Conv2dOptions options_) : ConvNdImpl( detail::ConvNdOptions<2>( /*in_channels=*/options_.in_channels(), /*out_channels=*/options_.out_channels(),

2020-08-26 17:48:19 2112

原创 libtorch学习笔记(11)- 保存和加载训练结果

保存和加载训练结果libtorch/pytorch提供了很好的serialize操作,可以很容把训练结果保存起来,最初我认为训练结果包括网络拓补结构,权重和偏置量等,后来发现应该只包含权重和偏置量,这样一来就需要在这个文档中存储一些扩展值,用于下一次重构网络。保存网络权重和偏置量torch::nn:Module提供了一个方法save方法,我们构建的网络又是集成这个类,所以可以调用此方法存储网络权重和偏置量。torch::serialize::OutputArchive archive;save(a

2020-08-18 16:34:22 2506 2

原创 libtorch学习笔记(10)- 一些具体问题的解决

神经网络中碰到的问题目前主要用CPU用来进行神经网络训练,验证和测试,在以前的用LeNet来基于MNIST图像集进行训练、验证和测试,速度还行,准确率也很高,但是通过VGG的学习,发现机器有点吃不消了,一轮训练都是几个小时,所以出了一个小问题,可能几个小时就白测试了,训练出准确的网络对我来说太重要了。这是这段时间碰到的一些问题:Loss rate马上变成0原因:训练的数据无差异,无法训练刚开始一上来就碰到这个问题,后来经过排查,发现自己写的将图片转化为张量的实现有问题,导致所有的图片张量都被同一

2020-08-16 23:05:23 1385 2

原创 libtorch学习笔记(9)- 自己实现神经网络加载器

神经网络记载器(Neutral Network Loader)背景通过前面的学习熟悉了两种经典的前置神经网络,LeNet和VGG,在具体实现过程中,有不少重复代码,随着更多神经网络的引入,以及各种神经网络变种,发现代码非常难以维护,而且可读性不是很高,比如VGG网络:NetBatchNormNon-BatchNormA11A-LRN11B11C11D11E11总共有12中组合,如果按照之前的写法:VGGNet::VGG

2020-08-16 10:23:05 667

原创 libtorch学习笔记(8)- 自己实现图片到张量

自己实现的意义本系列笔记主要用C/C++来实现神经网络模型,所以用原生的C/C++自己动手实现图片到张量的转换,更助于了解张量的含义和用途,以及其如何组织。为了便于理解输出结果,制作了一张Red, Green和Blue的图片(10x10):Pytorch来实现假设图片放在I:\import torchimport torchvision.transforms as transformsfrom PIL import Imageimport matplotlib.pyplot as plt

2020-08-11 18:17:00 1994 1

原创 libtorch学习笔记(7)- VGG网络训练和测试

VGG网络训练和测试简单介绍VGG是卷积网络里面比较常见的网络模型,相比LeNet要复杂一些,但是还是前置反馈网络,详细学习可以参考论文VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION,VGG网络能够提取更多的图像特征,最后输出的特诊向量信息量更丰富,所以可以进行更大规模的分类,前面介绍的LeNet5可以产生10个分类,分别对应0~9, VGG可以产生上万个分类,识别更多的类型。VGG也是Faster RCNN的基础,F

2020-08-10 20:44:09 2609 1

原创 libtorch学习笔记(6)- 识别各类简单图片中的数字

MNIST测试数据和现实当中的手写识别差别还是挺大的,一般现实中都是要识别一个图片或者一个图形对象,甚至更复杂从复杂的图形中识别其中的数字,所以本文将写一个在现实中可以真实使用的C++例子来介绍如何使用训练好的网络识别图片中的数字。

2020-08-02 01:06:43 979 6

原创 libtorch学习笔记(5)- MNIST实战

MNIST libtorch实战练习准备工作首先下载MNIST database,http://yann.lecun.com/exdb/mnist/下载后千万不要用winrar之类的软件解压,比如t10k-images-idx3-ubyte被解压成t10k-images.idx3-ubyte,最好到Linux环境下用tar解压。假设解压到I:\MNIST。训练并保存结果定义网络跟前面差不多,但是需要定义padding,毕竟MNIST训练和测试图像都是28x28,但是LeNet-5期望输入的图像

2020-08-01 15:05:27 1746 2

原创 libtorch学习笔记(4)- 构建一个简单的神经网路

一个简单的前馈神经网络(feed-forward network)先看一张图这个神经网络有两个卷积层(C1, C2), C1后面跟着一个池化层,C2后面跟着另外一个池化层,C2后面的池化层后面跟着两个全连接层和输出层1。Python方式描述网络import torchimport torch.nn as nnimport torch.nn.functional as Fclass Net(nn.Module): def __init__(self): super

2020-07-26 12:35:50 1839

原创 libtorch学习笔记(3)- 一些基本概念

几个基本概念标量 (scaler)看名称scaler就知道它是一个数字,在libtorch中可以把标量视为零阶张量,可以如此声明// 标量auto scaler = torch::tensor(1.0f);std::cout << "scaler sizes() length: " << scaler.sizes().size() << "\n" << scaler << std::endl;输出结果:向量 (vector)向量

2020-07-20 00:36:51 1273 1

原创 libtorch学习笔记(2)- 自动求导

问题对于如下函数,在指定的输入上求导,比如:输入[2, 4, 10]f(x)=3x2+x+4f(x) = 3x^2 + x + 4f(x)=3x2+x+4实现首先,创建一个可追踪张量,初始化值为[2.0, 4.0, 10.0],各元素是浮点数,不能写成[2, 4,10],否则无法进行追踪和求导。 auto x = torch::tensor({ 2.0, 4.0, 10.0 }, torch::requires_grad()); std::cout << x <<

2020-07-19 21:36:39 711

原创 libtorch学习笔记(1)- 开发环境搭建

安装我是使用VS2017,首先下载libtorch安装包,我选在了debug版本的用于学习:https://pytorch.org/get-started/locally/解压到某一目录,比如:I:\pytorch\1.5.1\debug配置VS2017创建一个VS2017 console project, 选择Debug|x64,然后配置include, libpath和link libraries:比如:c10.lib;torch.lib;caffe2_module_test_dynam

2020-07-19 20:37:36 1610 2

原创 本博主第一次发博文

2020-03-22 18:09:28 113

原创 一个继承类实例内存释放的问题

#include &lt;stdint.h&gt;#include &lt;vector&gt;class A{};class B: public A{ uint16_t entry_count; std::vector&lt;uint32_t&gt; entries;};int main(){ A* b = new B(); delete ...

2018-02-12 23:25:06 310

原创 Windows 10下同步文件夹备份的一种方案

对于软件工程师来叫高效率、低成本的备份方案太重要了,相信大部分人都有盘毁码完的经历,这里介绍一种方案:一些常用方案的优缺点文件拷贝 优点: 操作简单明了 缺点:效率低下,由于一些中间编译文件都被拷贝过去了,往往极大的浪费了硬盘空间,而且备份时间可能过长版本控制 通过git, performance, CVS, SVN等 优点:功能强大,可以协同进行开发,完善的版本控制,代码

2018-01-21 23:19:14 13847

原创 __uuidof在gcc中的实现

在Windows的COM模块,或者相关的代码如果想要移植到Linux上,往往会碰到很多问题,最常见的是__uuidof在gcc上不是内生支持,但是在VC上是基本的operator,相信这个问题也有不少人碰到,并且为此头痛的,下面介绍一种如果利用C++11/14的通用方法解决此问题。 先上代码:#include <iostream>#include <memory.h>#include <asse

2017-09-12 18:18:56 789

原创 写一个DPI自适应的Win32程序

当前高DPI的显示器越来越流行,动辄2K,甚至4K,一些老的应用程序在这些显示器显示效果非常差,这是为什么了呢?这是因为老的应用程序经常以96DPI来设计的,老的应用程序缺省是DPI Unawareness的,所以系统会自动把程序进行拉伸,比如现在DPI是144,那么程序界面就像拉伸150%,这就会造成界面模糊,下面是一个例子, DPI为96的界面把DPI改为150%(144)之后

2017-09-11 15:17:54 7421

原创 一种通用的C++类或者结构成员变量的初始化方法

C++11提供了新的特性,可以初始化一些类或者结构成员变量,尤其某类实例化的变量的初始化,下面介绍一种在C++98中也可以初始化类成员变量的通用方法

2017-06-18 15:58:05 489

[MS-DOC].pdf

描述旧的.doc文档的数据组织方式,如果要实现Word文档的读取和存储,可以参考此文档,这个文档不同于最新的.docx文档,.docx文档是以XML方式组织,然后用zip把它压缩起来,这是完全二进制的。

2020-08-16

VGGNet.zip

VGG-D神经网络的C/C++实现,以来tinyxml2和libtorch,提供了可运行代码,来训练基于folder的数据集

2020-08-16

空空如也

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

TA关注的人

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