FasterRCNN 代码拆解

FasterRCNN 代码拆解

FasterRCNN 代码拆解相关代码可以查看github深度学习模型感觉像是乐高积木,那我尝试和小孩子一样把乐高拆看看,如果能再拼起来会觉得这玩具就再也没意思,会想着怎么改进玩法之类的。我选 Pytorch 官方 torchvision 中的实现拆开来看看。本文不尝试去解释 FasterRCNN 是什么的问题,也就是不会去解释太多目标检测相关的东西,只是从代码实现层,看看 torchvision 是怎么实现的。总体流程大致如上图,输入图像经过 transform 进行预处理,然后输入到 Feature 部分, backbone 和 FPN 可以算作特征抽取和融合的作用,但是严格的区分谁...

机器学习 2020-07-25 PM 787℃ 0条
[Darknet源码]4. 全连接层的实现

[Darknet源码]4. 全连接层的实现

定义一个新的 layer 主要分四个步骤,其实就是实现四个方法初始化方法前向后向更新参数对应到全连接层就是下面四个方法layer make_connected_layer(int batch, int inputs, int outputs, ACTIVATION activation, int batch_normalize, int adam); void forward_connected_layer(layer l, network net); void backward_connected_layer(layer l, network net); void update_con...

机器学习 2020-07-06 AM 456℃ 0条
[Darknet源码]3.主要数据结构

[Darknet源码]3.主要数据结构

