Visual Salience

Introduction

比较早的时候注意到人眼在察觉某些物体时,比起单纯的CV扫描更高效,而且似乎使用的方式也有本质的却别。比如人眼工作(进行视觉感知时)的时候并不知道要关注的物体是什么。一个例子是,你在空旷的草地上散步,同时在考虑某件事情,但你会突然注意到右手方出现的背包。虽然知道这回事,但怎样做还是一个问题,当时想的主要还是依靠统计方法进行区域比较,也就大致想想。正当暴力计算大行其道的时代,在感叹带有浪漫色彩的各家经典被打入冷宫时,也不得不跟着大旗跑,以至于后面开始CNN了还想用CNN来做类似的功能。

Method And Implementation

Proposal

前段时间因为某些原因,开始了一段visual salience 的路程,了解之后才想起之前的一些想法。Visual saliency estimation by nonlinearly integrating features using region covariances 是随意找的一个例子(主要是考虑到有code可以参考)。从中可以看到该方法的一些范式。

Visual Salience Model

  1. 从原始图像计算一些指定的特征。说起来有些抽象,例子化就是,(paper中)每个pixel处得到一个向量: ([ L~a~b~x~y~frac{partial }{partial x}I~frac{partial }{partial y}I]^T),这便是文中“指定的特征”。
  2. 统计特征计算。经典的统计特征一般都归于一阶、二阶矩的计算(一些ICA把三阶括进去了)。特征没什么可变的,主要是策略。文中使用的策略,是将整个图进行划分,每个block包含固定数量的pixel,然后进行统计,获得均值和协方差。
  3. 距离度量。这也是经典方法(pattern recognition而言)的核心。文中开发了两种metric。第一个是关于特征向量的方式,另一个是矩阵分解的方式。
  4. 区域比较。 距离度量的目的在于将各区域的绝对特征计算出来,然后剩下的就是得到相对区别,这是“显著性”的表现。

另外,在文中,金字塔范式也被嵌进去了,用以处理多尺度的问题,不必多言。

Programing And Discussion

code是Matlab版的,后面用julia进行了一个实现。
输入图片
fig.1 输入图片
julia
fig.2 julia实现
mat-conv+center
fig.3 源程序结果

结果跑出来和文章的程序对比看起来很大。但仔细查看原文的输出,很明显,对于只有中部区域亮色,其他区域几乎没有噪声的情况多少给人一种不相信的感官;并且还有一处特别的地方是亮色区域是连续的。这些结果从上述的原理上几乎看不出支持。主要的原因还是一些trick,分别是center biassmooth convolution。记得好像试了下,拿掉这两项,出来的结果就和fig.2接近了。

Closure

这篇文字拉了一个多星期,今天下午收个尾。
要说什么感受最深,还是那些遍布的tricks,原理上确实就是以前想象的依靠统计方法进行些比较,但即使给出了那几个步骤,自己的实现仍然不会达到文中给出的效果(比如让自己在此基础上做出那种效果然后拿去投稿)。单是计算速度上自己写的julia程序就没跑过Mathworks版(高阶统计量的重复快速计算又是一个trick),预处理的时候引入些噪声的trick也是防不胜防。
看到这些,很自然地就往现在的深度调参去想,深度黑箱听起来被调参黑了,但那个地方没有trick呢,经典的方法里面显然也有,除了machine learning以外,其他的纯programing行业我想会更多的trick,初高中(或者大学)数学里面也是诸多trick分布(哪个行业都有)。trick代表的是某种理论算不上,写书上又怕被人被奉为圭臬的东西,或许正是人还不能被取代的一个原因。
一下子又扯远了。就这篇文章来看,visual salient model 属于feature工程,处理的结果和人的先验认识直接联系。但这也是某种优势,使其可以处理更大范围的任务,比如下面对遥感图像,深度黑箱(我想的话)还是难以做到针对一类特定图像进行调参后可以轻松换到其他任务上。
remote imaginary
fig.4 输入图像
conv and mean
fig.5 输出

原文地址:https://www.cnblogs.com/chenyliang/p/6859896.html