CoordConv(NeurIPS 2018)

news2024/12/25 2:38:04

paper:An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution

official implementation:https://github.com/uber-research/coordconv

存在的问题

本文揭示并分析了CNN在两种不同类型空间表示之间转换能力的欠缺:从密集笛卡尔表示到稀疏基于像素的表示。虽然这种转换似乎对网络来说很容易学习,但实验结果表明比预计要困难,至少当网络由如若干卷积层组成时是这样的。虽然直接堆叠卷积层擅长于图像分类等任务,但对于坐标转换来说它们不是正确的模型。

作者首先设计了一个数据集Not-so-Clever dataset并在这个数据集上进行模型坐标转换能力的实验。这个数据集是Sort-of-CLEVER数据集的单一目标、灰度版本,具体是在一个64x64的画布上放置9x9的方块,方块完整的落在画布内因此方块中心点可能落入的区域大小为56x56,遍历中心点所有可能的位置得到一个包含3136样本的数据集,对于每个样本 \(i\),数据集包含三个字段:

  • \(C_{i}\in\mathbb{R}^2\),其中心位置的笛卡尔坐标 \((x,y)\)
  • \(P_{i}\in\mathbb{R}^{64\times 64}\),中心点像素的one-hot表示
  • \(I_{i}\in\mathbb{R}^{64\times 64}\),64x64的图像,其中9x9的方块在上面

这3136张图片按两种方式划分为训练集和测试集:uniform,所有可能的位置随机按80/20分成训练集和测试集;quadrant,按象限划分,三个象限作为训练集,另一个象限作为测试集。样本以及划分示例如图2

The CoordConv Layer

本文提出的CoordConv是对标准卷积层的一个简单延伸,这里只考虑二维的情况。卷积在很多任务中都表现良好可能是由于下面三个因素:学习参数较少、在GPU上计算快、具有平移不变性。CoordConv保留了前两个特性,但是允许网络根据任务需要学习保留或丢弃第三点即平移不变性。丢弃平移不变性似乎会阻碍网络学习可泛化函数的能力,但在后续实验中可以看到,分配少量的网络容量来建模问题的non-translation invariant非平移不变性可以得到一个更容易训练的模型并且泛化能力更强。 

CoordConv的具体实现很简单:增加额外的通道,其中填充的是对应位置的坐标(常数,不参与训练),然后与输入沿通道维度concatenate,然后接一个普通卷积层。图3展示了二维坐标 \(i,j\) 的情况。

后续实验中,坐标 \(i,j\) 都进行了归一化使它们落入[-1, 1]范围内。

Supervised Coordinate tasks

Supervised Coordinate Classification

第一个也是最简单的任务是监督坐标分类,如图1上所示,输入为坐标 \((x,y)\),网络需要学习绘制正确的输出坐标。这是一个简单的多分类问题,每个像素位置为一个类别。 

图4展示的是两种划分方式下训练集精度 vs.测试集精度。网络结构如下所示,包含6个stride=2的转置卷积。 

在uniform划分数据集上,模型有一定的泛化能力,但最高的测试精度为86%,远没有达到100%。由此作者得到了第一个惊人的结论:即使在监督训练下,对卷积网络来说,学习一个从 \((x,y)\) 到one-hot像素的平滑函数是困难的。此外,训练卷积网络达到86%的精度需要一个小时,200k的参数。在quadrant划分数据集上,卷积网络根本无法泛化,图5展示了训练集和测试集预测结果的总和,可以直观地看出卷积模型的记忆能力和泛化能力的欠缺。

相反CoordConv在两个划分数据集上都获得了完美的性能,只需要7.5k的参数和10-20s的训练时间。参数的简约进一步验证了它是更适合坐标转换任务的模型。

Supervised Coordinate Regression

由于学习由笛卡尔坐标转换为基于像素的坐标非常困难,作者又研究了相反的转换是否同样困难。作者尝试了不同的卷积网络结构一个4层的卷积层加全连接层(85k参数,具体结构表S1所示)在uniform划分数据集上表现很好(平均误差不到半个像素),但同样的结构在quadrant划分数据上完全失败了。一个小的全卷积结构(12k参数)在quadrant划分数据集上可以实现有限的泛化(误差平均约5个像素)但在uniform划分数据集上表现很差。如图5右所示。 

