Criss Cross Attention 模块的tensorflow代码实现

也是边学习边写代码,如有问题和指正,请联系!!!

  • 参照论文解读文章进行论文理解和代码编写。
  • 论文原地址:CCNet

模块结构

Affinity 操作

import tensorflow as tf
from tensorflow.keras import layers
from tensorflow import kerasclass criss_cross_attention_Affinity(tf.keras.layers.Layer):def __init__(self, axis=1, **kwargs):super(criss_cross_attention_Affinity, self).__init__(**kwargs)self.axis = axisdef call(self, x):batch_size, H, W, Channel = x.shapeoutputs = []for i in range(H):for j in range(W):ver = x[:, i, j, :]temp_x = tf.concat([x[:, i, 0:j, :], x[:, i, j + 1:W, :], x[:, :, j, :]], axis=1)trans_temp = tf.matmul(temp_x, tf.expand_dims(ver, -1))trans_temp = tf.squeeze(trans_temp, -1)trans_temp = tf.expand_dims(trans_temp, axis=1)outputs.append(trans_temp)outputs = layers.Concatenate(axis=self.axis)(outputs)C = outputs.shape[2]outputs = tf.reshape(outputs, [-1, H, W, C])return outputsdef get_config(self):config = {'axis': self.axis}base_config = super(criss_cross_attention_Affinity, self).get_config()return dict(list(base_config.items()) + list(config.items()))

Aggregation操作

class criss_cross_attention_Aggregation(tf.keras.layers.Layer):def __init__(self, axis=1, **kwargs):super(criss_cross_attention_Aggregation, self).__init__(**kwargs)self.axis = axisdef call(self, x, Affinity):batch_size, H, W, Channel = x.shapeAffinity = layers.Activation('softmax')(Affinity)outputs = []for i in range(H):for j in range(W):ver = Affinity[:, i, j, :]temp_x = tf.concat([x[:, i, 0:j, :], x[:, i, j + 1:W, :], x[:, :, j, :]], axis=1)trans_temp = tf.matmul(tf.transpose(tf.expand_dims(ver, -1), [0, 2, 1]), temp_x)outputs.append(trans_temp)outputs = layers.Concatenate(axis=self.axis)(outputs)C = outputs.shape[2]outputs = tf.reshape(outputs, [-1, H, W, C])return outputsdef get_config(self):config = {'axis': self.axis}base_config = super(criss_cross_attention_Aggregation, self).get_config()return dict(list(base_config.items()) + list(config.items()))

合并两个操作

def criss_cross_attention(x):x = layers.Conv2D(filters=64, kernel_size=3, padding='same', strides=2)(x)x_origin = xaffinity = criss_cross_attention_Affinity(1)(x)out = criss_cross_attention_Aggregation(1)(x, affinity)out = layers.Add()([out, x_origin])out = layers.UpSampling2D(size=2, interpolation='bilinear')(out)return out

模型打印结果

问题

由于该模块是针对每一个像素点在原特征图上对应像素所在的十字行列像素上进行计算,所以代码写的是循环遍历每一个像素。导致计算复杂,暂时还没能解决这个问题。

语义分割CCNet-Criss Cross Network论文中注意力机制Criss Cross Attention模块的tensorflow代码实现相关推荐

  1. 轻量级实时语义分割:Guided Upsampling Network for Real-Time Semantic Segmentation

    轻量级实时语义分割:Guided Upsampling Network for Real-Time Semantic Segmentation 介绍 网络设计 Guided unsampling mo ...

  2. 快速理解图像处理中注意力机制的应用

    参考论文:Residual Attention Network for Image Classification,发表与2017年CVPR会议上 一.前言 在分析这个网络前首先应该明确注意力机制的本质 ...

  3. 【语义分割】Fully Attentional Network for Semantic Segmentation

    文章目录 一.背景和动机 二.方法 三.效果 本文收录于 AAAI2022 一.背景和动机 语义分割中,non-local (NL)的方法起到了很好了捕捉 long-range 信息的作用,大致可分为 ...

  4. 【AI不惑境】计算机视觉中注意力机制原理及其模型发展和应用

    大家好,这是专栏<AI不惑境>的第七篇文章,讲述计算机视觉中的注意力(attention)机制. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿 ...

  5. 计算机视觉-语义分割论文总结

    本文包含如下论文: Fully Convolutional Networks for Semantic Segmentation(2015) SegNet: A Deep Convolutional ...

  6. CVPR 2020 论文大盘点-语义分割篇

    图像分割应用广泛,在CVPR 2020 论文中所占比例很高,可说是一大热门,有110多篇相关论文,本文盘点CVPR 2020 所有语义分割(Semantic Segmentation)相关论文(文末有 ...

  7. 基于超大尺寸图像的语义分割论文和代码汇总

    文章目录 2019 Collaborative Global-Local Networks for Memory-Efficient Segmentation of Ultra-High Resolu ...

  8. 【论文汇总】 ECCV 2020 语义分割paper汇总

    语义分割 segmentation paper@ECCV 2020 ECCV 2020语义分割文章总结,文章下载链接. 文章目录 语义分割 segmentation paper@ECCV 2020 前 ...

  9. 【论文阅读】SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络

    [论文阅读]SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络 文章目录 [论文阅读]SCAttNet:具有空间和通道注意机制的高分辨率遥感图像语义分割网络 一.总体介绍 二.概述 ...

  10. 【论文速递】ECCV2022 - 密集高斯过程的小样本语义分割

    [论文速递]ECCV2022 - 密集高斯过程的小样本语义分割 [论文原文]:Dense Gaussian Processes for Few-Shot Segmentation 获取地址:https ...

最新文章

  1. 计算机组装安全常识,计算机组装与维护宝典
  2. php ini include,php.ini文件中的include_path设置
  3. HDFS数据副本的摆放策略
  4. Java架构经验总结
  5. java8 streams_Java 8 Streams API:对流进行分组和分区
  6. LeetCode 389. 找不同(位运算)
  7. 3-16Pytorch与随机抽样
  8. 霍兰德职业兴趣测试题
  9. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程
  10. Python Tricks —— 计算 1+1/2+1/4+...=2
  11. 深入PHP变量存储结构
  12. Laravel中的日志与上传
  13. cplex求解整数规划_Ortools调用第三方求解器
  14. 用计算机知道手机号码,知道手机号怎么整贱人-原来微信的“+”号还有这些隐藏用法?居然可以一键检测真假好友...
  15. PeopleSoft
  16. android wifi热点setting
  17. 学会这些,不做委屈的项目经理
  18. 您有一份《七夕安全须知》待查收
  19. 无意中发现软件下载网站 softonic
  20. python实现艾宾浩斯抗遗忘曲线(记忆曲线)

热门文章

  1. 应届生web前端面试题_前端开发应届生面试指南(含各大公司具体指南及面试真题)...
  2. 5个相见恨晚的设计资源网站,记得收藏。
  3. 微软拼音输入法自定义短语
  4. 将一个 iOS 设备变成 iBeacon
  5. Docker命令(二)
  6. linux rm 文件找回_Linux下用rm删除的文件的恢复方法
  7. 【基础理论】Jenkins CI/DI持续集成部署
  8. ps柔光在哪的相关介绍:图层面板和工具属性栏的柔光模式
  9. vba手机号码归属_手机号码归属地查询
  10. 通信常识:波特率、数据传输速率与带宽的相互关系