EDTER:融合transformer的边缘检测网络

原文链接:EDTER

首先回顾viT部分:

和ViT一样,先把图像分割为P*P大小的patch,分别经过映射得到tokens:patch embeddings。后面也加了ViT一样的position embedding,得到combined embeddings。

ViT中的Transformer Encoder:encoder包括L个transformer blocks:每个block包括一个多头自注意力操作MSA、线性感知层MLP、两个层归一化LN。而且每个block都使用了剩余连接residual connection。L个blocks是前后堆叠。

在前向传播中:

MSA并行进行M个头的自注意力计算,将他们的输出concat,然后经过一个映射。

在这里插入图片描述

其中每个头中得到一个y_sa,过程为:上一个transformer block L-1的输出output,在这里输入,首先进行层归一化LN,然后经过矩阵映射W_Q,W_K,W_V为Q,K,V(C维变为U维),然后通过pairwise-similarity分别计算两两向量之间的相似度,得到加了attention 权重的最后输出y_sa:
在这里插入图片描述

本文中的头数M=16。

EDTER的stage I: global context modeling

这部分得到的是图像的全局特征:还是包括transformer encoder和decoder。

将图像分割为16*16patches,映射为tokens,经过encoder计算global attetnion。

encoder:和viT一样,有24个 attention blocks。每个block输出一个Z(patch个数,C),拼起来得到一个global context feature (sequence). 这个sequence上采样,得到高分辨率图,输入给decoder。

decoder:希望能产生像素级别的表征,用于检测边缘。所以设计了BiMLA Decoder。

这个decoder的整体结构上是双方向的,top-down和bottom-up。

先把encoder的transformer block分为4组,获取他们的输出(第6,12,18,24个)。

先把Z reshape为三维:(高,宽,C)。

对top-down: 先经过两个卷积:1*1,3*3得到输出特征t6,12,18,24。(这部分借鉴了SETR-MLA)说的top-down指的是从24到6,一次把1*1卷积后(3*3卷积前)得到的特征,除了向前传播,还相加加在下一层1*1卷积后得到的特征上。

对bottom-up: 也是每个经过3*3卷积,得到b_6,12,18,24。只不过在3*3卷积前,把特征从6到24,依次相加。

和SETR-MLA不同于,所有上采样用的不是双线性插值,而是deconvolution块(+BN+ReLU)。

注意,top-down和bottom-up两个模块是基本独立的。一开始的1*1卷积得到特征后,分别输入两个模块进行操作。每个模块操作4个特征,最后合起来得到8个特征。这八个concat一起,最后经过卷积层来融合提取特征。(这块能借鉴CNN的coFusion吗)最后输出的f_g是像素级别的global特征(大小和输入图像大小一样)

注意:这里说是decoder,但是没用attention机制。

EDTER的stage II: local refinement(这块除了输入更细,和stage I区别不大,能不能设计更关注细节,比如用更多的conv?之前好像看到过这样的)

局部细化,希望得到的edge是单像素。一般会想到将每个像素用作一个token,但是计算成本很大。本文提出用不重叠的window在图上采样,计算采样区域的attention。(除了这个还有别的办法吗)

每个window内的patch数量是固定的。(因为这里主要关注局部,所以用window是符合的)

本文把一张图的H,W分别除以2,得到4个window。

(global和local能不能复用一部分,只不过进行encoder时,用attention内部不同的操作去关注global和local)

每个window再细分为8*8的patches(论文中这里得到16个小的patches),把他们输入给一个local transformer encoder。要注意的是,这里每个window得到的patches,都输入给同一个encoder。

local encoder用了12个transformer blocks。

和stage I类似,也是将transformer输出分4组,分别取其中一组Z_3,Z_6,Z_9, Z_12.然后输入该decoder,得到高分辨率图像。和stage I不同的是,这里decoder 里面卷积用的是1*1卷积(为了避免padding操作,3*3覆盖了增加的边缘,导致产生本来没有的边缘)

(这片论文是先学global,后学local。我能不能先local,然后global?比如local使用boundry attention,然后这个作为先验,学习global联系,平滑、连接这些边缘)

最后融合两个模块的Fusion Module

