Jan 12, 2020 · 1790 words · 4 mins
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: 64 10 } 11} 12layer { 13 name: "ip" 14 type: "InnerProduct" 15 bottom: "data" 16 top: "ip" 17 inner_product_param { 18 num_output: 2 19 } 20} 21layer { 22 name: "loss" 23 type: "SoftmaxWithLoss" 24 bottom: "ip" 25 bottom: "label" 26 top: "loss" 27} 定义了
Jan 11, 2020 · 2896 words · 6 mins
layer 整体介绍 # layer 是模型计算的基本单元, 类似于 pytorch 或者其他深度学习框架的 op。 layer 中的数据流向为:输入若干个 blob,称之为 “bottom blob”,经过 layer 的计算后,输出若干个 blob,称之为 “top blob”。
Jan 10, 2020 · 1189 words · 3 mins
迫于生计,开始看 caffe 代码。 会侧重于分析 inference 部分。
整体的依赖关系是:Net 由 Layer 组成,Layer 之间通过 Blob 传递数据。后面几篇会分别展开这三者。
blob 整体介绍 # blob 的含义及目的 # blob 在逻辑上表示的就是所谓的 tensor,blob 是 tensor 在 caffe 中的叫法。 在框架层面上,blob 的意义在于对数据进行封装,提供统一的接口。 这里的数据包含训练/inference 时用的数据,也包含模型参数、导数等数据。 深度学习离不开在 GPU 上的计算,blob 对数据的封装使得用户不必关心和 cuda 有关的数据传输细节。
Dec 13, 2019 · 1513 words · 4 mins
问题描述 # 一年debug 三次faster rcnn,每次都有新感觉(不
接到一个bug report,现象为某人脸模型,转换成trt模型,当batch size为1时结果完全正确,但是batch size大于1时结果不正确。 具体的现象是,如果跑多张不同的图,只有第一张图有结果,后面的图都没有结果。 如果跑的图中有相同的,那么和第一张相同的图都会有结果,其余的图没有结果。
Dec 8, 2019 · 3935 words · 8 mins
检测不同尺度的物体一直是计算机视觉领域中比较有挑战性的事情.我们先从之前的工作出发,并对比FPN比起之前的工作有哪些改进.
之前的工作 # Featurized image pyramid # 思路是对于同一张图,生成不同的scale,然后每个scale的image单独去做检测. 这个方法是手工设计feature时代的常用办法. 这个办法是比较显然的,也的确可以解决检测不同尺度物体的问题. 缺点非常明显…inference的速度几乎和scale的个数线性相关. 以及由于显存的开销,没办法做end-to-end 的training.
Dec 8, 2019 · 3374 words · 7 mins
概述 # SSD是一种单阶段目标检测算法.所谓单阶段,是指只使用了一个deep neural network,而不是像faster-rcnn这种两阶段网络. 为什么有了faster-rcnn还要使用SSD? 最主要是慢… 两阶段网络虽然准确率高,但是在嵌入式等算力不足的设备上做inference速度非常感人,很难达到real time的要求. (实际业务上也是这样,公有云上的检测模型几乎都是faster-rcnn,而到了一些盒子之类的硬件设备,检测模型就全是SSD等single stage 模型了)
Nov 26, 2019 · 1377 words · 3 mins
boosting 算法是什么 # 机缘使然,接触到了 Boosting 算法.Boosting是一种通过组合弱学习器来产生强学习器的通用且有效的方法.
动机是基于如下观察:尽管委员会中每个成员只提供一些不成熟的判断,但整个委员会却产生较为准确的决策。通过组合多个弱学习器来解决学习问题。给定训练数据,弱学习算法(如决策树)可以训练产生弱学习器,这些弱学习器只需要比随机猜测的准确率好一些。用不同的训练数据训练可以得到不同的弱学习器。这些弱学习器作为委员会成员,共同决策。
Nov 22, 2019 · 1886 words · 4 mins
年中的时候接了离职的同事模型转换的锅,在不断地更新迭代的过程中,发现了一些痛点。 发现k8s能够解决一部分痛点,因此来分享一下在这方面的探索。
什么是模型转换 # 简单来说,深度学习模型的流程分为training和inference两部分。训练时用的一般是pytorch等框架,这些框架训练出的model是没办法直接部署在各个硬件平台上做inference的。因此需要将使用训练框架得到的模型,转换为能够部署到各个硬件平台上的模型。这个过程就是模型转换。
Nov 7, 2019 · 699 words · 2 mins
最近有同事report给我们,用同一个模型转换工具,转同一个faster rcnn 模型, 同样的sdk代码,在有些显卡上结果正常,但是再比较新的显卡上(比如Titan V)上 结果完全不正确.
Oct 19, 2019 · 721 words · 2 mins
花了三个月的时间,终于跟完了这门编程语言课. 课程内容非常赞,而且也充分发挥了coursera平台的作用. 非要说缺点的话,就是这门课时间有点短,以及peers’ assignments总是找不到人…
Jul 3, 2019 · 1340 words · 3 mins
概述 # YUV是一种图像编码方式,或者称为色彩空间,与RGB是同级的概念. YUV是三个分量,Y,U和V,其中:
Y 表示明亮度(Luminance或Luma),也就是灰度值, U,V表示色度,浓度(Chrominance、Chroma),可以简单理解成用来表示某个像素的颜色的量. YUV格式的特点是,在对照片或影片编码时,考虑到人类的感知能力,允许降低色度的带宽。 也就是说,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
Jul 1, 2019 · 695 words · 2 mins
动机 # 将一张图分成多个grid cell进行检测之后,每个cell只能检测到一个object. 如果这个grid cell中不止有一个物体要怎么办呢? 因此提出了anchor box algorithm来解决这个问题.
Jun 30, 2019 · 435 words · 1 min
对象检测(Object Detection)的目的是”识别对象并给出其在图中的确切位置”,其内容可解构为三部分:
识别某个对象(Classification); 给出对象在图中的位置(Localization); 识别图中所有的目标及其位置(Detection)。 这里介绍滑动窗口这一方法。
Jun 29, 2019 · 1046 words · 3 mins
转眼毕业一整年了,是时候做一个复盘了。 依稀记得刚入职的时候leader提醒我要有职业规划时的场景。总体来说,这一年虽然没有完全走在最正确的路线上,但是大方向应该没有太偏。
Jun 1, 2019 · 127 words · 1 min
发现工作之后更新博客的频率低了很多,以及迫于不想在自己维护服务器了,因此决定把博客迁移到hugo上。
由于原本的博客内容实在是太多了,因此目前只做了大致的迁移,基本可以保证每篇文章都是可以访问的。
May 1, 2019 · 213 words · 1 min
在steam上买了 BattleBlock Theater, 官方说支持linux,但是却无法启动。
在steam里启动看不到log,于是找到游戏的安装目录。
/home/coder/.steam/steam/steamapps/common/BattleBlock Theater
在终端下启动,报错:
BattleBlockTheater: /media/BGBS/BBT_Linux/Core/MemorySystem.cpp:161: void* MemoryBlock::Alloc(unsigned int): Assertion ‘(!“Got request for zero bytes!”)’ failed. ^C[1] 22303 abort (core dumped) ./BattleBlockTheater
Mar 3, 2019 · 4694 words · 10 mins
JOS的environments基本可以理解成"process"进程的同义词,但是由于"process"是一个unix术语,因此使用environment这个词.
Feb 28, 2019 · 2606 words · 6 mins
CSAPP第二章的内容以前组成原理基本都学过…所以就简单翻了翻。
对应的lab是用位运算实现各种有的没的…
题目基本都很tricky…
Feb 23, 2019 · 76 words · 1 min
系统版本为Manjaro 18.0.3 Illyria
运行文明5比较容易,只需要设置启动选项为:
LD_PRELOAD=/usr/lib32/libopenal.so.1 %command%
文明6运行会报错 undefined symbol: FT_Done_MM_Var
解决办法是 在终端中用如下办法运行steam:
LD_PRELOAD=/usr/lib/libfreetype.so steam
参考链接
Feb 18, 2019 · 1262 words · 3 mins
Halide is a programming language designed to make it easier to write high-performance image and array processing code on modern machines.
halide有两个特性比较吸引人。一个是对于各种平台架构的支持。
CPU architectures: X86, ARM, MIPS, Hexagon, PowerPC Operating systems: Linux, Windows, macOS, Android, iOS, Qualcomm QuRT GPU Compute APIs: CUDA, OpenCL, OpenGL, OpenGL Compute Shaders, Apple Metal, Microsoft Direct X 12 另一个是把计算什么和怎么计算(何时计算)分离开来。