汉明码
1. 简介
汉明码是一种完备的线性码,具有很多很好的性质,而且其译码方法也非常简洁高效。
2. 汉明码
2.1 二元汉明码
定义一:设 rrr 是一个正整数,设 H\boldsymbol{H}H 是一个 r×(2r−1)r \times (2^r - 1)r×(2r−1) 阶矩阵,其列向量由 V(r,2)V(r, 2)V(r,2) 中的所有不同的非零向量组成。以 H\boldsymbol{H}H 为校验矩阵的线性码称为二元汉明码,记为 Ham(r,2)\mathrm{Ham}(r, 2)Ham(r,2)。
显然,二元汉明码 Ham(r,2)\mathrm{Ham}(r, 2)Ham(r,2) 的码长为 n=2r−1n = 2^r - 1n=2r−1,维数为 k=n−r=2r−1−rk = n - r = 2^r - 1 - rk=n−r=2r−1−r,rrr 为校验位的数目。在等价意义下,Ham(r,2)\mathrm{Ham}(r, 2)Ham(r,2) 是惟一的。
2.2 多元汉明码
定义二:设 rrr 是一个正整数,对任意 α∈V(r,q)\boldsymbol{ ...
编码理论基础
1. 码的定义
定义一:设 AAA 是一个有限集合,称之为字母表。AAA 中元素构成的有限序列称为字或串。一个字中的元素的个数称为字长。
定义二:设 AAA 是一个字母表。AAA 上所有字的集合记为 A∗A^*A∗。A∗A^*A∗ 中包含一个长度的零的特殊字,称之为空字,记为 ε\varepsilonε。对 A∗A^*A∗ 中的任意两个字 xxx 和 yyy,将 yyy 排在 xxx 后面得到 xyxyxy,xyxyxy 显然还是 A∗A^*A∗ 中的一个字,即运算即为字的拼接运算。显然,A∗A^*A∗ 对拼接运算为带幺半群,单位元为空字 ε\varepsilonε。
定义三:设 CCC 是 A∗A^*A∗ 的一个子集。如果对任意 c1,c2,⋯ ,cm,c1′,⋯ ,cn′∈Cc_1, c_2, \cdots, c_m, c_1^{'}, \cdots, c_n^{'} \in Cc1,c2,⋯,cm,c1′,⋯,cn′∈C,当
c1c2⋯cm=c1′c2′⋯cn′c_1 c_2 \cdots c_m = c_1^{'} c_2^{ ...
线性码
1. 简介
线性码是一类非常重要的分组码,是讨论各种码的基础。线性码的编码方案和译码方案都非常简单。许多特殊的线性码都具有非常好的性质,绝大多数的已知好码都是线性码。
2. 线性码
定义一:如果 C⊆V(n,q)C \subseteq V(n, q)C⊆V(n,q) 是 V(n,q)V(n, q)V(n,q) 的一个子空间,则称 CCC 为一个 qqq 元线性码。如果 CCC 是 V(n,q)V(n, q)V(n,q) 的一个 kkk 维子空间,则称 CCC 为一个 qqq 元 [n,k][n, k][n,k] 线性码。进一步,如果 CCC 的最小距离是 ddd,则称 CCC 为一个 qqq 元 [n,k,d][n, k, d][n,k,d] 线性码。
性质
显然,C⊆V(n,q)C \subseteq V(n, q)C⊆V(n,q) 是一个线性码当且仅当
对任意 x,y∈C\boldsymbol{x}, \boldsymbol{y} \in Cx,y∈C,都有 x+y∈C\boldsymbol{x} + \boldsymbol{y} \in Cx+y∈C;
对任意 x∈C\b ...
2020-ECCV-End-to-End Object Detection with Transformers
1. 摘要
这篇文章[1]针对目标检测任务给出了一个基于 Transformer 的端到端的神经网络模型 DETR,简单且有效,不再需要任何的前/后处理操作。DETR 可谓是目标检测方向上一个里程碑式的工作。作者将目标检测看作是一个集合预测问题,即给定一个图片,预测出所有的物体框的集合。通过将问题转化为集合预测的问题,结合 Transformer 结构,作者将原先目标检测模型中依赖于人的先验知识的部分(NMS 和 Anchor)都删除了,设计出一个简单的端到端架构 DETR。DETR 通过一个全局的集合 Loss,强制模型针对一个物体只会对应有一个框,而不会生成过多的冗余框。此外,在 DETR 架构中,Transformer 的解码器的输入额外有一项 Learned Object Queries,类似于可学习的 Anchor。DETR 简单且有效(但在目标检测上和 SOTA 还是差了挺多)!
2. 引言
在目标检测领域,以前的深度学习方法主要分为三种:基于 Proposal 的方法、基于 Anchor 的方法和基于 Window Center 的方法。这些方法都没有直接处理几何预测问题 ...
Python包构建工具
1. 简介
Python 官方也提供了关于打包 Python 包的文档:
Packaging Python Projects
相对于官方提供的打包方式,一些第三方打包工具更加方便,比如 Poetry 等。
2. Poetry
源码仓库
官方文档
Poetry 在构建 Python 包解决依赖时,可能需要下载依赖包。Poetry 默认是从 PyPI 官网下载,在国内由于众所周知的原因,下载比较慢,可以更换国内源:
12345豆瓣 https://pypi.doubanio.com/simple/网易 https://mirrors.163.com/pypi/simple/阿里云 https://mirrors.aliyun.com/pypi/simple/腾讯云 https://mirrors.cloud.tencent.com/pypi/simple清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
具体方法为在 pyproject.toml 配置文件中增加下面的配置,以阿里云为例:
123[[tool.poetry.source]] ...
Linux下使用VSCode配置C++调试环境
1. 简介
最近我意识到,调试是一个非常有用的手段。我记得我们当初学习 C++ 语言时,都是使用一个 IDE(比如 CodeBlocks、Dev-C++) 来进行编程和调试;然而随着学习的深入,我发现很多 Debug 工作直接用 printf 就能完成,还是自己接触的工作太少太简单,于是就没太学习调试这方面的知识;直到我开始尝试阅读一个比较大的项目源码。
一个大的项目源码,往往包含一堆的源代码、头文件、配置文件、脚本文件,它们往往又都是通过 Makefile 文件来进行组织维护的。虽然 Makefile 有写明编译的目标和其对应的依赖,但对于大项目来说,错综复杂的依赖关系即使去认真阅读 Makefile 文件也不是那么容易理清,更何况大项目的 Makefile 文件往往为了书写方便进行了大量封装,阅读起来实在困难。
而这时,调试的作用就体现出来了。调试不仅仅可以用来 Debug,我觉得更重要的是它能帮你理清一个程序它是从何而始、至何而终以及它整个执行路线是什么。这便是我这篇文章为什么要介绍配置调试环境的原因。
2. 配置
要让 VSCode 具备 C++ 的调试工能,首先需要安装 ...
CMake相关资料汇总
【注】持续更新中……
CMake 官方文档
An Introduction to Modern CMake
It’s Time To Do CMake Right
CMake 入门实战
Make相关资料汇总
【注】持续更新中……
跟我一起写Makefile
3D视觉
1. 简介
随着自动驾驶、AR & VR 等技术的发展,3D 视觉的研究正方兴未艾。目前 3D 视觉的两个主要问题是:
从一张 2D 图像预测得到 3D 表示
处理 3D 表示数据来实现下游任务(分类、检测、分割等)
2. 3D 表示
目前 3D 视觉表示主要有 555 种方法:深度图(Depth Map)、体素(Voxel Grid)、隐表面(Implicit Surface)、点云(Point Cloud)、网格(Mesh)。
2.1 深度图
深度图(Depth Map)表示是指在原来的 2D 图像基础上,再增加一个深度图信息。
2.1.1 RGB-D
一种直接的方式是测量 2D 图像中每个点到相机的距离作为深度图,也即:
RGB image + Depth image = RGB-D image (2.5D)
然而这种方式其实不是完全的 3D,因此我上文写的是 2.5D。因为这样表示的深度图缺乏尺度信息,因而会对实际的深度产生歧义:
针对这个问题,Eigen 等人[1]提出了一种 scale-invariant MSE 损失,来训练其提出的深 ...
2017-NIPS-PointNet++:Deep Hierarchical Feature Learning on Point Sets in a Metric Space
1. 摘要
这篇文章[1]是 PointNet 的改进版。PointNet 是直接将神经网络用于点云数据处理的先锋,虽然 PointNet 在 3D 任务上取得不错的效果,但其还是存在不足。PointNet 忽略了点云数据间的空间局部结构,从而不能很好地识别更细粒度的模型,也不能很好地泛化到复杂的场景。PointNet++ 则针对这个问题,在 PointNet 基础上引入了层级式的嵌套结构来捕获局部特征。此外,真实的点云数据采集往往是不均匀的(因为采样时是从传感器点状发出信号的,自然离传感器近的采样密度高,远的密度低),而这会导致在均匀采样的点云数据集下训练的模型性能产生明显下降。作者在 PointNet++ 中提出了一种新的针对集合数据的学习层,其可以自适应地结合不同尺度下学习到的特征。广泛的实验数据显示 PointNet++ 可以有效且鲁棒地学习到深层的点云数据集合特征,在 3D 点云任务上达到了超越已有的 SOTA 性能。
2. 引言
作者强调了一下点云数据的特殊性,即其作为集合数据的无序性。而另一方面,点云数据中的点之间还存在局部的相邻信息,这种结构信息在不同区域会展现非常不同 ...
2017-CVPR-PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation
1. 摘要
这篇文章[1]主要提出了一种用于点云数据的神经网络模型,即 PointNet。点云在 3D 视觉中是一种重要的数据结构,其主要分为几何数据和属性数据。几何数据就是每个点的 x,y,zx,y,zx,y,z 坐标,而属性数据则是每个点的颜色等信息。这篇文章主要针对几何数据进行处理。由于 3D 点云这种不规则的数据格式,之前大多数深度学习方法都是将点云几何数据变换成规则的体素网格或者一系列 2D 图像的集合,但是这些方法的复杂度都太高,增加了很多不必要的计算。在这篇文章中,作者提出了一种新的用于处理点云几何数据的神经网络,它直接在点云数据上进行处理,并且很好地考虑了输入点的排列不变性。本文提出的 PointNet 模型,是一个统一的架构,可以用于各种点云任务,比如物体分类、语义分割等。虽然 PointNet 结构比较简单,但却是非常高效且有用的。从实验上来看,PointNet 展现出相当或超越 SOTA 的性能;从理论分析上来看,作者给出了 PointNet 的设计理念以及解释了 PointNet 为什么对扰动和噪声是鲁棒的。
2. 引言
传统的 CNN 架构都要求输入数据的格式 ...
计数
古代汉字计数用语如下表所示:
计数用语
代表数量
大写
一
111
壹
二
222
贰
三
333
叁
四
444
肆
五
555
伍
六
666
陆
七
777
柒
八
888
捌
九
999
玖
十
101010
拾
廿(niàn)
202020
卅(sà)
303030
卌(xì)
404040
圩(xū)
505050
圆(yuán)
606060
进(jìn)
707070
枯(kū)
808080
枠(huà)
909090
百
100100100
佰
皕(bì)
200200200
千
100010001000
仟
万
10,00010,00010,000
万
亿
兆
京
垓
秭
穰
沟
涧
正
载
大写数字:大写数字的出现是古代为了防止帐本等被涂改,利用与数字同音的方式发明出来的,以在涉及金额时取代数字的书写。
个十百千万,数量级都相差为 101010;但是对于万 ...