RCNN、Fast RCNN、Faster RCNN

RCNN

  1. 用selective search 的方法得到2000多个候选框,然后用CNN网络提取候选框区域的特征,再用SVM对其进行分类。
  2. 第一篇将卷积神经网络用与物体检测和物体分割任务
  3. 在数据缺乏的情况,用辅助任务进行预训练,然后在目标任务中进行微调,能够大幅度提升目标任务的精度,可谓迁移学习的鼻祖

查看更多

DBSCAN 聚类算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DBSCAN(DB, dist, eps, minPts) {
C = 0 /* Cluster counter */
for each point P in database DB {
if label(P) ≠ undefined then continue /* Previously processed in inner loop */
Neighbors N = RangeQuery(DB, dist, P, eps) /* Find neighbors */
if |N| < minPts then { /* Density check */
label(P) = Noise /* Label as Noise */
continue
}
C = C + 1 /* next cluster label */
label(P) = C /* Label initial point */
Seed set S = N \ {P} /* Neighbors to expand */
for each point Q in S { /* Process every seed point */
if label(Q) = Noise then label(Q) = C /* Change Noise to border point */
if label(Q) ≠ undefined then continue /* Previously processed */
label(Q) = C /* Label neighbor */
Neighbors N = RangeQuery(DB, dist, Q, eps) /* Find neighbors */
if |N| ≥ minPts then { /* Density check */
S = S ∪ N /* Add new neighbors to seed set */
}
}
}
}
1
2
3
4
5
6
7
8
9
RangeQuery(DB, dist, Q, eps) {
Neighbors = empty list
for each point Q in database DB { /* Scan all points in the database */
if dist(P, Q) ≤ eps then { /* Compute distance and check epsilon */
Neighbors = Neighbors ∪ {Q} /* Add to result */
}
}
return Neighbors
}

REFERENCE

查看更多

Caffe训练代码解析

疑问

  • Caffe 中不同的Solver 是如何生效的?

Caffe 编译

1
2
3
4
5
6
7
# Caffe -extend 
# https://github.com/BVLC/caffe/issues/5262
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCUDA_PROPAGATE_HOST_FLAGS=off \ # 为了使用c++11 但是cuda不是
-DCMAKE_CXX_FLAGS="-std=c++11”
make -j8

Caffe 是如何训练的?

想要理解Caffe是如何训练的, 首先得掌握Caffe的基本数据结构, 可以通过文末的参考文献, 过一遍就好了. 最关键的一点是, 知道网络计算过程中参数和层的输入输出分别放在哪里, 又是由谁在管理的?

查看更多

读《暗时间》

思维改变生活

逃出你的肖申克(一)

  1. 我们无法从强度上真正感同身受别人的痛苦
  2. 概率低的事情也可能发生, 但不要就此颠倒发生概率.

    吸烟不一定短命, 不吸烟也不一定长寿;

    坚持到底不一定就胜利, 而不坚持到底也不一定失败

查看更多

结构张量

定义

2维结构张量的计算公式是:

$$
S=\begin{bmatrix}
\int w(r)(I_x(p-r))^2dr & \int w(r)I_x(p-r)I_y(p-r)dr & \\
\int w(r)I_x(p-r)I_y(p-r)dr & \int w(r)(I_y(p-r))^2dr
\end{bmatrix}
$$

$w(r)$ 是一个当前位置与中心距离$r$的权重函数. 结构张量还可以扩展到更高维的空间, 详情可以参看维基百科. 结构参量的意义维基百科中作如下总结, 我觉得非常到位:

It summarizes the predominant directions of the gradient in a specified neighborhood of a point, and the degree to which those directions are coherent.

查看更多

感知哈希

感知哈希(Perceptual Image Hash) 常常被用来提取图像的指纹, 用于判定形似图片. 算法速度快被用来作为图像搜索.

算法简单, 直接贴源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
int ph_dct_imagehash(const char* file,ulong64 &hash){

if (!file){
return -1;
}
CImg<uint8_t> src;
try {
src.load(file);
} catch (CImgIOException ex){
return -1;
}
// 1. 图像均值滤波, 去噪预处理
CImg<float> meanfilter(7,7,1,1,1);
CImg<float> img;
if (src.spectrum() == 3){
img = src.RGBtoYCbCr().channel(0).get_convolve(meanfilter);
} else if (src.spectrum() == 4){
int width = img.width();
int height = img.height();
int depth = img.depth();
img = src.crop(0,0,0,0,width-1,height-1,depth-1,2).RGBtoYCbCr().channel(0).get_convolve(meanfilter);
} else {
img = src.channel(0).get_convolve(meanfilter);
}

// 1. 缩放到 32x32 标准大小, 计算余弦变换
img.resize(32,32);
CImg<float> *C = ph_dct_matrix(32);
CImg<float> Ctransp = C->get_transpose();

CImg<float> dctImage = (*C)*img*Ctransp;

// 2. 选取 左上角 8x8 的余弦变换结果, 这部分是图像的低频信号, 表征图像的结构信息.
CImg<float> subsec = dctImage.crop(1,1,8,8).unroll('x');;

// 3. 统计均值和哈希: > 均值的取1, <= 均值的取 0 得到 64 位的二进制哈希, 代表图像的指纹
float median = subsec.median();
ulong64 one = 0x0000000000000001;
hash = 0x0000000000000000;
for (int i=0;i< 64;i++){
float current = subsec(i);
if (current > median)
hash |= one;
one = one << 1;
}

delete C;

return 0;
}

感知哈希通过调整第三步统计窗口的大小, 和量化的分辨率能够得到不同精度指纹.

参考

查看更多

cmake引用HomeBrew版本的Python

在mac上编译Caffe2的时候发现cmake引用的Python版本是系统的版本, 而不是Homebrew版本, 查找了一番, 最简介的做法是显示指定Python相关信息, 如下:

1
2
3
4
5
cmake -DPYTHON_INCLUDE_DIR=/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/Current/Headers \
-DPYTHON_LIBRARY=/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/Current/Python \
-DPython_FRAMEWORKS=/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework \
-DUSE_CUDA=OFF \
..

参考

Shell 脚本备忘

结果赋值

1
variable=$(command –options arguments)

文件名操作

1
2
3
filename=$(basename "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"

检查文件

1
2
3
4
5
6
7
8
#!/bin/bashv
file="/etc/hosts"
if [ -f "$file" ]
then
echo "$file found."
else
echo "$file not found."
fi

查看更多