Boundry attention: 泛化能力很强的边缘检测模块

2024-01-31 07:04

本文主要是介绍Boundry attention: 泛化能力很强的边缘检测模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:Boundary attention:: Learning to Find Faint Boundaries at Any Resolution

本文提出的模型泛化性好,即使只在合成的图案简单的图片上训练,在复杂的真实图上做检测也能得到较好的边界。

细节部分:

不同于viT把图片切成小patch,然后映射为token,而是每个像素都有一个token。
(文章说的dense,stride-1的token)

每个像素的token,设计为表达局部几何结构的特征空间,表征以自己为中心的正方形区域内的局部结构。

提出bottleneck:将图像的token映射到低维空间,这里设计这个空间为junction space

junction space:

用一些参数,代表了一些可能的几何边缘结构。比如什么都没有,边,角,T结,Y结。(这些几何结构够了吗?能不能通过kmeans聚类得到最佳的参数空间大小?)
这些参数3.1 包括点位置u=(u,v)点是相对patch中的中心像素的;线的方向theta;线顺时针旋转产生另外两条线,夹角依次为o1、2、3(因为最多产生三条线,所以最多表达三部分,比如T、Y结)。
⁃ 这些参数表达的几何结构种类是有限的,每一种文中叫做
wedge。

f-n代表输入图像
s-nj代表像素x在像素n的领域内,且属于第j个wedge,就=1.(j能离散?)(具体函数在附录,代表)
d-n代表像素x离最近的边界的欧式距离。这里的边界就是jspace中的线。

每个像素的region的大小,设计成自适应的。(这里能用那个blur-scale改,合理吗)用函数window function:w-n表示。这个函数定义为一个凸函数:分三个级别衡量size(D=3,9,17)。如果距离中心像素的大小小于某个size,就加上对应的系数。
⁃ 大小由regionsize决定,同时,结果又决定了region size
boundry attention是neighborhood corss-attetnion:cross-attention的一种变体。

结构:先把token用训练好的线性映射patch FFN变到junction space。

gather operator:对patch进行计算wedge feature。新的fkj=在图f上,patch包括的像素值,每个像素的window function作为权,f作为值的加权平均。
⁃ input:feature图、window function图p、wedge图g。
⁃ output:更新的feature

slice operator:对每个像素进行计算。算包含他的所有region的某个值的mean,variance。这个值有两个:distance map和wedge feature。
在这里对每个patchk要进行加权计算,对他有贡献的是包含这个patch中心点n的所有patches,不只他自己。
⁃ input:distance map d,window function图p,wedge图g;feature map一样的
⁃ output:distance map d的均值、方差;feature map的均值、方差。
这两个operator得到distance map、feature的方差。

期望输出:
期望重叠区(每个pixel又一个region)的边界是一样的。所以让上面得到的两个输出方差很小。

对上面distance map和wedge feature经过attention输出的均值的:
⁃ 像素n的feature mean是对包含他的领域中每个wedge feature的权重求和。(attention是对邻居的不同的注意力)

图片解释:
⁃ 第二行的图,对应选取的区域,颜色都一样,所以他的第一个window function很大?对应window中的边缘(第二张图)是快到花瓣边缘了。

整个网络要迭代g,p表示。迭代window function的系数和junction 空间的表示。为什么不能直接计算?因为直接计算太难了?不是,因为根本无法计算,只能让网络迭代得到最好的g(关注该范围的参数是多少)最好的p(关注多大的范围),以及考虑邻居信息的feature

网络输入像素,经过MLPmix输出hidden state。
然后attention8次迭代g和p(wedge feature和window size参数):

每个boundry attention:

使用跳跃连接;
把hidden state copy两份,一份+window token(pai),林一份+global feature f。分别经过MLP。
window tkoen作为Q,global feature作为KV。
window token(size, 1):前面提到过每个pixel n都作为query。
global feature分割为11大小的patch,两者做cross-ttetnion:每个像素n(query)的考虑了邻居的特征的新特征是什么?

还给global feature的patch加了positional encoding。

attention输出的hidden state得最后8维是window token。他们两个经过线性层,映射回junciton space的参数表示g。得到的g可以进行gather和slice opartor。

训练过程:
一共有一个MLPmix,两个boundry attention。总共进行8次迭代。
第一阶段迭代4次:线MLP-mixer和第一个attention一起训练;在第3,4迭代使用loss
第二阶段在迭代4次:然后再加第二个attention进行端到端的训练。在第7,8迭代使用loss
最后一次迭代的loss比前几次迭代的都权重大。
(一开始输入-MLPmixer,attention-再返回给attention-在返回给attention(此时计算loss1)-在返回给attention(此时计算loss2),加上第二个attetnion,返回头部端到端输出-在返回头部端到端输出-在返回头部端到端输出(此时计算loss3)-在返回头部端到端输出(此时计算loss4),最后loss应该是loss1-4的和)
(可能因为全部端到端训练,太难了?)

loss12是监督loss:包括feature和distance map的GT(这个他怎么得到的?)

每个loss包括像素级和patch级别的feature loss和distance map loss。让输入接近GT。还有他们对应的方差loss,让其尽量为0.

实验细节:
合成有15-20种几何图形的图片,变成灰度图,参见裁剪25*125大小,作为输入。
数据集10^5,90%作为训练。
⁃ 给图片加noise,让网络实现得到和无噪声一样的feature map,distance map。

结果:
1. 验证对噪声的抗干扰性能
和EDTRE、去噪的EDTRE对比
和类似原理但不是深度学习的filed of junction做对比。

2.	验证去噪检测时仍然存在的亚像素精度

在小image上检测,上采样放大边缘也很好。

3.	可视化hidden state,发现确实学到了junction space。而且直接对值进行差值,能得到连续的junction(可视化就是直接把hiddenstate值作为参数进行画?4.	在真实图像上

没和其他网络比较对真实图像的检测,而是比较了加噪声后的表现。

5.	推理时间等等

补充材料:
1. junction space
junction空间的几何表示,可以有M种,本文用的是M=3

参数空间有一些等价表示。
这里没看懂

Mjunction是更大的M‘的子集(训练时还可以提高M试一试)

在Mjucntion参数空间中,能直接计算出central 方向和边界boundary方向

和filed of junction那篇在junction space上的比较:参数空间多了oemga,这样就不用限制fai的范围。

这个参数空间的表示允许线性插值

2.	训练数据

合成数据集Kaleidoshapes

3.	模型细节

输入3通道图像,每个像素映射为64维。
经过一个zero-padding处理(补充边界)。
然后MLPmix:两个neighbor mixing blocks:每个包括空间patch mixer和channelmixer。前者是用两个3*3空间卷积+GELU实现。
channelmixer是每个像素输入的MLP。
最后剪掉包含了原图之外信息的patches。

训练细节:
第一阶段
训练只用kal数据集的简化版(100*100大小,加了高斯噪声,)用等式9,10的loss。让网络学到有意义的hidden state gamma,避免jucntion的collapse。让网络关注边界一致性loss(方差loss-0),学习无边界patch。

数据存在不平衡:只有一部分有边界信息。所以加一个额外的空间importance mask给有边界的区域更多关注。(用过gaussian产生这个mask?)把mask以常数C加在loss上。

第二阶段:
加另一个block,用全部iamge和loss。
也用了空间importance mask

这篇关于Boundry attention: 泛化能力很强的边缘检测模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/662933

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的, 论文可以从 https://arxiv.org/abs/2205.14135 页面下载,点击 View PDF 就可以下载。 下面我

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类