针对低分辨率或小目标的卷积-SPDConv

news/2024/7/10 23:52:46 标签: 人工智能, YOLO, 计算机视觉, 深度学习

针对低分辨率或小目标的卷积-SPDConv

  • 摘要
  • 引言
  • A New Building Block:SPD-Conv
  • 附录
    • 代码:

摘要

卷积神经网络在许多计算机视觉任务中取得了巨大成功。然而,在图像低分辨率目标较小任务上,他们的性能迅速下降。在本文中,我们指出,这根源于现有CNN架构中存在的一个有缺陷但常见的设计,即使用strided convolution和/或pooling layers,这导致细粒度信息的丢失和不够有效的特征表示的学习。为此,我们提出了一个新的CNN构建快, 称为SPD-Conv,取代每个strided convolution层和每个pool层(因为完全消除他们)。SPD-Conv由一个space-to-depth(SPD)层和一个non-strided convolution层组成,可以应用于大多数CNN架构。我们将这种新设计解释为两个最具代表性的计算机视觉任务:目标检测和图像分类,然后,我们通过将SPD-Conv应用于YOLOv5和ResNet创建了新的CNN架构。
代码地址: https://github.com/LabSAINT/SPD-Conv

引言

自从AlexNet提出以来,卷积神经网络在许多计算机视觉任务中表现出色。然而,所有这些CNN模型在训练和推断中都需要高质量的输入,例如:AlexNet最初是在227 X 227的清晰图片上进行训练和评估的,但是将图像分辨率降低为1/4和1/8后,其分类的准确性分别下降了14%和30%,类似也使用于VGG和ResNet,在目标检测的情况下,小目标检测是一项非常具有挑战性的任务,因为较小的目标本身分辨率较低,并且对于模型学习而言,上下文信息也受限制。此外,他们通常于同一图像中的大对象共存,大对象往往也在特征学习过程中占主导地位,从而使得小对象无法被检测到。
本文认为,现有CNN中存在的一个缺陷但常见的设计导致了性能下降,即,在CNN架构的早期层使用步幅卷积或池化,这种设计的不利影响通常不会表现出来,因为大多数研究的情况都是友好的,图像具有良好的分辨率,对象的大小适中。因此,存在着大量的冗余像素信息可以被卷积或者池化方便的跳过,模型仍然可以学习到良好的特征。然而,在更困难的任务中,当图像模糊或对象较小时,冗余信息的奢侈假设不在成立,当前的设计开始遭受详细信息和学习特征不足的损失。
为了解决这一问题,我们提出了一种CNN的新构建快,称为SPD-Conv 完全替代了下采样和池化。SPD-Conv是一个空间到深度层,仅跟随一个非步幅卷积层。SPD层对特征图X进行将采样,当保留了通道维度中的所有信息,因此没有信息损失,我们受到了图像转换技术的启发,该技术在将原始图像馈送到神经网络之前对其进行重新缩放,但我们将其广泛推广到网络内部和整个网络中的特征图的将采样,此外,我们在每个SPD之后添加了一卷积操作,使用科学系的参数减少通道数量,我们提出的方法即通用又统一,即SPD可以应用于大多数CNN架构,并且以相同的方式替代了步幅卷积和池化。
在这里插入图片描述

A New Building Block:SPD-Conv

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
论文地址:https://arxiv.org/pdf/2208.03641v1.pdf
在这里插入图片描述

附录

代码:

# SPD-Conv
import torch
import torch.nn as nn
class Spd(nn.Module):
    def __init__(self,dimension=1):
        super().__init__()
        self.d = dimension
    def forward(self,x):
        return torch.cat([x[...,::2,::2],x[...,1::2,::2],x[...,::2,1::2],x[...,1::2,1::2]],1)
data = torch.zeros(3,64,640,640)
con = Spd()
con(data).shape

在这里插入图片描述


http://www.niftyadmin.cn/n/4941893.html

相关文章

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…

java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

错误: java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfigurationat org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolSession$AbstractTriggerValidator.startTriggerValidator(TezSessionPoolSession.java:74)at org.apache.hadoop.hive.ql.e…

R语言实现免疫浸润分析(1)

免疫浸润分析是生物信息学研究中的一项关键内容,它旨在评估肿瘤微环境中不同类型的免疫细胞组成。免疫细胞在肿瘤发展和治疗中起着至关重要的作用,因为它们可以影响肿瘤的生长、扩散和对治疗的响应。 为了了解免疫细胞在肿瘤中的分布和数量,…

Spring--BeanFactory和FactoryBean区别

BeanFactory 和 FactoryBean 是 Spring 框架中两个不同的概念,它们在对象的管理和创建过程中具有不同的角色和功能。下面是它们之间的区别: BeanFactory: BeanFactory 是 Spring 框架的核心接口之一,它是一个对象容器&#xff0c…

hive-无法启动hiveserver2

启动hiveserver2没有反应&#xff0c;客户端也无法连接( beeline -u jdbc:hive2://node01:10000 -n root) 报错如下 查看hive的Log日志&#xff0c;发现如下报错 如何解决 在hive的hive_site.xml中添加如下代码 <property><name>hive.server2.active.passive…

JAVA语言:什么是懒加载机制?

JVM没有规定什么时候加载,一般是什么时候使用这个class才会什么时候加载,但是JVM规定了什么时候必须初始化(初始化是第三步、装载、连接、初始化),只要加载之后,那么肯定是要进行初始化的,所以我们就可以通过查看这个类有没有进行初始化,从而判断这个类有没有被加载。 …

【BASH】回顾与知识点梳理(二十八)

【BASH】回顾与知识点梳理 二十八 二十八. 例行性工作排程(crontab)28.1 什么是例行性工作排程Linux 工作排程的种类&#xff1a; at, cronCentOS Linux 系统上常见的例行性工作 28.2 仅执行一次的工作排程atd 的启动at 的运作方式实际运作单一工作排程at 工作的管理batch&…

【Spring】深入理解 Spring 事务及其传播机制

文章目录 一、Spring 事务是什么二、Spring 中事务的实现方法2.1 Spring 编程式事务&#xff08;手动&#xff09;2.1.1 编程式事务的使用演示2.1.2 编程式事务存在的问题 2.2 Spring 声明式事务&#xff08;自动&#xff09;2.2.1 Transactional 作用范围2.2.2 Transactional …