这块把global context作为先验知识,调制local context(既然前者作为先验知识,且目标是全局信息更好,能不能用显著性等数据集训练。或者有什么其他办法能更关注全局,我目前认为他的全局只在于输入更粗)

包括一个spatial feature transform block和两个卷积层。前者为了调制lcoal context,后者为了平滑。得到的输出再输入给一个lcoal decision head(1*1卷积+sigmoid 函数),输出edge map

训练:

分阶段,先训练stage I,然后固定I,训练II。

stage I的训练:

global 模块也有一个global decision head,用他的输出pred,计算loss,训练这一块。

而且这里还用了侧边输出,把decoder的中间特征4个t和4个b经过同样的处理(4*4反卷积和16*16反卷积),也和GT计算loss加到总loss中。(感觉真的是用尽了边缘检测所有的技巧,CNN那几篇也是几乎都用了侧边输出loss)

loss用的是HED的loss。

对于BSDS数据集,GT有多个。对这个的处理:对一个像素,把多个label归一化,得到edge prob map。然后选定一个阈值,如果prob大于阈值就看做positive样本(即边缘)。

Stage II的训练:

固定stageI。

和StageI一样使用了侧边训练,一样的loss方式。

实行细节:

用了ViT的预训练权重。(所以我最好也能使用一些已有的backbone,因为能用他们的预训练权重)

消融实验:

对每个模块进行消融实验:

除了ViT的encoder,主要对decoder和FFM进行消融实验。

Decoder的消融实验:和借鉴的SETR-MLA对比有提升:好像只是把上采样换成了Deconv(这么看来,应该是先缝合已有的模块,训练得到不错的结果,然后再替换其中的一些模块来提点?)

FFM的消融实验:比较有无这块的效果(理论上多了这块,当然能提升,只能说明模型并没有过拟合,所以加了块才能提升拟合能力或模型容量)

对训练方式进行消融实验:

只训练stageI,加stageII,加stageIII(当然能提升)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/360264.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章让你搞懂性能测试6大类型及其关系!

