0%

常用hexo 命令

1
2
3
4
5
6
hexo new xxx ==> hexo n xxx, #新建文章
hexo generate ==> hexo g, #生成静态页面至public目录
hexo server ==> hexo s, #开启预览访问端口
hexo deploy ==> hexo d, #部署到GitHub
hexo help #查看帮助
hexo version #查看Hexo的版本

组合命令

1
2
hexo s -g # 生成本地预览
hexo d -g # 生成并上传

预览部分文字

< !— more — > in your article to break your article manually, which is recommended by Hexo.

遇到hexo generation 出错处理

检查Markedown (vscode markdown语法检查)

1
2
3
hexo clean
hexo --debug
hexo generate

clone whole repository in a new machine

https://iphysresearch.github.io/blog/post/programing/git/git_submodule/
since there is submodule in main repository ( the theme/next)

1
2
3
4
5
6
7
git clone xxxx (main repository)
git submodule init # 初始化子模块
git submodule update # 更新子模块
npm install
hexo generate or hexo s
# 调试的时候遇到不名曲问题,可以安装pandoc, https://pandoc.org/installing.html
# 这会指示那一个文件的哪一行出错了

https://hexo.io/zh-cn/docs/commands.html

Read more »

Fast-RCNN 中region of interest的映射

首先在原图上用selective search得到某个推荐框,假设推荐目标在一个区域内,这个区域的左上点坐标为(x1,y1),右下角坐标为(x2,y2)。那么按照ZF-5的网络模型
求出 ( 所有stride的连续乘积,在conv5之前,包括conv5 ) 1
所以具体落实到feature map上,就应该是((x1/16)+1,(y1/16)+1);((x2/16)-1,(y2/16)-1)。

Caffe中的实现

我们可以打开roi_pooling_layer层:
这里的源码是

1
2
3
4
int roi_start_w = round(bottom_rois[1] * spatial_scale_);
int roi_start_h = round(bottom_rois[2] * spatial_scale_);
int roi_end_w = round(bottom_rois[3] * spatial_scale_);
int roi_end_h = round(bottom_rois[4] * spatial_scale_);

spatialscale其实就是stride连续乘积的倒数。这里用的这个round()有点意思,得到小数的最邻近整数,就可以理解为四舍五入,并没有像Spp-Net中所述的左上角+1,右下角-1。我认为这两种方式其实都是可行的。+1或-1更多的是代表防止过界(或者是取整方式的不同),关键还是除以S。

可以理解为在不同维度上对图像的缩放,而stride正好代表了这个缩放因子(看前面特征图大小的计算),所以相应的roi也需要跟着图像缩小这么多倍。

示例:2

在使用fast rcnn以及faster rcnn做检测任务的时候,涉及到从图像的roi区域到feature map中roi的映射,然后再进行roi_pooling之类的操作。
比如图像的大小是(600,800),在经过一系列的卷积以及pooling操作之后在某一个层中得到的feature map大小是(38,50),那么在原图中roi是(30,40,200,400),
在feature map中对应的roi区域应该是

1
2
3
4
roi_start_w = round(30 * spatial_scale);
roi_start_h = round(40 * spatial_scale);
roi_end_w = round(200 * spatial_scale);
roi_end_h = round(400 * spatial_scale);

其中spatial_scale的计算方式是spatial_scale=round(38/600)=round(50/800)=0.0625,所以在feature map中的roi区域[roi_start_w,roi_start_h,roi_end_w,roi_end_h]=[2,3,13,25];

Faster R-CNN

论文中提到如果用3x3 的 slice window,其对应到原图的感受野(effetctive receptive field)在VGG和ZF模型上分别是228 pixels,171 pixels。
对于VGG16来说(图片来源: kaggle)

