IPCC Preliminary SLIC Analysis

VScode Debug Run

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "/home/shaojiemike/github/IPCC/SLIC/SLIC",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
1
g++ -g -std=c++11 SLIC.cpp -o SLIC #把调试信息加到可执行文件中,如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

Debug Process

  1. main
  2. LoadPPM 把数据读入imag
    1. 读类型、像素图片长宽 2599 3898
    2. 读最大像素 255(应该是指rgb颜色,比如red只有256种,也就是8位二进制)
    3. 读长宽的像素的rgb到imag返回,imag是2599*3898大小的unsigned int二维数组,每位存24位数2进制数。
  3. 创建lables来存储分类结果, m_spcount 200, m_compactness 10
  4. 计时运行 slic.PerformSLICO_ForGivenK(img, width, height, labels, numlabels, m_spcount, m_compactness);//for a given number K of superpixels
  5. 结果与check.ppm对比

skills: watch arrays

1
2
*(int(*)[100])labels
*labels@10000

SourceTrail Analysis

Vtune Analysis

需要进一步的研究学习

遇到的问题

参考文献

IPCC Preliminary SLIC test

test on node5

1
2
3
g++ -std=c++11 SLIC.cpp -o SLIC
time ./SLIC
./SLIC 28.46s user 0.52s system 99% cpu 29.027 total

slic

test on amd_256

1
2
gcc 10.2.0
[1] 122955 segmentation fault (core dumped) ./SLIC

我傻逼了,我把cpp移动了,但是输入文件忘记动了

1
2
3
cat ./log/job_436960_rank0_fb0707_0.out
Computing time=21872 ms
There are 0 points' labels are different from original file.

要求

  1. 对slic.PerformSLICO_ForGivenK 函数运行时间进行通用优化
    1. 首先是并行化处理
    2. 读取时间不在计分范围
    3. 可以优化编译选项
    4. 可以改变数据结构与类型
  2. 需保证结果正确
  3. 之后有多组数据

需要进一步的研究学习

遇到的问题

北京超算的机器传文件只能用wincp,而且有时候不行,需要刷新缓存

参考文献

IPCC Preliminary SLIC algorithm

SLIC

超像素算法就是将图像中的像素依据某种相似性进行聚类,形成一个大“像素”,这个大“像素”可以作为其他图像处理算法的基础。
或者是超像素算法将像素组合成感知有意义的原子区域( atomic regions),其可以用于替换像素网格的刚性结构。它们捕获图像冗余,提供计算图像特征的方便原语( primitive ),并且大大降低了后续图像处理任务的复杂性。

SLIC 算法的基本思想是:

  1. 首先将图像从 RGB 颜色空间转换到 CIE-Lab 颜色空间,并把每个像素的(L,a, b)颜色值和(x, y)坐标值组成一个 5 维的特征向量 V[L, a, b, x, y],
  2. 然后,根据给定的网格步长 \(S=\sqrt{N/k}\),初始化聚类中心 $$C_k=[L_k, a_k, b_k, x_k, y_k]^T$$
  3. 之后在每个聚类中心 Ck 的邻域(2Sx2S),计算邻域内各像素与该 Ck 点
    的相似性度量,从而对邻域内的像素点进行聚类,
  4. 之后迭代更新聚类中心,直至满足收敛条件。
    233
    233

算法特点

  1. 通过将搜索空间限制为与超像素大小成比例的区域,显着地减少了优化中的距离计算的数量。
    233
  2. 加权距离度量组合颜色和空间接近度,同时提供对超像素的尺寸和紧凑性的控制。
  3. 默认情况下,算法的唯一参数是k,其含义是大小大致相等的超像素的个数。

距离测量

233
233
233

参考文献

https://blog.csdn.net/bailing910/article/details/79747689