性能测试是软件测试过程的一个关键环节,用于确定和验证应用程序或系统在各种操作条件下的性能特征。 目标是确保软件在高负载、高压力、长时间运行以及其他非标准情况下仍能保持预期的行为和效率。 一. 性能测试的主要类型 1. 基线测试(Baseline Test…

​学者观察 | 区块链技术理论研究与实践观察——中央财经大学朱建明

导语 当下区块链研究成果质量越来越高,技术应用越来越成熟。在现阶段的研究中存在哪些短板需要弥补,如何将研究成果转化为推动数字经济高质量发展的实际应用,区块链技术与其他新技术结合发展将带来哪些新的机遇? 中央财经大学朱…

阿里云推出 3.x Java 探针,解锁应用观测与治理的全新姿势

作者:张铭辉、泮圣伟 前言 随着春节大促即将到来,为了确保线上业务高效稳定地运行,电商企业大多会对旗下关键业务应用进行多轮测试。通过模拟线上较高流量的请求,来观察服务性能的实际表现。以某企业的业务测试报告举例&#xf…

呼吸灯--FPGA

目录 1.breath_led.v 2.tb_breath_led.v 呼吸灯就是从完全熄灭到完全点亮,再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。 绘制PWM波的步骤就是,首先灯是在第一个时钟周期保持高电平熄灭状态,在第二个时钟周期保持1/1…

Logstash 7.7.1版本安装系统梳理

前言 上一篇文章介绍了 《ElasticSearch7.7.1集群搭建 & Kibana安装》,今天说一下 Logstash的安卓和配置; Logstash是一个开源的数据收集引擎,具有实时管道功能。它可以动态地将来自不同数据源的数据统一起来,并将数据标准化…

Redis集群环境搭建

Redis集群环境搭建 Redis主从复制 概念 主从复制是指将一台Redis服务器的数据,复制到其他的Redis服务器,前者称为主节点(master/leader),后者称为从节点(slave/followe);数据的复制是单向的,只能从主节点到从节点&a…

使用Promethues+Grafana监控Elasticsearch

PromethuesGrafana监控Elasticsearch 监控选用说明指标上报流程说明实现监控的步骤搭建elasticsearch-exporter服务搭建promethues和grafana服务 监控选用说明 虽然用Kibana来监控ES,能展示一些关键指标,但ES本身收集的指标并不全面,还需要在…

【刷题】牛客网 NC132 环形链表的约瑟夫问题

NC132 环形链表的约瑟夫问题 题目描述思路一(链表直通版)思路二(数组巧解版)思路三(变态秒杀版)Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!&#xff…

【C语言】探索数据结构:单链表和双链表

目录 💡链表的概念和结构 💡链表的分类 💡无头单向非循环链表(单链表)的实现 定义节点结构 单链表的尾部插入 单链表的头部插入 单链表的尾部删除 单链表的头部删除 在指定位置插入前数据 在指定位置之后插入数…

TypeScript 学习笔记(Day3)

「写在前面」 本文为 b 站黑马程序员 TypeScript 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. TypeScript 学习笔记(Day1) 2. TypeScript 学习笔…

科技云报道:新趋势下,国产数据库或“春山可望”

科技云报道原创。 从540亿元到1286亿元——这是中国通信标准化协会大数据技术标准推进委员会针对中国数据库行业给出的一份预测报告。 报告指出,未来五年,中国数据库行业将从百亿级市场跨越成为千亿级市场。 最近两年,中国的数据库行业似乎…

用tar压缩一个文件夹下的所有文件,包括文件夹本身

当你使用tar命令压缩一个文件夹时,默认情况下会包含该文件夹本身及其下所有的文件和子目录。因此,之前的命令同样适用于包括文件夹本身在内的所有内容: tar -czvf archive_name.tar.gz directory_to_compress/ c 表示创建一个新的归档文件。…

使用Eclipse搞Android项目报错

相信现在都没什么人还会用Eclipse来开发的了。 不过安装完后,打开Eclipse会提示我的Jdk版本不符合 --------------------------- Incompatible JVM --------------------------- Version 1.8.0_391 of the JVM is not suitable for this product. Version: 17 or g…

【三维重建】运动恢复结构(SfM)

运动恢复结构是通过三维场景的多张图像,恢复出该场景的三维结构信息以及每张图片对应的摄像机参数。 欧式结构恢复(内参已知,外参未知) 欧式结构恢复问题: 已知:1、n个三维点在m张图像中的对应点的像素坐标 2、相机内参 求解&…

mysql入门到精通003-基础篇-SQL

1、目录 2、SQL通用语法及分类 2.1 SQL通用语法 2.2 SQL分类 3、SQL DDL数据库操作 3.1 SQL DDL表操作-创建&查询 3.1.1 表操作-查询 3.1.2 表操作-创建 create table tb_user(id int comment 编号,name varchar(50) comment 用户名,age int comment 用户名,gender varch…

mysql .ibd 文件过大清理方法

问题 有一个 info_track 表用来临时存储告警推送数据,逻辑处理完成后,会执行 Delete 语句删除对应的记录。 问题:项目现场运行了几个月后,发现磁盘空间莫名占用了过多的存储,> 100GB,且无法释放。 生…

Halcon 拟合

文章目录 算子更多xld算子更多区域算子 Blob 分析案例预处理图像增强降噪图像降噪 图像增强Halcon 基于圆的拟合 Halcon 共线联合案例Halcon 拟合动画案例Halcon 拟合椭圆 算子 二值化算子 (二值化后获取的都是区域) 二值化算子 clip_region_rel 剪切区域…

【总线接口】3.常见总线、接口GPIO、I2C、SPI、I2S、Modbus

初接触硬件,五花八门的总线、接口一定会让你有些疑惑,我尝试用一系列文章来解开你的疑惑。 系列文章 【总线接口】1.以Xilinx开发板为例,直观的认识硬件接口 【总线接口】2.学习硬件这些年接触过的硬件接口、总线 大汇总 【总线接口】3.常见…

单片机开发通用功能组件

mcu_reuse_development_module 单片机可复用、可通用开发组件,是以中间件思想开发的一套功能模块,将具有代表性或使用次数较多的功能和协议栈封装为独立的组件供开发者使用,开发者仅需通过组件提供的接口对接驱动层和应用层即可使用组件功能…

【PyTorch实战演练】Fast R-CNN中的RoI(Region of Interest)池化详解

文章目录 0. 前言1. ROI池化的提出背景2. RoI池化的结构与工作原理3. RoI池化的作用及意义4. RoI使用示例 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方…