Deep Learning for Light Field Saliency Detection

本文介绍了一种基于4D光场图像的显著性检测方法,包括一个大规模的光场数据集构建及其对应的深度学习网络模型设计。该模型利用了focal stack中的深度信息,通过循环注意力机制提取特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       这篇文章是用来解决显著性检测问题的,只不过他用来训练模型的数据集是Light Field Images,即4D的数据集,在了解4D数据集之前,我们先来了解一下3D的数据集,我们平用来训练模型的图片都是2D图片,而3D多出来的一个维度指的就是像素的深度,之前2D估计包含像素的亮度和颜色,像素的深度是通过像素的聚焦程度体现出来的,如图一中的(b)、(c)、(d)这些图片,这些图片中的某些区域聚焦清晰,表示其深度较浅,某些区域为散焦区域,像素模糊,代表深度较深,(a)为所有像素都清晰的图片,称之为all-focus images,相对应于all-focus image的(b)、(c)、(d)各自有不同深度信息的图片堆叠成一个focal stack。4D数据集便是既有all-focus images,又有相对应的focal stack,4D Saliency Detection便是利用4D数据集作为训练输入的显著性检测模型,目的是将focal stack中的深度信息融入到所提取的特征中,更加有利于显著物体的检测。

图一
图一

 

       之前就有的工作就表明,将图片的深度信息当作先验信息加入到显著性检测模型中会起到较大的作用,这由我们人眼观测物体的经验可以解释,我们对离我们距离不同的物体的关注程度是不一样的,所以深度信息也可以作为一种十分有用的特征来进行显著物体的检测。作者也通过集体的实例展示了应用深度信息进行检测的优势,如图二所示,没有利用深度信息的模型如(c)和(d)的预测结果背景中会有很多噪声,但是应用了深度信息后背景噪声会很容易被过滤掉,因为在focal stack中显著物体清晰而背景模糊的切片的特征可以有效地被提取并加以利用。

图二

 

        但是目前利用光场(也就是4D images)进行显著物体检测的方法仍然是利用手工提取特征进行检测,CNN网络的发展成果并没有有效应用在这个领域中,这是因为可以用来进行训练的4D数据集太少了,缺少大量数据集的支撑,CNN的优越性也展现不出来,所以本篇论文的第一个工作便是提供了一个可供训练CNN网络的4D数据集,包含1000个训练图片集和465张测试图片,每个图片集包含一张all-focus图片,该图片的ground truth,以及相对应的focal stack。作者还给出了该数据集的统计特征,表明该数据集中的图片中的显著物体不是很容易就能检测到的,利用该数据集训练的模型会具有较好的性能。相关的统计特征有:1、显著性目标占全图的比例,在[0.05,0.8]区间内,并且大多数目标占全图的比例不超过40%;2、focal stack中包含3D图片的数量在2到13之间,大多数focal stack中包含超过5张的3D图像,这说明包含的深度信息较为丰富;3、前背景区域的颜色平均对比度为0.30,小的颜色对比度不会使模型通过提取颜色对比度信息而进行检测,而是通过更加抽象的语义信息进行检测,更有利于模型的性能的提高;4、为了避免模型通过图像的中心先验线索轻易地检测到图中地显著物体,作者还统计了数据集中显著物体的中心位置分布,发现它们并没有集中在图像的中心区域。

        有了可以用来训练的数据集后,作者所面对的问题便是如何搭建网络模型有效地提取focal stack的深度信息并和all-focus的信息融合进行显著物体的检测,这便是本篇论文的第二个工作,如图三所示,作者提出了有两个stream的网络,一个stream用来提取focal stack的特征,另一个用来提取all-focus的特征。在focal stack stream中作者提出了recurrent attention机制来对foacl stack中的切片的高层语义特征进行了有效的筛选和表征,因为作者注意到focal stack中的每张深度图像对于最终的预测结果的贡献程度是不一样的,贡献程度最好的便是那些显著物体处于聚焦区域而背景处于模糊区域的切片,利用recurrent attention机制可以将这些贡献程度好的切片的特征提取出来。另外作者还采用了对抗样本训练增强了模型的性能。这些将通过模型总体结构、融合机制和对抗样本训练来详细叙述。

图三

 

 

       一、网络总体结构

        网络的总体结构如图三所示,总体网络分为两个stream,上面的stream的输入为focal stack中的切片,是独立地将slice分别送入到网络中而不是concat后一起送入到网络中,下面的stream是将all-focus还有生成的对抗样本分别送入到网络中。选取GG19的前五个blocks分别作为两个stream的特征提取网络,最后要处理的特征是通过将conv3、conv4和conv5提取的特征加起来,具体的做法先将conv3、conv4和conv5输出的feature map都用64个1x1的卷积卷积到64通道的,再用双线性插值法将conv5和conv4的feature map上采样到和conv3一样大小的,再将这三个feature map加起来做后续的处理。在focal stacks stream中,蓝色、黄色和绿色的那一系列64维的feature map是每个切片处理后的feature map(注意它们之间有省略号,并不代表对相加后的feature map进行后续的卷积处理),后面作者提出了循环注意机制对这些切片各自生成的64维的feature map进行融合处理,融合后得到一个64通道的feature map,最后预测时将它卷继成两个通道再放大到原始图像的大小计算一次loss。在all-focus stream中,相加后的feature map直接卷积到2维再上采样计算loss。最后两个stream的prediction map再相加再进行最后的loss的计算,虽然图中的图标是c,也就是concatenation的意思,操作后通道数没变而且根据上下文的意思,图应该是画错了。

 

       二、融合机制

               focal stack中的切片数量很多,按照本文的网络框架,要将它们各自所提去到的特征进行融合,得到最终的深度信息再         和all-focus stream中的结果结合去预测最终的结果,所以所采取的融合机制就显得十分重要,作者介绍了之前有人提出过           的四种融合机制,分析了它们的优缺点,自己又提出了一种融合机制。

