-
Net 基本介绍 网络通过组成和自微分共同定义一个函数及其梯度。 网络是一些Layer组成的DAG,也就是有向无环图,在caffe中通常由prototxt定义. 比如 1name: "LogReg"2layer {3 name: "mnist"4 type: "Data"5 top: "data"6 top: "label"7 data_param {8 source: "input_leveldb"9 batch_size: 6410 }11}12layer {13 name: "ip"14 type: …
Read More -
layer 整体介绍 layer是模型计算的基本单元 类似于pytorch或者其他深度学习框架的op layer中的数据流向为,输入若干个blob,称之为"bottom blob",然后经过layer的计算,输出若干个blob,称之为"top blob" 也就是数据是从“bottom”流向“top” layer通常会进行两种计算,forward和backward forward是指,根据bottom blob计算得到top blob backward是指,根据top blob的结果和参数值计算得到的gradient,回传给前面的layer. layer 实现细节 layer作为一个base …
Read More -
迫于生计,开始看caffe代码。 会侧重于分析inference部分。 blob 整体介绍 blob的含义及目的 blob在逻辑上表示的就是所谓的tensor,blob是tensor在caffe中的叫法。 在框架层面上,blob的意义在于对数据进行封装,提供统一的接口。 这里的数据包含训练/inference时用的数据,也包含模型参数,导数等数据。 深度学习离不开在GPU上的计算。 blob对数据的封装使得用户不必关心和cuda有关的数据传输细节。 blob的表示 对于图像数据,blob通常为4-dim,也就是N*C*H*W 其中N表示number,也就是batch_num C表示channel H表示height W表示width …
Read More -
问题描述 一年debug 三次faster rcnn,每次都有新感觉(不 接到一个bug report,现象为某人脸模型,转换成trt模型,当batch size为1时结果完全正确,但是batch size大于1时结果不正确。 具体的现象是,如果跑多张不同的图,只有第一张图有结果,后面的图都没有结果。 如果跑的图中有相同的,那么和第一张相同的图都会有结果,其余的图没有结果。 1layer {2 name: "POD_proposal"3 type: "RPRoIFused"4 bottom: "Reshape_105"5 bottom: "Conv_100"6 …
Read More -
检测不同尺度的物体一直是计算机视觉领域中比较有挑战性的事情.我们先从之前的工作出发,并对比FPN比起之前的工作有哪些改进. 之前的工作 Featurized image pyramid 思路是对于同一张图,生成不同的scale,然后每个scale的image单独去做检测. 这个方法是手工设计feautre时代的常用办法. 这个办法是比较显然的,也的确可以解决检测不同尺度物体的问题. 缺点非常明显...inference的速度几乎和scale的个数线性相关. 以及由于显存的开销,没办法做end-to-end 的training. Single feature map 再之后,手工设计的feature逐渐被由CNN生成 …
Read More -
概述 SSD是一种单阶段目标检测算法.所谓单阶段,是指只使用了一个deep neural network,而不是像faster-rcnn这种两阶段网络. 为什么有了faster-rcnn还要使用SSD? 最主要是慢... 两阶段网络虽然准确率高,但是在嵌入式等算力不足的设备上做inference速度非常感人,很难达到real time的要求. (实际业务上也是这样,公有云上的检测模型几乎都是faster-rcnn,而到了一些盒子之类的硬件设备,检测模型就全是SSD等single stage 模型了) 之前一直没有写SSD是因为相比faster rcnn的细节,SSD的问题似乎并不是很多.直到最近转模型的时候被FASF模型的一个细节卡 …
Read More -
boosting 算法是什么. 机缘使然,接触到了 Boosting 算法.Boosting是一种通过组合弱学习器来产生强学习器的通用且有效的方法. 动机是基于如下观察:尽管委员会中每个成员只提供一些不成熟的判断,但整个委员会却产生较为准确的决策。通过组合多个弱学习器来解决学习问题。给定训练数据,弱学习算法(如决策树)可以训练产生弱学习器,这些弱学习器只需要比随机猜测的准确率好一些。用不同的训练数据训练可以得到不同的弱学习器。这些弱学习器作为委员会成员,共同决策。 ranking task是什么 此处的ranking task指的的pairwise ranking 排名(ranking)的学习问题出现在许多现代应用程序中,包括搜索引 …
Read More -
年中的时候接了离职的同事模型转换的锅,在不断地更新迭代的过程中,发现了一些痛点。 发现k8s能够解决一部分痛点,因此来分享一下在这方面的探索。 什么是模型转换 简单来说,深度学习模型的流程分为training和inference两部分。训练时用的一般是pytorch等框架,这些框架训练出的model是没办法直接部署在各个硬件平台上做inference的。因此需要将使用训练框架得到的模型,转换为能够部署到各个硬件平台上的模型。这个过程就是模型转换。 模型转换的一般流程为,先将pytorch等训练框架训练得到的模型转换为caffe model(是的,caffe才是业界中间表示的事实标准,而不是号称支持所有框架中间表示的onnx),再 …
Read More -
最近有同事report给我们,用同一个模型转换工具,转同一个faster rcnn 模型, 同样的sdk代码,在有些显卡上结果正常,但是再比较新的显卡上(比如Titan V)上 结果完全不正确. 听说之后我的内心其实是 **喵喵喵喵喵?**的 先在模型转换工具中infer了一下,发现...结果竟然真的不一样! 于是又开始了debug faster rcnn 的旅程(奇怪..我为什么要说又) 一份典型的faster rcnn 的 prototxt 按照经验,我们先对照了ROIS,来判断RPN 是否存在问题 惊讶地发现,竟然是没有问题的... 那看一下模型的输出 cls_score 和 bbox_pred好了 发现cls_score 完 …
Read More -
花了三个月的时间,终于跟完了这门编程语言课. 课程内容非常赞,而且也充分发挥了coursera平台的作用. 非要说缺点的话,就是这门课时间有点短,以及peers' assignments总是找不到人... 这么课是什么 这门课并不是在讲一门特定的编程语言,而是在讲一些通用的编程语言概念. 课程本身大体上上分为三部分,分别结合sml,racket,ruby三门语言来讲. 每部分大体先是视频内容(有同样内容的文字pdf,便于查询),然后要完成一项作业(10节中有8节是编程作业,2节是多选题的笔试) 作业过后,是备受好评的(?) peers' assignments的环节. 不过由于每个人的作业只能被其他三个人评分...所以如果没有对3 …
Read More