DFN

article/2025/11/8 16:07:49

1.视频教程:
B站、网易云课堂、腾讯课堂
2.代码地址:
Gitee
Github
3.存储地址:
Google云
百度云:
提取码:


DFN-Tensorflow版本


解释一下BorderNetWork是如何起作用的,是如何进行融合的,有问题,欢迎交流

1.先看损失函数

# -*- coding: utf-8 -*-import tensorflow as tfdef pw_softmaxwithloss_2d(y_true, y_pred):exp_pred = tf.exp(y_pred)try:sum_exp = tf.reduce_sum(exp_pred, 3, keepdims=True)except:sum_exp = tf.reduce_sum(exp_pred, 3, keep_dims=True)tensor_sum_exp = tf.tile(sum_exp, tf.stack([1, 1, 1, tf.shape(y_pred)[3]]))softmax_output = tf.div(exp_pred, tensor_sum_exp)ce = - tf.reduce_mean(y_true * tf.log(tf.clip_by_value(softmax_output, 1e-12, 1.0)))return softmax_output, cedef focal_loss(y_true, y_pred, alpha=0.25, gamma=2.0):try:pk = tf.reduce_sum(y_true * y_pred, 3, keepdims=True)except:pk = tf.reduce_sum(y_true * y_pred, 3, keep_dims=True)fl = - alpha * tf.reduce_mean(tf.pow(1.0 - pk, gamma) * tf.log(tf.clip_by_value(pk, 1e-12, 1.0)))return fl

总共有两个损失函数def pw_softmaxwithloss_2d(y_true, y_pred)def focal_loss(y_true, y_pred, alpha=0.25, gamma=2.0)

# loss1
def pw_softmaxwithloss_2d(y_true, y_pred)
# loss2
def focal_loss(y_true, y_pred, alpha=0.25, gamma=2.0)

2.看网络

在这里插入图片描述

整个DFN网络分Border NetworkSmooth Network两个子网络

Smooth Network网络用于图像分割,使用的是loss是pw_softmaxwithloss_2d(y_true, y_pred)
Border Network网络用于图像分割,使用的是loss是focal_loss(y_true, y_pred, alpha=0.25, gamma=2.0)

这里我们从两个loss可以看到,Border NetworkSmooth Network网络的输出一样的特征图y_pred

# 随机生成输入数据
image = torch.randn(1, 3, 512, 512)
# 定义网络
net = DFN(21)
net.eval()
# 前向传播
res1, res2 = net(image)
# 打印输出大小
print('-----'*5)
print(res1.size(), res2.size())
print('-----'*5)

在这里插入图片描述

然后两个子网络结合标签y_true计算出loss

下面是真正训练时候的loss设计

	def loss(self):######### -*- Softmax Loss -*- #########self.softmax_b1, self.ce1 = pw_softmaxwithloss_2d(self.Y, self.b1)self.softmax_b2, self.ce2 = pw_softmaxwithloss_2d(self.Y, self.b2)self.softmax_b3, self.ce3 = pw_softmaxwithloss_2d(self.Y, self.b3)self.softmax_b4, self.ce4 = pw_softmaxwithloss_2d(self.Y, self.b4)self.softmax_fuse, self.cefuse = pw_softmaxwithloss_2d(self.Y, self.fuse)self.total_ce = self.ce1 + self.ce2 + self.ce3 + self.ce4 + self.cefuse######### -*- Focal Loss -*- #########self.fl = focal_loss(self.Y, self.o, alpha=self.alpha, gamma=self.gamma)######### -*- Total Loss -*- #########self.total_loss = self.total_ce + self.fl_weight * self.fl

可以看到

self.total_loss = self.total_ce + self.fl_weight * self.fl

所以这就是双网络融合,通过loss融合达到双网络的“融合”训练
使用focal loss监督Border Network的输出
Border Network,因为Border Network的网络设计更关注边界,所以叫Border Network

整体解释图

在这里插入图片描述