图三

   

        如图三所示,(a)便是最原始的FCN框架。(b)是第一种融合方式,称之为early integration,就是直接在输入端将focal stack中的slices和all-focus image全都concat在一起统一送入网络中,这种融合的缺点就是只是融合了浅层的特征,对于深度的语义特征的融合并没有太大的帮助。(c)是层间的融合,称之为layer-wise integration, 就是focal stream和all-focus stream中相对应的block在得出feature map后相加在一起,将相加后的结果最为两个stream各自下一个block的共同输入。这种融合方式很好地考虑了focal stack中的3D图片和all-focus的图片的融合,但是作者认为考虑各切片之间的联系会更好一点。(d) 称之为late integration,是将各切片分别独立地送入到网络中,最后将提取出来地feature map叠加后求平均,这种是将各切片地语义信息进行融合,但是很少考虑到各切片之间的联系,事实上各切片对最终的预测结果的贡献程度是不一样的,所以应该对不同的切片区别对待。

图四

       最后作者提出的融合方式跟(d)一样都是late integration的方式,只不过不是简单的求平均,而是通过一种循环注意机制提取出更好的切片的语义信息,该循环注意机制如图四所示,每一步循环都由一个attention模块和ConvSTLM模块组成,首先是attention模块(如图四中的b所示),它的输入是之前图二中提到的focal stack stream中的那些蓝、黄、绿等一系列的feature maps,是各个切片通过VGG19所提取到的feature map,提取方法在网络总体结构中已经提到过了,如图四中的(b)所示,应该是一共有N个64通道的feature maps,这里的N应该是固定的,但是作者前文中说训练集中的每个all-focus图片对应的focal stack中的切片数量是不同的,估计是作者并没有解释清楚,他应该设定一个固定的输入切片数量,因为后面会用到N个卷积核的卷积操作,N应该为定值,所以我们就假设这个N是固定的,attention模块首先将输入的N个64通道的feature maps concate起来,变成图中的Fc系列,再将他们卷积成64通道的,变成图中蓝色的feature map, 对于上一步循环中输出的隐层 h_{t-1} 也进行卷积变成64通道蓝色的feature map(注意这里的 h_{t-1} 的通道数不是64xN),将它们相加,得到的仍然是64通道的feature map,再进行平均池化得到1x1x64的feature map,再通过N个1x1的卷积核卷积重新得到N个表征各切片重要程度,最后通过softmax归一化得到各个切片的权重w_{t,n},表示第t次循环,n表示第n各切片。最后用权重去乘各个切片的64通道的feature map,得出attention之后的N个64通道的feature map,所以我们可以看到attention模块的目的就是要通过加权重的方式对各个切片的重要程度进行区分,一般比较重要的通道的响应值都比较高(我想通道增强 的motivation就是要让强的通道更强,所以才会命名为attention吧,这种动机是不是就和竞争的循环神经网络的做法相同),将feature map 平均池化后的向量就可以一定程度上反应各个通道的重要程度,一般的通道attention如图五所示,要对hxwx c_{2}的feature map进行通道增强,权重的获取就是将feature map average pooling 后再归一化,但是本文中需要增强的是slices而不是通道,为了减少计算量,作者就将concat后的feature maps卷积成64通道的,平均池化后再卷积成N,获取权重值,这里作者还融合了上一步循环中的隐层输出,更加有利于关于切片重要程度的权重的获取。

图五

 

       只利用了attention模块之后的特征并不能很好地用于预测,这在文章后面地消融实验中体现出来了,只用了attention模          块而不用ConvLSTM模块的模型效果反而变得更加差了,文章中说是没有生成更好的特征表示,我觉得还是特征增强的程度        还不是很强,在竞争神经网络中,初始状态好的神经元会通过一遍遍的循环变得更好直至收敛,而attention只是进行了一次          增强,远远不够,所以文章中采用COnvLSTM估计才会起作用吧,这也是我自己的猜测。

       接下来我们详细总结一下ConvLSTM,有关LSTM的理解可以在我的另一篇博客中看,                 

       作者说在4D数据上的显著性检测的方法现在还局限于传统的手工提取特征的方法,并没有利用深度神经网络的方法来解决,究其原因,还是可以用来训练的光场显著性数据库太少,深度学习利用大数据学习的算法优势体现不出来,所以深度学习来解决4D图片的显著性检测并没有流行起来,基于此,本篇论文便提出了大规模的光场数据集来进行训练。  

       得到了足够的光场数据集后,如何有效地利用它们还有待研究,在网络最后地显著性预测阶段,focal stacks images中地每一个切片都其不同的作用,因为有的聚焦的区域包含了显著性目标而有些散焦的区域仅仅代表了背景区域。我们的目的就是将那些能够前景清晰而背景模糊的切片很好地利用起来,所以作者采用了新颖地循环神经网络结构来进行选取,另外作者为了更好地帮助训练采用了具有对抗性地实例来训练,因为现有地DNNs对于人工合成地图片地检测能力是有限的,即使是state of art的模型,对于一点点可感知的差别鲁棒性并不是很强。

 

        

        

 

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值