In Faster-rcnn, the effective receptive field can be calculated as follow (VGG16):
Img->
Conv1(3)->Conv1(3)->Pool1(2) ==>
Conv2(3)->Conv2(3)->Pool2(2) ==>
Conv3(3)->Conv3(3)->Conv3(3)->Pool3(2) ==>
Conv4(3)->Conv4(3)->Conv4(3)->Pool4(2) ==>
Conv5(3)->Conv5(3)->Conv5(3) ====>
a 3 3 window in feature map.
Lets take one dimension for simplicity. If we derive back from size 3, the original receptive field:
1). in the beginning of Conv5: 3 + 2 + 2 + 2 = 9
2). in the beginning of Conv4: 9
2 + 2 + 2 + 2 = 24
3). in the beginning of Conv3: 24 2 + 2 + 2 + 2 = 54
4). in the beginning of Conv2: 54
2 + 2 + 2 = 112
5). in the beginning of Conv1 (original input): 112 * 2 + 2 + 2 = 228

2. https://www.cnblogs.com/ymjyqsx/p/7592590.html


以下术语可以参照图1,一目了然:

  • Precision(查准率): $\text{Precision} = \frac{TP}{TP+FP}$
  • Recall(查全率): $\text{Recall} = \frac{TP}{TP+FN} = \text{TPR}$
  • AUC : area under curve
  • ROC : receiver operating characteristic (TPR vs FPR)
    • $TPR = \frac{TP}{TP+FN}$ 图[1] 左半部分
    • $FPR=\frac{FP}{FP+TN}$ 图[1]右半部分
    • $TNR = 1-FPR = \frac{TN}{TN+FP}$
  • PR: precision vs recall

如果有人和你说他的model 准确率有91%,那你最好问一下他recall多少!

查全率的大小也是一个很重要的指标,如果一个分类器准确率很高查全率却很低的是没有意义的。

例如你有一个行人识别的分类器,来了50个object,你将10个识别为行人,而ground truth中这10个也确定是行人,从准确率来说你会觉得很赞,100%耶:smile:。但是,实际情况是这50个都是行人,如果这是一个自动驾驶的识别系统的话,:scream:那就很糟糕了。形成这样的原因很可能是模型过拟合了。

往往对于一个问题我们的关注点不同,侧重的指标也就不同。

Read more »

隐马尔科夫模型的一个例子是输入发的提示功能。

其实就是,观测序列越长,模型能得到的信息越多,自然推断的准确性就越高。除了推断隐藏序列,HMM还可用作预测,即给定一段观测序列,预测下一个隐藏序列是什么,拿输入法来说,这就是所谓的联想输入法。不仅如此,HMM还能进一步推断下一个甚至未来多个观测值是什么,只不过这种能力在卡尔曼滤波中应用的比较多,即目标跟踪。

马尔可夫模型

了解HMM首先要介绍一下markov model。已知N个有序随机变量,根据贝叶斯定理,他们的联合分布可以写成条件分布的连乘积:,

注意这只是markov model而非hidden markov model, marlov model是指符合markov特性的模型,markov特性假设序列中的任何一个随机变量在给定它的前一个变量时的分布与更早的变量无关:

这样对于联合概率就可以简单处理,变成如下形式:

这是一阶markov模型的形式,一阶的意思就是当前状态只与之前状态相关。如果我们想将当前状态和更早之前的状态联系起来就需要高阶markov,比如说和前M个状态相关:

但是这样会有一个问题,参数会指数级增加,对于上面这一个M阶模型,如果$x_n$可以取$K$个观察值,其参数个数为:$K^M\cdot(k-1)$

$k-1$是指条件概率和为$\int_{x_n} p(x_n |…) = 1$,所以最后一个概率可由其他求得。

$K^M$ 是指条件概率的condition排列组合的可能个数。

对于这样一个指数级爆炸的问题,很显然是不好解决的。

所以重点来了!为了不割断和之前状态的联系,又想避免指数级参数问题,一个新的模型被提了出来:

该类模型的关键是隐藏变量之间满足如下条件独立性,即在给定$zn$时,$z{n-1}$和$z_{n+1}$ 条件独立 <条件独立参见附录> :

这样一来,对于(1)就可以化简为:

Read more »

以前常会疑惑:

为什么他可以确定一条直线,以及为什么其作为分割面后 > 0 和 <0 就可以作为分类?

首先我们考虑如何确定一条直线,给定一个法向量$w$,会有无数个直线与其垂直正交,我们要的那一条如何唯一表示呢?其实很简单,找一个点就行,只需要这一个点,再加这一个法向量,一条直线就完全确定了。

