
笔记
文章平均质量分 85
王飞95
毕业于中国科学技术大学,拥有20多年的开发经验。精通C++和各类多媒体架构和技术,熟悉多个领域技术规范和行业标准,尤其是多媒体领域;技术储备和知识面全面;擅长架构设计、应用性能优化和、跨平台移植以及各类难题调试和解决;领导和成功发布了数十项产品和项目,包括XBox One蓝光播放器等。在业界一直是可信赖的合作者和领导者。
展开
-
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 · 2902 阅读 · 2 评论 -
torchvision Faster-RCNN ResNet-50 FPN代码解析(RPN)
总体架构RPNHead原创 2020-10-08 20:46:42 · 3492 阅读 · 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 · 11977 阅读 · 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 · 3372 阅读 · 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 · 11207 阅读 · 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 · 1294 阅读 · 1 评论 -
libtorch学习笔记(13)- 学习率参数调整
关于学习率学习率是机器学习中一个重要参数,对loss的收敛速度和准确性有重要的影响,在深度学习中它一般需要动态调整,在TensorFlow中有很多种学习调整的算法,在libtorch中还没有发现,好在算法不是很复杂,这里就做一些学习笔记,并用C/C++进行实现,同时也应用到ResNet的具体实现中。学习率参数在说明这些参数之前,先讲一下step的概念, 这里step就是optimizer调用一次step,或者训练完一次batch,它就增加1,相当于调整一次网络参数(权重和偏置量)。参数说明原创 2020-08-31 21:52:40 · 1395 阅读 · 0 评论 -
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 · 2300 阅读 · 0 评论 -
libtorch学习笔记(11)- 保存和加载训练结果
保存和加载训练结果libtorch/pytorch提供了很好的serialize操作,可以很容把训练结果保存起来,最初我认为训练结果包括网络拓补结构,权重和偏置量等,后来发现应该只包含权重和偏置量,这样一来就需要在这个文档中存储一些扩展值,用于下一次重构网络。保存网络权重和偏置量torch::nn:Module提供了一个方法save方法,我们构建的网络又是集成这个类,所以可以调用此方法存储网络权重和偏置量。torch::serialize::OutputArchive archive;save(a原创 2020-08-18 16:34:22 · 2941 阅读 · 2 评论 -
libtorch学习笔记(10)- 一些具体问题的解决
神经网络中碰到的问题目前主要用CPU用来进行神经网络训练,验证和测试,在以前的用LeNet来基于MNIST图像集进行训练、验证和测试,速度还行,准确率也很高,但是通过VGG的学习,发现机器有点吃不消了,一轮训练都是几个小时,所以出了一个小问题,可能几个小时就白测试了,训练出准确的网络对我来说太重要了。这是这段时间碰到的一些问题:Loss rate马上变成0原因:训练的数据无差异,无法训练刚开始一上来就碰到这个问题,后来经过排查,发现自己写的将图片转化为张量的实现有问题,导致所有的图片张量都被同一原创 2020-08-16 23:05:23 · 1461 阅读 · 2 评论 -
libtorch学习笔记(9)- 自己实现神经网络加载器
神经网络记载器(Neutral Network Loader)背景通过前面的学习熟悉了两种经典的前置神经网络,LeNet和VGG,在具体实现过程中,有不少重复代码,随着更多神经网络的引入,以及各种神经网络变种,发现代码非常难以维护,而且可读性不是很高,比如VGG网络:NetBatchNormNon-BatchNormA11A-LRN11B11C11D11E11总共有12中组合,如果按照之前的写法:VGGNet::VGG原创 2020-08-16 10:23:05 · 764 阅读 · 0 评论 -
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 · 2133 阅读 · 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 · 2808 阅读 · 1 评论 -
libtorch学习笔记(6)- 识别各类简单图片中的数字
MNIST测试数据和现实当中的手写识别差别还是挺大的,一般现实中都是要识别一个图片或者一个图形对象,甚至更复杂从复杂的图形中识别其中的数字,所以本文将写一个在现实中可以真实使用的C++例子来介绍如何使用训练好的网络识别图片中的数字。原创 2020-08-02 01:06:43 · 1043 阅读 · 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 · 1935 阅读 · 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 · 2135 阅读 · 0 评论 -
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 · 1377 阅读 · 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 · 790 阅读 · 0 评论 -
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 · 1777 阅读 · 2 评论 -
本博主第一次发博文
原创 2020-03-22 18:09:28 · 141 阅读 · 0 评论