许多因素都可能导致性能的变化,包含max-pooling、BN、全连接层的使用,作者并没有充分研究每个因素在这些任务上导致表现不佳的程度,相反只报告了在两种划分数据集上寻找可行架构的努力并没有产生任何赢家。相比之下,一个900参数的CoordConv模型,具体一个CoordConv层后接几层普通卷积就可以在两种划分数据集上快速训练和泛化。

Applicability to Classification, Object Detection

正如预期的那样,对于需要平移不变性的分类任务,CoordConv对分类任务并没有显著的帮助。添加一个额外的8输出通道的1x1 CoordConv,ResNet-50的Top-5精度运行5次平均只提升了0.04%。但至少CoordConv不会影响性能,因为它总是可以学会忽略坐标。 

目标检测的实验是在包含随机缩放并在64x64的背景上随机放置的MNIST数字组成的数据集上进行的,训练集有9000张,测试集有1000张。模型采用Faster R-CNN,结构如下所示

结果如下,可以看到当使用CoordConv,测试集的IOU提升了24%。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新书推荐:《分布式商业生态战略:未来数字商业新逻辑与企业数字化转型新策略》

近两年,商业经济环境的不确定性越来越明显,市场经济受到疫情、技术、政策等多方因素影响越来越难以预测,黑天鹅事件时有发生。在国内外经济方面,国际的地缘政治对商业经济产生着重大的影响,例如供应链中断,…

这才是No.1的门禁管理技巧!赶紧抄作业

随着社会的不断发展和科技的飞速进步,安全管理成为各个领域不可或缺的重要环节。在这个背景下,门禁监控系统作为一种先进而高效的安全管理工具逐渐受到了广泛关注和应用。 客户案例 企业大厦管理 在江苏某繁忙的商业大厦中,管理人员常常面临…