假设 $a = (a_1, a_2,a_3)^T$ 是三维空间的一个点:

可以确定一条直线,这是两个向量的乘积。$w$和$a$都是常量,所以展开后会生成一个常数项,即(1)式的 $b$, 最后形式就是 (1)。

值得注意的是:n维空间的一个分割超平面是n-1维的,减少了一维的降维打击。即3维立体空间:分割面为2维平面;2维平面:分割面为一维直线,1维直线:分个面为一个点。例如:$y = kx + b$是一维的,原因是$y$受$x$控制。$ax + by + cz = 0$是2维的是因为任选一维都是受另外两维控制,非自由的,这一点和线性代数的最大无关向量组很像。

接上面的说,对于式子(1),其确定一条直线,两边的点带入要么大于零,要么小于零,直观去想为什么呢?

其实很简单,对于给定点$a$, 所有基于a的向量,可以分为三类:

  • 与$w^T$相乘等于零的,过a点且垂直与法向量$w$

  • 与$w^T$相乘小于零的,过a点且与法向量$w$夹角小于90度的,比如说postive sample

  • 与$w^T$相乘大于零的,过a点且与法向量$w$夹角大于90度的,比如说negative sample

这样就很直观明显了。

Read more »

图像风格迁移

avatar

Overview 1:

  1. Create a random input image

  2. Pass the input through a pretrained backbone architecture say VGG, ResNet(note that this backbone will not be trained during backpropagation).

  3. Calculate loss and compute the gradients w.r.t input image pixels.Hence only the input pixels are adjusted whereas the weights remain constant.

Read more »

covariance

协方差:

还要考虑一点,每个点的概率是不一样的,因此各个矩形的面积并非是平等的,或者说权重是不一样的,所以需要对面积和进行加权平均,也就是对面积和计算数学期望,这就得到了:

Variance

Variance是covariance的特例:

correlation

对于分母下面的形式,通常我们都知道是消除scale影响的系数,但是为什么这样scale就一样了?

Read more »

1. MLE (Maximum-likelihood-estimation)

最大似然方法:

其中,样本: $X = {x_1,…,x_N}$。

左边的$p(X|\theta)$是由参数$\theta$支配的密度函数(density function),注意这是条件概率

右边的$L(\theta|X)$是关于参数 $\theta$ 的likelihood(在给定数据$X$的情况下),注意这是函数

从公式中可以看出,在给定 $\theta$ (假设参数)的情况下,对已观测的实验结果用参数形式描述其概率,在做这一步的时候用到了一个假设,即样本之间的出现是相互独立无关的(i.i.d)。鉴于其已经出现在现实世界中,我们有理由相信(无论是大数定律还是什么的)这种可能性是最大的,所以,如何让这种观测结果出 大变成主要目标,这就是我们的使用的max likelihood 的本质。

最大化(1)便得到最大似然的式子

这里通常会用log函数替换,因为可以使得函数

2. MAP (Maximum A posterior estimation)

根据Bayes公式,我们可以得到如下结论

上面的表达式分别是:

$P(\theta|X)$:posterior 后验概率

$P(X|\theta)$:likelihood 似然

$P(\theta)$:prior 先验概率

即相比较MLE,在似然后面乘上prior,然后求最大,便是MAP2

根据贝叶斯公式会有如下:

$P(\theta|x)$ :posterior probabiity 后验概率
$P(X|\theta)$ :likelihood 似然
$P(\theta)$ :prior 先验概率

Read more »

在实验曲线拟合数据的时候突然有个想法:是否所有连续的函数都可以通过多项式拟和?

对于这个问题,需要先了解最小二乘法法的原理:

最小二乘法的由来 1

法国数学家,阿德里安-馬里·勒讓德(1752-1833)提出让总的误差的平方最小的$y$就是真值,这是基于如果误差是随机的,应该围绕真值上下波动。通过他的假设,我们将其应用到一般回归问题上就是如下形式:2

令误差最小的参数就是我们想要的参数。但这样的假设如何证明? 1

Read more »