Matlab Psytoolbox(脑与认知神经科学)
文章目录
- Matlab Psytoolbox(脑与认知神经科学)
- 前言
- 1.题目
- 2.截图
- 3.评估结果
- 4.代码修改
- 总结
前言
脑与认知神经科学Matlab认知科学显著性检测(注意力预测)
1.题目
运行MIT/Tuebingen Saliency Benchmark(网站:https://saliency.tuebingen.ai/)上的代码,自己找图片,显示运行结果,了解显著性检测相关知识
2.截图
进入网站之后,点击results,里面有很多模型可供选择
我选取的是RARE2012和Context-Aware Saliency两个模型,作为注意力预测对比。点击名字,进入链接,二者界面分别为
RARE2012,点击下面圈红区域可以下载论文以及源码
Context-Aware Saliency,该界面也是下面有论文和下载源码链接,点击即可
我执行代码时的原图为这六张
运行结果分别为
RARE2012
Context-Aware Saliency
二者均为matlab运行,RARE2020执行时间大致10s以内,结果比较粗糙,而Context-Aware Saliency执行时间为几十秒不等,预测区域比较符合人的感知。
3.评估结果
由于网页提供python的评估代码有很多bug,本人不建议使用那个评估代码,可以去github自行寻找评估代码。或者直接使用现有的评估数据。
以下详细解释了不同指标的含义:
AUC:这是ROC曲线下面积的一个版本。显著性映射被当作二值分类器来区分不同阈值下的正样本和负样本。
sAUC:Shuffled AUC是面积下ROC曲线测量的一种版本。显著性映射被当作二值分类器来区分不同阈值下的正样本和负样本。
NSS:The normalized scanpath saliency,测量归一化显著性图(零均值,单位方差)固定位置的平均显著性值。
CC:The correlation coefficient,是模型显著性图与经验显著性图之间的线性相关系数,该显著性图由注视位置与高斯核进行卷积得到。
KLDiv:Kullback-Leibler divergence,将模型显著性图和经验显著性图归一化,用总和除以密度,然后计算这两个分布之间的Kullback-Leibler散度。
SIM:Similarity,这种相似性度量也称为直方图交集,当被视为分布时,它度量两个不同显著图之间的相似性。它的计算方法是,首先将模型的显著性映射和经验显著性映射归一化,将其除以总和,然后将两个分布的像素级最小值相加。
RARE2012
Context-Aware Saliency
4.代码修改
由于源代码并不能一次执行多张图片,我稍作修改,使其可以一次运行显示六张图片的结果
(注意修改图片名称)
RARE2012的example.m执行文件
I=cell(6);
R=cell(6);
I{1} = im2double(imread('images/1.jpeg'));
I{2} = im2double(imread('images/2.jpeg'));
I{3} = im2double(imread('images/3.jpeg'));
I{4} = im2double(imread('images/4.jpeg'));
I{5} = im2double(imread('images/5.jpeg'));
I{6} = im2double(imread('images/6.jpeg'));
R{1} = Rare2007(I{1});
R{2} = Rare2007(I{2});
R{3} = Rare2007(I{3});
R{4} = Rare2007(I{4});
R{5} = Rare2007(I{5});
R{6} = Rare2007(I{6});
N = length(R);
for i=1:N
figure(i); clf;
subplot(1,2,1); imshow(I{i}); title('Initial image')
subplot(1,2,2); imshow(R{i}); title('Raw saliency map')
end
Context-Aware Saliency的run_saliency.m执行文件
%% A script for running saliency computation
clear all;
close all;
%% load parameters and images
file_names{1} = '1.jpeg';
file_names{2} = '2.jpeg';
file_names{3} = '3.jpeg';
file_names{4} = '4.jpeg';
file_names{5} = '5.jpeg';
file_names{6} = '6.jpeg';
MOV = saliency(file_names);
%% display results
N = length(MOV);
for i=1:N
figure(i); clf;
subplot(1,2,1); imshow(MOV{i}.Irgb); title('Input','fontsize',16);
subplot(1,2,2); imshow(MOV{i}.SaliencyMap); title('Saliency map','fontsize',16);
end
总结
通过方法二和方法一的对比,我们可以从视觉上感受到方法二的模型要好于方法一,方法一二的运行代码后展现出来的图片都有有边缘检测算法,方法一从事物的轮廓开始,强调了主体部分,但是白色部分过多,无法突出注意力集中在哪一部分。相对而言执行方法二代码后的图片就可以清楚看出注意力集中区域,忽略了部分,注重整体,防止主体部分被局部干扰,防止重要区域被扭曲,标记区域更加接近人的注意区域。当然,方法二执行代码也需要花费更久的时间。
方法二运行时间:六张图片中四张图片平均耗时30s左右,只有图二图三例外,经观察分析,图二图三为动画图片,色彩鲜艳,光晕过多,个人认为是这些方面导致代码执行时间很长,图二耗时40-50s,图三耗时75s左右。
方法一运行时间:10s之内显示出六张图片运行结果。
非常感谢您的观看,已将该内容完整上传,此外本人主页还有python人工智能,单片机等文章,欢迎您观看