这里的数据结构指的主要是各种 struct, 我把它们分为两种,一种是辅助性结构体, 比如list 和image另一种是和模型相关的结构体比如 net 和 layer. 大部分通用的结构都在 darknet.h 中定义。Darknet里 没有 Tensor 的概念,但对神经网络还是分为 net 和 layer两个net 的部分定义如下,主要的组成是指针 layer *layer, 还会存储一些网络训练需要的全局参数,比如优化相关的参数。 typedef struct network{ int n; int batch; size_t *seen; int ...

机器学习 2020-07-06 AM 425℃ 0条
[Darknet 源码]2.模型训练的流程

[Darknet 源码]2.模型训练的流程

先介绍下怎么把框架用起来,比如要自定义一个自己的文本分类任务该在哪里修改,需要做哪些事情。Darknet训练模型的 pipline 如何。官方文档的例子 跑一下 cifa10 的分类模型./darknet classifier train cfg/cifar.data cfg/cifar_small.cfgcfg/cifar.data 是数据相关的配置, 分类模型的配置在 cfg/cifar_small.cfg 中任务定义分析下图像分类模型的流程,Darknet 也主要用来做图像任务,我尝试来定义一个文本分类的任务,现在是空壳任务,只是把代码加进去入口文件examples/darknet...

机器学习 2020-07-05 PM 432℃ 0条
[Darknet源码] 1. 整体代码结构及 Makefile 详解

[Darknet源码] 1. 整体代码结构及 Makefile 详解

Darknet 是一个深度学习框架,相对小巧轻量,不涉及计算图,自动微分等概念。darkent 的代码也没有太多抽象,没有 Tensor 的结构, 所有在网络中传输的对象都是用 float *完成的,所以读懂代码的门槛相对较低。但这也会带来一些问题,框架本身不能提供像 tensorflow 或者 pytorch 那样灵活的前端 API ,由于没有太多抽象,所以每个 layer 的实现都需要对底层的指针操作很熟悉。读代码的目的就是好奇 darknet 是怎么实现的。先统计一下代码量,总共 3 万行左右, 核心 C 的代码应该 2 万左右,当然代码量不能说明太多问题,Redis 也才一万多...

机器学习 2020-07-05 PM 652℃ 0条
用 C 实现 CNN 图像分类

用 C 实现 CNN 图像分类

模仿 darknet 的实现和 华盛顿大学深度学习课程 实现的图像分类,感兴趣的直接看源码, 能在 linux 和 mac 上运行看懂代码需要一些基础C 语言基础,特别是对指针的理解线性代数,最主要的矩阵运算的一些基础就好微积分,知道如何求导数相关数据结构由于没有实现多维的 tensor ,也没有计算图自动微分这些, 数据在网络中的存储和传递都是通过 matrix 这个结构体typedef struct matrix{ int rows; int cols; float *data; } matrix;rows 和 cols 存储矩阵的 行数和列数, *data 是浮点型的指...

机器学习 2020-06-27 PM 464℃ 0条
图像二值化算法-传统方法

图像二值化算法-传统方法

图像二值化在 OCR 里面是比较重要的部分在我写的标注工具离 地址实现了下面的算法Otsu - "A threshold selection method from gray-level histograms", 1979.Bernsen - "Dynamic thresholding of gray-level images", 1986.Niblack - "An Introduction to Digital Image Processing", 1986.Sauvola - "Adaptive document image binarization", 1999.Wolf - "...

机器学习 2020-06-10 PM 480℃ 0条
FastText 的模型压缩

FastText 的模型压缩

最近又重新回去读 Fasttext 的代码,对模型压缩的部分比较感兴趣,仔细看了下在 Fasttext 中分类模型是把 句子中每个词的 word embedding 求平均再做 Softmax 分类 , 所以参数模型的参数有两部分,一部分是 Word Embedding , 另一部分是 Softmax 分类器中的权重,FastText 的压缩主要有两部分组成,第一部分是对 vocab 进行剪枝,另一部分是 Product Quantizers.vocab 剪枝在训练训练分类去的时候 FastText 为了解决 OOV 的问题加入了字符的 ngram, 由于通常词典本身就很大,加上 ngr...

2020-05-10 PM 825℃ 0条
[表格重构]Complicated Table Structure Recognition

[表格重构]Complicated Table Structure Recognition

论文Complicated Table Structure Recognition 尝试用图的方法重构表格的结构。 文章代码文章想解决的问题如上图,在表格重构的时候文本块是属于同一行还是下一行肉眼很清楚,但是机器一般很难做到,存在单元格合并的问题。文章的整个做法如下图:从 PDF 中提取文本 chunk 的坐标和内容, 然后根据 chunk 之间的关心构造一个图,模型输入是顶点和边的特征,以及图的关系,预测边的类型,边的类型分为三种,上面蓝色的线表示 chunk 是同行的,红色的线表示是下一行的,另外一种就是没关系。顶点的特征如下: return { "x1&qu...

机器学习 2020-03-31 PM 734℃ 0条
DB 场景文字检测

DB 场景文字检测

文章Real-time Scene Text Detection with Differentiable Binarization 提出的文字检测模型 DB 是 Differentiable Binarization 缩写。基于分割的方法通常需要设着一个阈值来判断像素是否属于文字区域。作者发现对每个像素分类的模型最终产生的概率分布会呈现出边界比较高概率的样子。所以为了让分割效果更加稳定引入了监督信息,引入的方式是在普通的像素级的分类模型上增加一个辅助分支,来动态预测每个点的分割的阈值 $T_ij$ 然后用下面的公式来判断某个像素是否属于文字区域。训练的时候需要一个 thresh_map ...

机器学习 2020-03-28 PM 1714℃ 0条
EAST 场景文字检测

EAST 场景文字检测

EAST: An Efficient and Accurate Scene Text Detector arXiv:1704.03155v2EAST 是文字检测算法,输入:图片,输出: 图片中文字的位置EAST 的主要创新在对文字位置的定义,也就是文字检测这个问题的定义. 从而简化整个检测的流程,达到比较好的速度和准确率。EAST 主要考虑的是文字标注为四边形的情况,文中提出了两种方式, 带角度的矩形框 (RBOX) 和 四边形 (QUAD)。 我解释下 QUAD , RBOX 相对会更加复杂和麻烦。如果我们把最终的特征上采样到和输入图片一样大,EAST 相当于是在每个像素点预测当前像素...

机器学习 2020-03-09 PM 1112℃ 0条
目标检查中的 Anchor

目标检查中的 Anchor

在 Faster R-CNN 中引入的 RPN 分支利用对 Anchor 的分类(前景还是背景)和位置回归来选择 Region Proposal 和调整其位置。Anchor 对应到输入图像是就是一个矩形区域,对应到特征图(feature map)上的一个特征点。在原图上可以用左上角和右下角两个点坐标来定义: [x_min, y_min, x_max, y_max]Anchor 的生成在早些时候是用一个框在图像上滑动,比如下面这样,每个小方块就是一个选取的区域,对这个区域提取特种,并分类Anchor 的生成和这个逻辑类似,我们定义图书这些方块的边长为 base_size , 在每个位置,...

机器学习 2020-02-19 PM 639℃ 0条
利用序列模型实现 HTML 信息抽取

利用序列模型实现 HTML 信息抽取

爬虫从互联网获取的数据是非结构化的, 信息抽取会成为很多重要的环节。我要抽取的是从各种不同的网站获取的 HTML 中的中标信息,HTML 来自成千上万的网站,下面是两个例子截图,红色部分为需要抽取的内容。要抽取的内容是第一中标公司,第一中标公司的联系人和对应中标金额共三个字段。可以看到这和通用的实体抽取还有些区别,有点儿角色标注的意思。 第一个想到的是用实体识别的方法,但是 HTML 是有结构信息的,简单的扔掉 HTML 标签从纯文本中抽取,将导致很多信息的丢失,比如表格信息,“第一中标人”这个表头,很可能就和对应的公司在纯文本中相距甚远,导致最终很难到一个比较好的效果。另一个想法是利用...

机器学习 2020-02-17 AM 428℃ 0条
mmdetection data pipeline

mmdetection data pipeline

mmdetection 是基于 Pytorch 的目标检测框架。本文对整个数据的处理流程做一个梳理Pytorch data utilsDatasetPytorch 定义了一个相当方便和简洁的数据流程,在 torchvision 中也有比较好的实现,Dataset 的接口定义如下, 主要重写 object 的两个方法, __getitem__ 和 __len__ 这个类的作用是存储原始数据相关的信息,我们要实现自己的Dataset 可以继承这个类,实现两个抽象方法就好class Dataset(object): r"""An abstract clas...

机器学习 2020-01-30 PM 1402℃ 0条