JPEG压缩图像增强综述
【注】参考自 Jiaying Liu 等的论文「A Comprehensive Benchmark for Single Image Compression Artifact Reduction」。
1. 常用数据集
1.1 数据集特征
1.2 数据集性能
2. 研究历史
压缩图像增强主要分为深度学习方法和非深度学习方法。
2.1 非深度方法
2.2 深度方法
深度方法目前主要分为两个主流:
研究更好地网络结构
研究更好地利用 DCT 域信息
2.3 性能指标
3. JPEG 压缩增强
JPEG 编码导致图像失真的主要因素:
量化过程导致 Blocking Artifacts
去除高频信息导致 Blurring
在尖锐的图像边缘出现 Ringing Artifacts
过大的量化(QF 较小时)导致光滑区域出现 Banding Effects
Python函数式编程
1. 装饰器
在代码运行期间动态增加功能的方式,称之为「装饰器」(decorator)。本质上,decorator 就是一个返回函数的高阶函数,它需要接受一个函数作为输入参数,并返回一个函数。
12345def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper
上面的 log 就是一个 decorator。Python 的 @ 语法可以把 decorator 置于函数的定义处:
123@logdef now(): print('2015-3-25')
此时调用 now 函数,会在运行 now 前运行 log(now) 打印日志。
2. 偏函数
functools.partial 的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。
12345678from functools ...
幂矩阵和初等矩阵函数
1. 幂等矩阵
1.1 定义
若矩阵 An×n\boldsymbol{A}_{n \times n}An×n 满足:
A2=AA=A\begin{array}{c}
\boldsymbol{A}^2 = \boldsymbol{AA} = \boldsymbol{A}
\end{array}
A2=AA=A
则称矩阵 A\boldsymbol{A}A 为幂等矩阵。
1.2 性质
函数 f(sI+tA)=(I−A)f(s)+Af(s+t)
f(s\boldsymbol{I} + t\boldsymbol{A}) = (\boldsymbol{I} - \boldsymbol{A})f(s) + \boldsymbol{A}f(s + t)
f(sI+tA)=(I−A)f(s)+Af(s+t)
猜想
此处以及后面的函数 f(⋅)f(\cdot)f(⋅) 应该是需要具备一定条件的,我猜可能是需要是要求 f(⋅)f(\cdot)f(⋅) 能够进行泰勒展开。但我没有找到相关参考文献,有知道的朋友希望能告知一下~
2. 对合矩阵(幂单矩阵)
2.1 定义
若矩阵 An×n\boldsy ...
矩阵特殊运算
【注】对于相同的特殊运算不同书籍可能使用的符号不同,本文采用与 Wikipedia 相同的符号表示。
1. 直和
1.1 定义
m×mm \times mm×m 矩阵 A\boldsymbol{A}A 与 n×nn \times nn×n 矩阵 B\boldsymbol{B}B 的直和记作 A⊕B
\boldsymbol{A} \oplus \boldsymbol{B}
A⊕B,它是一个 (m+n)×(m+n)(m+n) \times (m+n)(m+n)×(m+n) 的矩阵,定义为
A⊕B=[A0m×n0n×mB]\begin{array}{c}
\boldsymbol{A} \oplus \boldsymbol{B} = \left[
\begin{matrix}
\boldsymbol{A} & \boldsymbol{0}_{m \times n} \\
\boldsymbol{0}_{n \times m} & \boldsymbol{B}
\end{matrix}
\right]
\end{array}
A ...
向量空间
下文和标量域 K\mathbb{K}K 是指实数域 R\mathbb{R}R 或复数域 C\mathbb{C}C。
空间
说明
向量空间
定义了向量的加法和数乘,以向量为元素的集合 Rn\mathbb{R}^nRn 或 Cn\mathbb{C}^nCn。
内积空间
定义了内积 <x,y><\boldsymbol{x}, \boldsymbol{y}><x,y> 的向量空间。
赋范空间
定义了范数 ∥x∥\lVert \boldsymbol{x} \rVert∥x∥ 的向量空间,可度量向量的长度、距离与邻域。
Banach 空间
Cauchy 序列满足 limn→∞vn→v\lim_{n \rightarrow \infty} \boldsymbol{v}_n \rightarrow \boldsymbol{v}limn→∞vn→v,∀vn,v∈Cn\forall \boldsymbol{v}_n, \boldsymbol{v} \in \mathbb{C}^n∀vn,v∈Cn 的完备赋范空间。
Hilbert 空 ...
矩阵微分
独立性假设
假定实值函数的向量变元 x=[xi]i=1m∈Rm
\boldsymbol{x} = [x_i]_{i=1}^m \in \mathbb{R}^m
x=[xi]i=1m∈Rm 或者矩阵变元 X=[xij]i=1,j=1m,n∈Rm×n
\boldsymbol{X} = [x_{ij}]_{i=1,j=1}^{m,n} \in \mathbb{R}^{m \times n}
X=[xij]i=1,j=1m,n∈Rm×n 本身无任何特殊结构,即向量或矩阵变元的元素之间是各自独立的。用数学公式表达如下:
∂xi∂xj=δij={1i=j0others∂xkl∂xij=δkiδlj={1k=i∩l=j0others\begin{array}{c}
\frac{\partial x_i}{\partial x_j} = \delta_{ij} = \begin{cases}
1 & i = j \\
0 & others
\end{cases} \\
\frac{\partial x_{kl}}{\partial x_{ij}} = \delt ...
Rime中文输入方案
【注】更多功能参见 Rime 官网。
1. 简介
Rime 可谓是一款「神级」中文输入框架,支持多种输入法,诸如拼音、注音、仓颉、速成、五笔、双拼、宫保拼音、粤拼、吴语、中古汉语拼音、五笔画、Emoji、国际音标 …… 同时 Rime 也是一款开源跨平台的软件,支持平台有:
【中州韻】 ibus-rime、fcitx-rime →\rightarrow→ Linux
【小狼毫】 Weasel →\rightarrow→ Windows
【鼠鬚管】 Squirrel →\rightarrow→ Mac OS X
Rime 安装后默认自带几种输入法,比如「朙月拼音」、「注音」、「地球拼音」等。
2. 安装
各个平台上的具体安装以及更多的输入法的安装见官方地址。
3. 选择输入法
安装完成后,按快捷键 Ctrl + ` 或 F4 唤出输入法选单,然后根据个人需求切换输入法。
4. 同步数据
Rime 还提供保存用户输入数据的功能,保存的用户输入数据用于 Rime 提供更加个性化的输入方案,包括用户常用的字、词等;同时,也可以将保存的用户输入数据移植到其他新平台等。设置 Rime 用户数据 ...
Toeplitz矩阵和循环矩阵
1. Toeplitz矩阵
1.1 定义
Toeplitz(特普利茨)矩阵又称为常对角矩阵,该矩阵每条左上至右下的对角线均为常数。Toeplitz矩阵 AAA 为满足以下条件的矩阵:
Aij=Ai+1,j+1\begin{array}{c}
A_{ij} = A_{i+1,j+1}
\end{array}
Aij=Ai+1,j+1
其一般形式为:
A=[a0a−1⋯a−(n−1)a1a0⋯a−(n−2)⋮⋮⋱⋮an−1an−2⋯a0]\begin{array}{c}
A = \left[
\begin{matrix}
a_0 & a_{-1} & \cdots & a_{-(n-1)} \\
a_{1} & a_0 & \cdots & a_{-(n-2)} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n-1} & a_{n-2} & \cdots & a_0
\e ...
图像处理经典网络
【注】本文采用 PyTorch 框架,基于 Fashion-MNIST 数据集。
1. LeNet
LeNet分为卷积层块和全连接层块两个部分。
1.1 卷积层块
卷积层块⾥的基本单位是卷积层后接最⼤池化层:卷积层⽤来识别图像⾥的空间模式,如线条和物体局部,之后的最⼤池化层则⽤来降低卷积层对位置的敏感性。
在卷积层块中:每个卷积层都使⽤ 5×55 \times 55×5 的窗⼝,并在输出上使⽤ sigmoid 激活函数。第⼀个卷积层输出通道数为 6 ,第⼆个卷积层输出通道数则增加到 16 。这是因为第⼆个卷积层⽐第⼀个卷积层的输⼊的⾼和宽要⼩,所以增加输出通道使两个卷积层的参数尺⼨类似。
卷积层块的两个最⼤池化层的窗⼝形状均为 2×22 \times 22×2,且步幅为 2 。由于池化窗⼝与步幅形状相同,池化窗⼝在输⼊上每次滑动所覆盖的区域互不重叠。
卷积层块的输出形状为(批量⼤⼩, 通道, ⾼, 宽)。
1.2 全连接层块
当卷积层块的输出传⼊全连接层块时,全连接层块会将⼩批量中每个样本变平(flatten)。也就是说,全连接层的输⼊形状将变成⼆维,其中第⼀ ...
AdaDelta
1. 简介
AdaDelta 算法是 AdaGrad 算法的改进,和 RMSprop 算法类似,AdaDelta 算法通过梯度平方的指数衰减移动平均来调整学习率;此外,AdaDelta 算法还引入了每次参数更新差值 Δθ\Delta \thetaΔθ 的平方的指数衰减移动平均。
2. 原理
第 ttt 次迭代时:
首先计算参数更新差值 ΔW\Delta WΔW 的平方的指数衰减权值移动平均为:
ΔXt−12=β1ΔXt−22+(1−β1)ΔWt−1⊙ΔWt−1\begin{array}{c}
\Delta \boldsymbol{X}_{t-1}^2 = \beta_1 \Delta \boldsymbol{X}_{t-2}^2 + (1-\beta_1) \Delta \boldsymbol{W}_{t-1} \odot \Delta \boldsymbol{W}_{t-1}
\end{array}
ΔXt−12=β1ΔXt−22+(1−β1)ΔWt−1⊙ΔWt−1
然后计算每次迭代梯度 ∂L∂W\frac{\partial L}{\partial \boldsy ...
RMSprop
1. 简介
RMSprop 算法是 AdaGrad 算法的改进,可以在有些情况下避免 AdaGrad 算法中学习率不断单调下降以至于过早衰减的缺点。
2. 原理
第 ttt 次迭代时:
RMSprop 算法首先计算每次迭代梯度 ∂L∂W\frac{\partial L}{\partial \boldsymbol{W}}∂W∂L 平方的指数衰减移动平均:
ht=βht−1+(1−β)∂L∂Wt−1⊙∂L∂Wt−1\begin{array}{c}
\boldsymbol{h}_t = \beta \boldsymbol{h}_{t-1} + (1-\beta)\frac{\partial L}{\partial \boldsymbol{W}_{t-1}} \odot \frac{\partial L}{\partial \boldsymbol{W}_{t-1}}
\end{array}
ht=βht−1+(1−β)∂Wt−1∂L⊙∂Wt−1∂L
其中,β\betaβ 为衰减率,一般取指为 0.90.90.9 。
RMSprop 算法的参数更新公式为:
Wt=Wt−1 ...
自动求梯度
【注】参考自邱锡鹏的《神经网络与深度学习》。
自动计算梯度的方法主要分为三类:数值微分、符号微分和自动微分。
1. 数值微分
1.1 原理
根据函数 f(x)f(x)f(x) 在点 xxx 处的导数的定义:
f′(x)=limΔx→0f(x+Δx)−f(x)Δx\begin{array}{c}
f^{'}(x) = \lim_{\Delta x \rightarrow 0} \frac{f(x+\Delta x) - f(x)}{\Delta x}
\end{array}
f′(x)=limΔx→0Δxf(x+Δx)−f(x)
通过给定一个很小的非零扰动 Δx\Delta xΔx,即可通过上述定义直接求出导数 f′(x)f^{'}(x)f′(x)。在实际应用中,为减小截断误差,常采用以下公式来计算梯度:
f′(x)=limΔx→0f(x+Δx)−f(x−Δx)2Δx\begin{array}{c}
f^{'}(x) = \lim_{\Delta x \rightarrow 0} \frac{f(x+\Delta x)-f(x-\Delta x)} ...