这里再做一个强调

	def loss(self):######### -*- Softmax Loss -*- #########1.self.softmax_b1, self.ce1 = pw_softmaxwithloss_2d(self.Y, self.b1)2.self.softmax_b2, self.ce2 = pw_softmaxwithloss_2d(self.Y, self.b2)3.self.softmax_b3, self.ce3 = pw_softmaxwithloss_2d(self.Y, self.b3)4.self.softmax_b4, self.ce4 = pw_softmaxwithloss_2d(self.Y, self.b4)5.self.softmax_fuse, self.cefuse = pw_softmaxwithloss_2d(self.Y, self.fuse)6.self.total_ce = self.ce1 + self.ce2 + self.ce3 + self.ce4 + self.cefuse######### -*- Focal Loss -*- #########7.self.fl = focal_loss(self.Y, self.o, alpha=self.alpha, gamma=self.gamma)######### -*- Total Loss -*- #########self.total_loss = self.total_ce + self.fl_weight * self.fl

看上图的loss,我们可以看到1-6行和第7行都是self.Y,所以两个子网络都是用的一样的标签(t_true)



  • DFN-Model(pytorch版本)
  • DFN-Tensorflow版本

  • 1.一 论文导读
  • 2.二 论文精读
  • 3.三 代码实现
  • 4.四 问题思索
  • 5.五 实验参数设置
  • 6.六 额外补充

《Learning a Discriminative Feature Network for Semantic Segmentation》
—待写
作者:Changqian Yu, etc
单位:华中科技大学&北京大学
发表会议及时间:CVPR 2018

Submission history
From: Changqian Yu [view email]
[v1] Wed, 25 Apr 2018 03:49:30 UTC (3,721 KB)

https://arxiv.org/abs/1804.09337


注意力机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素。其中重要程度的判断取决于应用场景,具备注意力机制的神经网络可更好的进行自主学习。


注意力机制包含两个步骤:
1.注意力机制需要先决定整段输入的哪个部分需要更加关注
2.从关键的部分进行特征提取,得到重要的信息


按注意力的关注域,可分为:
空间域(spatial domain)
通道域(channel domain)
层域(layer domain)
混合域(mixed domain)
时间域(time domain)

注意力机制可以帮助模型为输入图像的各个部分分配不同的权重,提取更关键、更重要的信息,使模型能够做出更准确的判断,同时不会给模型的计算和存储带来更多的消耗。


  • Abstract
    Most existing methods of semantic segmentation still suffer from two aspects of challenges: intra-class inconsistency and inter-class indistinction. To tackle these two problems, we propose a Discriminative Feature Network (DFN), which contains two sub-networks: Smooth Network and Border Network. Specifically, to handle the intra-class inconsistency problem, we specially design a Smooth Network with Channel Attention Block and global average pooling to select the more discriminative features. Furthermore, we propose a Border Network to make the bilateral features of boundary distinguishable with deep semantic boundary supervision. Based on our proposed DFN, we achieve state-of-the-art performance 86.2% mean IOU on PASCAL VOC 2012 and 80.3% mean IOU on Cityscapes dataset.

微观角度:每一个像素都对应一个具体类别

宏观角度:将语义分割看作一个任务,将一致的语义标签分配给一类事物,而不是每个像素。按照这一角度,语义分割中就会存在类间不一致类内不一致的问题

宏观应用:以语义地图为例。交通信号灯在点云地图中,它们只是三维形状,有坐标位置、朝向或车道应用范围等信息,这些信息并不足以帮助自动驾驶车辆做出行驶决策,因为交通灯还可能有红灯或绿灯等各种状态。这时语义地图就能够发挥作用,它能够辅助车辆的感知和规划系统判定交通信号灯的状态,这就是语义地图与其他地图的区别所在


一 论文导读

Border Network

  • 1.主要思想:利用多监督,使网络学习到的特征具有很强的类间不一致性。利用bottom-up结构,获取更多的语义信息
  • 2.优点:该模块可以从低阶网络获得边界信息,从高阶网络获得语义信息,再融合,避免缺失某类信息的情况出现。高阶语义信息具有优化低阶边缘信息的作用
  • 3.使用focal loss监督Border Network的输出。

二 论文精读

三 代码实现

在这里插入图片描述

在这里插入图片描述


损失

在这里插入图片描述


在这里插入图片描述

