DACS: Domain Adaptation via Cross-domain Mixed Sampling 学习笔记

news/2024/5/10 9:26:39/文章来源:https://blog.csdn.net/passer__/article/details/129157385

DACS

  • 介绍
  • 方法
    • Naive Mixing
    • DACS
    • ClassMix![在这里插入图片描述](https://img-blog.csdnimg.cn/ca4f83a2711e49f3b754ca90d774cd50.png)
    • 算法流程
    • 实验结果
    • 反思

介绍

近年来,基于卷积神经网络的语义分割模型在众多应用中表现出了显著的性能。然而当应用于新的领域时,这些模型通常不能很好地泛化,特别是从合成数据到真实数据时。本文讨论了无监督域适应(UDA)的问题,即对来自一个源域的标记数据进行训练,同时从目标域的无标记数据进行学习。现有的方法通过对这些无标签图像进行伪标签训练取得了成功。人们提出了多种技术来降低由域转移引起的低质量伪标签的情况,并取得了不同程度的成功。我们提出了DACS:通过跨域混合采样的域适应,它将来自两个域的图像与相应的标签和伪标签混合在一起。除了标签数据本身外,这些混合样本还会被训练。

我们注意到,在现有的纠正错误伪标签的方法中,目标域中的某些图像会过度采样,图像中的低置信度像素会被过滤掉。许多低置信度像素与语义边界上的预测对齐,从而导致那里的训练信号减弱。传统的直接使用混合的方法会导致一些类进行合并。

总结来说:DACS提出了三个创新点。
①引入了一种新的算法,将目标域的图片和源域中的图片进行混合,创造出来一个新的、高扰动的样本
②通过实验证明跨域的图像混合可以很大程度上解决类合并的问题
③在GTA5—>City 取得了sota 的水准

方法

Naive Mixing

在这里插入图片描述
对于朴素的混合方法就是拿目标域的两张图进行混合,然后生成Xm,然后获得其对应的伪标签Ym,然后将源域中的Xs,Ys,和在目标域混合生成的图片再放到一块训练。

DACS

在这里插入图片描述
DACS也是基于上述的混合的思想,不过使用的混合图片一张来自源域一张来自目标域。首先使用网络对目标域的数据生成伪标签,对于混合的方式采用的方式ClassMix,将源域Xs中的图像随机一半类抠出来粘贴到目标域的图片上,然后生成对应的伪标签,此时已知源域图片Xs和对应的标签Ys和混合图片Xm及其对应的标签Ym。

ClassMix在这里插入图片描述

如图所示:获取的B,Sb,A,Sa,通过Sa获得动态的二进制掩码M,随机将A中的一半类粘贴到B得到一个新的混合图Xa,然后将Sa,SB和M获得对应的特征图Ya。

算法流程

在这里插入图片描述
和方法里面的DACS讲解的差不多,先获取源域中的图标和对应的标签,然后获取目标域的图片,通过训练的网络获取对应的伪标签,然后将Xs和Xt通过ClassMix的方式混合,同时将标签也进行混合。然后将生成Xm和源域中的Xs利用网络生成对应的标签,然后去计算对应的交叉熵损失函数,执行反向传播和梯度下降。对于其他的参数在论文中都已经详细给了就不多介绍了。

实验结果

在这里插入图片描述
在这里插入图片描述
上两张图分别是在GTA5和SYNTHIA下的Iou和MIou。可以看出来虽然不是每一项都是sota,但是很多项都是top1。
在这里插入图片描述
为了进一步评估DACS,并更好地理解类合并问题的根源,进行了额外的实验,并在上图中展示。结果显示了论文3.1节中解释的朴素混合,以及仅使用伪标签而不使用任何混合和使用不同的混合策略。从上图可以看出,DACS的性能明显强于朴素混合。如论文3.1节所述,最重要的原因是朴素混合合并了几个类,这极大地影响了整体性能。从表中每个班级的借据可以清楚地看出,其中七个班级的朴素混合分数低于1%。

反思

老文章,但是没搜到别人写的学习笔记,就单纯按照自己所理解和代码中的写了,有不对的地方望指正。论文中提到了ClassMix,但是没有提到那个二进制掩码的地方,我去翻了翻代码发现确实是有相关的步骤,而且最后实验就跟最后论文说的一样用了2个源域的和2个目标域的图进行跑的。(等考完试看完代码再补充更新)

代码链接:https://github.com/vikolss/DACS/blob/master/trainUDA.py

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

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

相关文章

乐友商城学习笔记(一)

SpringCloud 什么是SpringCloud 在SpringBoot基础上构建的微服务框架固定步骤 1.引入组件的启动器2.覆盖默认配置3.在引导类上添加相应的注解 eureka 注册中心,服务的注册与发现服务端 1.引入服务器启动器:eureka-server2.添加了配置 spring.applicati…

leetcode 21~30 学习经历

leetcode 21~30 学习经历21. 合并两个有序链表22. 括号生成23. 合并K个升序链表24. 两两交换链表中的节点25. K 个一组翻转链表26. 删除有序数组中的重复项27. 移除元素28. 找出字符串中第一个匹配项的下标29. 两数相除30. 串联所有单词的子串小结21. 合并两个有序链表 将两个升…

opencv-StereoBM算法流程(二)

OpenCV BM对于处理非畸变的立体图像, 主要有以下 3 个步骤:1. 预处理滤波: 使图像亮度归一化并加强图像纹理2. 立体匹配: 沿着水平极线用 SAD 窗口进行匹配搜索3. 再滤波: 去除坏的匹配点.匹配之后, 如果左右视差检查使能了 disp12MaxDiff > 0, 还有使用cv::validateDispari…

复习知识点三:做人不能半途而废,就算躺平也要躺最舒服的那张床

目录 运算符​编辑 键盘录入: 练习:键盘输入数字并求和 练习: 算术运算符 隐式转换(自动类型提升) 强制转换 练习1: 字符串的 "" 操作 ​编辑 练习 1: 练习2: 练习3: 自增自减运算符 赋值运算符 关系运算符(比较运算符)的分类 练习: 逻辑运算符 短路逻辑运…

qt qchart学习

Qt Charts主要由QChartView、QChart、QLegend图例、坐标轴(由QAbstractAxis子类实现)、**数据源(由QAbstractSeries子类实现)**等组成使用QChart的前期准备1. Qt5.9及以上版本;2. .pro文件中添加QT charts3. 在使用QChart的各个控件之前,引用头文件并必…

Vulnhub靶场----4、DC-4

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-4下载地址:https://download.vulnhub.com/dc/DC-4.zip kali:192.168.144.148 DC-4:192.168.144.152 二、渗透流程 端口扫描:nmap -T5 -p- -sV -sT -A 192.168.144.1…

OSI模型和网络协议简介

文章目录一、OSI七层模型1.1什么是OSI七层模型?1.2这个网络模型究竟是干什么呢?二、TCP/IP协议三、常见协议四、物联网通信协议以及MQTT4.1 物联网七大通信协议4.2 MQTT特性一、OSI七层模型 1.1什么是OSI七层模型? 我们需要了解互联网的本质…

MySQL进阶篇之MySQL索引

今天主要学习MySQL索引,不过主要是使用Linux系统使用MySQL,主要是先在Linux环境下按照MySQL,然后演示索引的相关操作,介绍了索引的底层结构,索引的分类及语法,索引的性能分析,索引的使用规则&am…

《爆肝整理》保姆级系列教程python接口自动化(二十一)--unittest简介(详解)

简介 前边的随笔主要介绍的requests模块的有关知识个内容,接下来看一下python的单元测试框架unittest。熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和 TestNG,这个招聘的需求上也是经常见到的。python 里面也有单元 测试框架-unitt…

数据结构_ 堆结构与堆排序(c++ 实现 + 完整代码 )

堆结构与堆排序 文章目录堆结构与堆排序引入堆堆结构所满足的数学特性准备代码----------- 往堆中插入元素----------- 删除堆顶堆排序构建完整代码及测试动态分配版本非动态版本引入堆 二叉树 具有左孩子与右孩子的最普通的二叉树。 满二叉树 特殊的二叉树:每个节…

HTML课堂笔记

HTML 课堂笔记 文章目录相关概念code我的第一个html页面基本标签相关概念 1、什么是HTML? Hyper Text Markup Language 超文本标记语言 超文本?超级文本,例如流媒体,声音、视频、图片等。 标记语言?这种语言是由大量…

【Git】使用Git上传项目到远程仓库Gitee码云步骤详解

电脑里存放了很多项目,有的备份,有的没备份,如果不仔细分类管理的话,时间一长,到时看到那就会觉得非常杂乱,很难整理,这里有一个叫源代码托管,用过它的都知道,方便管理和…

【7/101】101次面试之测试技术面试题

01、什么是兼容性测试?兼容性测试侧重哪些方面?答:兼容性测试是一种软件测试类型,它的主要目的是确保一个应用程序在不同的操作系统、不同的浏览器、不同的设备、不同的网络环境等各种环境下能够正常运行,并且不会产生…

【并发编程十八】线程局部存储(TLS)

【并发编程十八】线程局部存储(TLS)一、定义二、线程局部存储的实现1、windows系统2、linux系统3、c11三、windows系统1、线程局部存储是分块的(TLS_MINIMUM_AVAILABLE)2、获得索引3、通过索引:存储数据、取出数据4、释放索引和内…

UI自动化测试、接口测试等自动化测试策略

今天跟大家介绍UI测试、接口测试、单元测试主要内容,以及每种测试花费时间讨论。 UI测试【Selenium】 UI测试是最接近软件真实用户使用行为的测试类型。通常是模拟真实用户使用软件的行为,即模拟用户在软件界面上的各种操作,并验证这些操作对…

从0探索NLP——神经网络

从0探索NLP——神经网络 1.前言 一提人工智能,最能想到的就是神经网络,但其实神经网络只是深度学习的主要实现方式。 现在主流的NLP相关任务、模型大都是基于深度学习也就是构建神经网络实现的,所以这里讲解一下神经网络以及简单的神经网络…

Anaconda和PyCharm的一些安装问题和命令

今天更新了Windows上的Anaconda到2.3.2,PyCharm到2022.3。 ——发现是纯纯的犯贱orz。出了一堆问题。在这里记录一下供后来者参考。 Anaconda安装 将.\anaconda3\Scripts 和.\anaconda3\Library\bin添加到系统环境变量中。 新建环境的目录在.\anaconda3\envs下 N…

【黑盒模糊测试】路由器固件漏洞挖掘实战--AFL++ qemu_mode

前言 很久之前就想写AFL++的qemu_mode了,只是模糊测试专题的文章有些过于耗费时间,加上工作原因导致一直搁置。最近需要出差会用到黑盒模糊测试,所以就当做复习一遍,我记得Fuzzing 101也有一个qemu_mode的练习,有空的话下一篇文章更新吧~ 编写不易,如果能够帮助到你,希望…

linux的文件权限介绍

文件权限 在linux终端输入 ls -lh 出现下面界面 介绍 基本信息 其中的开头代表着文件类型和权限 而 root 和kali 则分别代表用户名和用户组名用户名顾名思义就是这个文件属于哪一个用户用户组是说自己在写好一个文件后,这个文件是属于该用户所有,…

Java中的Stack与Queue

文章目录一、栈的概念及使用1.1 概念1.2 栈的使用1.3 栈的模拟实现二、队列的概念及使用2.1 概念2.2 队列的使用2.3 双端队列(Deque)三、相关OJ题3.1 用队列实现栈。3.2 用栈实现队列。总结一、栈的概念及使用 1.1 概念 栈:一种特殊的线性表,其只允许在…