Elastic Stack--01--简介、安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. Elastic Stack 简介为什么要学习ESDB-Engines搜索引擎类数据库排名常年霸榜![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/051342a83f574c8c910cda…

尝试一下最新的联合办公利器ONLYOffice

下载下来一起试试吧 桌面安装版下载地址:https://www.onlyoffice.com/zh/download-desktop.aspx) 官网地址:https://www.onlyoffice.com 普通Office对联合办公的局限性 普通Office软件(如Microsoft Office、Google Docs等)在面对…

记一次 migo 报错 M7097 没有可用于物料 XXX 的库存过账

背景:公司重构SAP后,引入返利物料,此部分物料的数量统计单位是USD/CNY,不启用会计类视图,但是启用批次管理,但是正常物料不启用批次管理。这是大背景,物料类型为ZZZZ 但是实际需要的是 检查物料还是没有被用作其他方…

什么是web组态?

一、web组态的定义和背景 在深入探讨之前,我们先回顾一下“组态”的定义。在工业自动化领域,组态软件是用于创建监控和数据采集(SCADA)系统的工具,它允许工程师构建图形界面,实现与各种设备和机器的数据交互…

玩转网络抓包利器:Wireshark常用协议分析讲解

Wireshark是一个开源的网络协议分析工具,它能够捕获和分析网络数据包,并以用户友好的方式呈现这些数据包的内容。Wireshark 被广泛应用于网络故障排查、安全审计、教育及软件开发等领域。关于该工具的安装请参考之前的文章:地址 ,…

本地配置多个git账户及ll设置

本地配置多个git账户 清除全局配置将命令行,切换到ssh目录生成GitLab和Gitee的公钥、私钥去对应的代码仓库添加 SSH Keys添加私钥ll设置 管理密钥验证仓库配置关于gitgitee.com: Permission denied (publickey) 清除全局配置 此步骤可以不做,经测试不影…

ElasticSearch聚合操作

目录 ElasticSearch聚合操作 基本语法 聚合的分类 后续示例数据 Metric Aggregation Bucket Aggregation ES聚合分析不精准原因分析 提高聚合精确度 ElasticSearch聚合操作 Elasticsearch除搜索以外,提供了针对ES 数据进行统计分析的功能。聚合(aggregation…

vue里echarts的使用:画饼图和面积折线图

vue里echarts的使用,我们要先安装echarts,然后在main.js里引入: //命令安装echarts npm i echarts//main.js里引入挂载到原型上 import echarts from echarts Vue.prototype.$echarts = echarts最终我们实现的效果如下: 头部标题这里我们封装了一个全局公共组件common-he…

(AISG)M16圆形连接器高强度工业应用互连选型

什么是M16连接器 M16连接器又称C09圆形连接器&J09圆形连接器作为连接设备的一种,其优点是结构紧凑、使用方便、芯数丰富(2PIN、3PIN、4PIN、5PIN、6PIN、7PIN、8PIN、12PIN、14PIN、16PIN、19PIN、24PIN)。因此,圆形连接器在…

Shader基础的简单实现(基于URP渲染)

一个模型是很多个顶点组成,顶点数据中包含坐标、法线、切线、UV坐标、顶点颜色等等组成。 URP(Universal Render Pipeline)通用渲染管线,是Unity在2019.3版本之后推出的一种新的渲染管线。传统的渲染管线在渲染多光源的情况,是把每一个主要光…

TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑

TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑!这个问题就涉及到了资金投资的额度了。众所周知,现在京东里面一个英伟达的显卡,按照RTX3090(24G显存-涡轮风扇)版本报价是7000-7500之间。如果你买一张这样的单卡…

K8S故障处理指南:网络问题排查思路

1. 前言 对于私有化环境,客户的网络架构,使用的云平台存在着各种差异,K8S网络可能会出现各种问题,此文着重讲解遇到此种问题的排查方法和思路,不会涉及相关网络底层技术描述. 环境说明 由于我们的k8s网络组件默认使…

赞:java使用easy-excel导入数据的通用模板思路

我们在项目中都会有导入导出的功能&#xff0c;这篇文章主要是讲导出的&#xff0c;导入我会在另外一篇博客文章中讲解。 现在我们开始。 首先&#xff1a;需要在项目中的pom.xml中导入easy-excel的依赖 <!--使用esay-excel进行导入导出 --> <dependency> &…

TypeScript01:安装TypeScript

一、TypeScript 官方网站&#xff1a;https://www.tslang.cn/docs/index.html 练习场&#xff1a;https://www.typescriptlang.org/zh/play 好处&#xff1a; 强类型语言&#xff0c;对JS弱类型的一个良好补充&#xff1b;TS利于大型项目团队合作&#xff0c;可以一定程度…

LeetCode 热题 100 | 二叉树(下)

目录 1 114. 二叉树展开为链表 2 105. 从前序与中序遍历序列构造二叉树 3 437. 路径总和 III 菜鸟做题&#xff08;即将返校版&#xff09;&#xff0c;语言是 C 1 114. 二叉树展开为链表 题眼&#xff1a;展开后的单链表应该与二叉树 先序遍历 顺序相同。 而先序遍历就…

Android 圆环带刻度条进度动画效果实现

效果图 需求是根据传感器做一个重力球效果&#xff0c;先实现了动画后续加上跟传感器联动. 又是摆烂的一天&#xff0c; 尚能呼吸&#xff0c;未来可期啊 View源码 package com.android.circlescalebar.view;import android.content.Context; import android.content.res.Typ…

IIC通信驱动EEPROM,AT24C02硬件存储器编程(2)

接着上一篇博客文章讲解了IIC协议的原理及编程思路&#xff0c;本篇博客文章将以IIC为基础&#xff0c;从芯片手册入手&#xff0c;梳理讲解如何对AT24C02进行驱动编程&#xff0c;实现数据的读写操作。IIC通信驱动硬件编程 (1)-CSDN博客https://blog.csdn.net/weixin_49337111…

flannel网络拓扑

测试环境创建 在k8s中部署flannel网络插件 https://blog.csdn.net/weixin_64124795/article/details/128894411 参考文章部署k8s集群和flannel网络插件 我的k8s集群物理环境 我的集群中只有两个节点master和node1节点 [rootmaster sjs]# kubectl get node NAME STATU…