Boeder Network

  • 1.主要思想:利用多监督,使网络学习到的特征具有很强的类间不一致性。利用bottom-up结构,获取更多的语义信息
  • 2.优点:该模块可以从低阶网络获得边界信息,从高阶网络获得语义信息,再融合,避免缺失某类信息的情况出现。高阶语义信息具有优化低阶边缘信息的作用
  • 3.使用focal loss 监督Border Network的输出

四 问题思索

五 实验参数设置

  • 1.损失函数: loss = CrossEntropy + λ FocalLoss
    λ={0.05, 0.1,0.5,0.75,1},论文结论λ =0.1时效果最好
  • 2.优化器: SGD + momentum=0.9
  • 3.学习率: 0. 0001(“poly",power=0. 9)
  • 4.batchsize :32
  • 5.数据预处理:mean subtraction, 随机水平翻转,{0. 5,0.75,1,1.5,1.75}比例缩放

六 额外补充

SLAM:同步定位与建图
SLAM (simultaneous localization and mapping),也称为CML (ConcurrentMapping and Localization),即时定位与地图构建,或并发建图与定位。问题可以描述为:将一个机器人放入未知环境中的未知位置,是否有办法让机器人一边移动一边逐步描绘出此环境完全的地图,所谓完全的地图(a consistent map)是指不受障碍行进到房间可进入的每个角落。SLAM的意义是实现机器人的自主定位和导航


http://chatgpt.dhexx.cn/article/NwHmgEVW.shtml

相关文章

DANN:Unsupervised Domain Adaptation by Backpropagation

本篇是迁移学习专栏介绍的第十三篇论文,发表在ICML15上。论文提出了用对抗的思想进行domain adaptation,该方法名叫DANN(或RevGrad)。核心的问题是同时学习分类器 、特征提取器 、以及领域判别器 。通过最小化分类器误差,最大化判别器误差…

【深度域适配】二、利用DANN实现MNIST和MNIST-M数据集迁移训练

知乎专栏链接:https://zhuanlan.zhihu.com/p/109057360 CSDN链接:https://daipuweiai.blog.csdn.net/article/details/104495520 前言 在前一篇文章【深度域适配】一、DANN与梯度反转层(GRL)详解中,我们主要讲解了DANN…

基于DANN的图像分类任务迁移学习

注:本博客的数据和任务来自NTU-ML2020作业,Kaggle网址为Kaggle. 数据预处理 我们要进行迁移学习的对象是10000张32x32x3的有标签正常照片,共有10类,和另外100000张人类画的手绘图,28x28x1黑白照片,类别也是10类但无标…

【ICML 2015迁移学习论文阅读】Unsupervised Domain Adaptation by Backpropagation (DANN) 无监督领域自适应

会议:ICML 2015 论文题目:Unsupervised Domain Adaptation by Backpropagation 论文地址:http://proceedings.mlr.press/v37/ganin15.pdf 论文代码:https://github.com/fungtion/DANN 问题描述:深度学习的模型在source…

【深度域自适应】二、利用DANN实现MNIST和MNIST-M数据集迁移训练

前言 在前一篇文章【深度域自适应】一、DANN与梯度反转层(GRL)详解中,我们主要讲解了DANN的网络架构与梯度反转层(GRL)的基本原理,接下来这篇文章中我们将主要复现DANN论文Unsupervised Domain Adaptation…

【深度域适配】一、DANN与梯度反转层(GRL)详解

CSDN博客原文链接:https://blog.csdn.net/qq_30091945/article/details/104478550 知乎专栏原文链接:https://zhuanlan.zhihu.com/p/109051269 前言 在当前人工智能的如火如荼在各行各业得到广泛应用,尤其是人工智能也因此从各个方面影响当前…

【ICML 2015迁移学习论文阅读】Unsupervised Domain Adaptation by Backpropagation (DANN) 反向传播的无监督领域自适应

会议:ICML 2015 论文题目:Unsupervised Domain Adaptation by Backpropagation 论文地址: http://proceedings.mlr.press/v37/ganin15.pdf 论文代码: GitHub - fungtion/DANN: pytorch implementation of Domain-Adversarial Trai…

Domain Adaptation(领域自适应,MMD,DANN)

Domain Adaptation 现有深度学习模型都不具有普适性,即在某个数据集上训练的结果只能在某个领域中有效,而很难迁移到其他的场景中,因此出现了迁移学习这一领域。其目标就是将原数据域(源域,source domain)尽…

【迁移学习】深度域自适应网络DANN模型

DANN Domain-Adversarial Training of Neural Networks in Tensorflow域适配:目标域与源域的数据分布不同但任务相同下的迁移学习。 模型建立 DANN假设有两种数据分布:源域数据分布 S ( x , y ) \mathcal{S}(x,y) S(x,y)和目标域数据分布 T ( x , y ) …

【深度域自适应】一、DANN与梯度反转层(GRL)详解

前言 在当前人工智能的如火如荼在各行各业得到广泛应用,尤其是人工智能也因此从各个方面影响当前人们的衣食住行等日常生活。这背后的原因都是因为如CNN、RNN、LSTM和GAN等各种深度神经网络的强大性能,在各个应用场景中解决了各种难题。 在各个领域尤其…

Domain-Adversarial Training of Neural Networks

本篇是迁移学习专栏介绍的第十八篇论文,发表在JMLR2016上。 Abstrac 提出了一种新的领域适应表示学习方法,即训练和测试时的数据来自相似但不同的分布。我们的方法直接受到域适应理论的启发,该理论认为,要实现有效的域转移&#…

DANN:Domain-Adversarial Training of Neural Networks

DANN原理理解 DANN中源域和目标域经过相同的映射来实现对齐。 DANN的目标函数分为两部分: 1. 源域分类损失项 2. 源域和目标域域分类损失项 1.源域分类损失项 对于一个m维的数据点X,通过一个隐含层Gf,数据点变为D维: 然后经…

DaNN详解

1.摘要 本文提出了一个简单的神经网络模型来处理目标识别中的域适应问题。该模型将最大均值差异(MMD)度量作为监督学习中的正则化来减少源域和目标域之间的分布差异。从实验中,本文证明了MMD正则化是一种有效的工具,可以为特定图像数据集的SURF特征建立良好的域适应模型。本…

[Tensorflow2] 梯度反转层(GRL)与域对抗训练神经网络(DANN)的实现

文章目录 概述原理回顾 (可跳过)GRL 层实现使用 GRL 的域对抗(DANN)模型实现DANN 的使用案例 !!!后记 概述 域对抗训练(Domain-Adversarial Training of Neural Networks,DANN)属于广义迁移学习的一种, 可以矫正另一个域的数据集的分布, 也可…

DANN 领域迁移

DANN(Domain Adaptation Neural Network,域适应神经网络)是一种常用的迁移学习方法,在不同数据集之间进行知识迁移。本教程将介绍如何使用DANN算法实现在MNIST和MNIST-M数据集之间进行迁移学习。 首先,我们需要了解两个…

DANN-经典论文概念及源码梳理

没错,我就是那个为了勋章不择手段的屑(手动狗头)。快乐的假期结束了哭哭... DANN 对抗迁移学习 域适应Domain Adaption-迁移学习;把具有不同分布的源域(Source Domain)和目标域(Target Domain…

EHCache 单独使用

参考: http://macrochen.blogdriver.com/macrochen/869480.html 1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中…

ehcache 的使用

http://my.oschina.net/chengjiansunboy/blog/70974 在开发高并发量,高性能的网站应用系统时,缓存Cache起到了非常重要的作用。本文主要介绍EHCache的使用,以及使用EHCache的实践经验。 笔者使用过多种基于Java的开源Cache组件,其…

Ehcache 的简单使用

文章目录 Ehcache 的简单使用背景使用版本配置配置项编程式配置XML 配置自定义监听器 验证示例代码 改进代码 备注完整示例代码官方文档 Ehcache 的简单使用 背景 当一个JavaEE-Java Enterprise Edition应用想要对热数据(经常被访问,很少被修改的数据)进行缓存时&…

SpringBoot 缓存(EhCache 使用)

SpringBoot 缓存(EhCache 使用) 源文链接:http://blog.csdn.net/u011244202/article/details/55667868 SpringBoot 缓存(EhCache 2.x 篇) SpringBoot 缓存 在 Spring Boot中,通过EnableCaching注解自动化配置合适的缓存管理器(CacheManager…