Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >YOLOv8优化创新:backbone改进 | 微软新作StarNet:超强轻量级Backbone | CVPR 2024

YOLOv8优化创新:backbone改进 | 微软新作StarNet:超强轻量级Backbone | CVPR 2024

原创
作者头像
AI小怪兽
发布于 2024-05-15 05:41:48
发布于 2024-05-15 05:41:48
2.3K00
代码可运行
举报
文章被收录于专栏:毕业设计毕业设计YOLO大作战
运行总次数:0
代码可运行

💡💡💡创新点:star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力,这就是StarNet的核心创新,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟

💡💡💡如何跟YOLOv8结合:替代YOLOv8的backbone

1.原理介绍

论文:https://arxiv.org/pdf/2403.19967

摘要:最近的研究引起了人们对网络设计中尚未开发的“星型操作”(元素智能乘法)潜力的关注。虽然有很多直观的解释,但其应用背后的基本原理在很大程度上仍未被探索。我们的研究试图揭示明星手术将输入映射到高维、非线性特征空间的能力——类似于核技巧——无需扩大网络。我们进一步介绍了StarNet,一个简单而强大的原型,在紧凑的网络结构和高效的预算下展示了令人印象深刻的性能和低延迟。就像天上的星星一样,星星的运作看起来不起眼,但却蕴藏着巨大的潜力。

为了便于说明,构建了一个用于图像分类的demo block,如图 1 左侧所示。通过在stem层后堆叠多个demo block,论文构建了一个名为DemoNet的简单模型。保持所有其他因素不变,论文观察到逐元素乘法(star operation)在性能上始终优于求和,如图 1 右侧所示。

通过元素乘法融合不同的子空间特征的学习范式越来越受到关注,论文将这种范例称为star operation(由于元素乘法符号类似于星形)。

2. starnet加入YOLOv8

2.1 新建ultralytics/nn/backbone/starnet.py

核心代码

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
"""
Implementation of Prof-of-Concept Network: StarNet.

We make StarNet as simple as possible [to show the key contribution of element-wise multiplication]:
    - like NO layer-scale in network design,
    - and NO EMA during training,
    - which would improve the performance further.

Created by: Xu Ma (Email: ma.xu1@northeastern.edu)
Modified Date: Mar/29/2024
"""
import torch
import torch.nn as nn
from timm.models.layers import DropPath, trunc_normal_
from timm.models.registry import register_model

from ultralytics.nn.modules import (Conv, Bottleneck,C2f)





model_urls = {
    "starnet_s1": "https://github.com/ma-xu/Rewrite-the-Stars/releases/download/checkpoints_v1/starnet_s1.pth.tar",
    "starnet_s2": "https://github.com/ma-xu/Rewrite-the-Stars/releases/download/checkpoints_v1/starnet_s2.pth.tar",
    "starnet_s3": "https://github.com/ma-xu/Rewrite-the-Stars/releases/download/checkpoints_v1/starnet_s3.pth.tar",
    "starnet_s4": "https://github.com/ma-xu/Rewrite-the-Stars/releases/download/checkpoints_v1/starnet_s4.pth.tar",
}


class ConvBN(torch.nn.Sequential):
    def __init__(self, in_planes, out_planes, kernel_size=1, stride=1, padding=0, dilation=1, groups=1, with_bn=True):
        super().__init__()
        self.add_module('conv', torch.nn.Conv2d(in_planes, out_planes, kernel_size, stride, padding, dilation, groups))
        if with_bn:
            self.add_module('bn', torch.nn.BatchNorm2d(out_planes))
            torch.nn.init.constant_(self.bn.weight, 1)
            torch.nn.init.constant_(self.bn.bias, 0)


class StarNetBlock(nn.Module):
    def __init__(self, dim, mlp_ratio=3, drop_path=0.):
        super().__init__()
        self.dwconv = ConvBN(dim, dim, 7, 1, (7 - 1) // 2, groups=dim, with_bn=True)
        self.f1 = ConvBN(dim, mlp_ratio * dim, 1, with_bn=False)
        self.f2 = ConvBN(dim, mlp_ratio * dim, 1, with_bn=False)
        self.g = ConvBN(mlp_ratio * dim, dim, 1, with_bn=True)
        self.dwconv2 = ConvBN(dim, dim, 7, 1, (7 - 1) // 2, groups=dim, with_bn=False)
        self.act = nn.ReLU6()
        self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()

    def forward(self, x):
        input = x
        x = self.dwconv(x)
        x1, x2 = self.f1(x), self.f2(x)
        x = self.act(x1) * x2
        x = self.dwconv2(self.g(x))
        x = input + self.drop_path(x)
        return x

​原文详见

https://blog.csdn.net/m0_63774211/category_12511737.html

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
salesforce零基础学习(七十五)浅谈SOSL(Salesforce Object Search Language)
在工作中,我们更多操作的是一个表的对象,所以我们对SOQL的使用很多。但是有时候,我们需要对几个表进行查询操作,类似salesforce的全局搜索功能,这时,使用SOQL没法满足功能了,我们就需要使用
Zero-Zhang
2018/01/05
1.1K0
salesforce零基础学习(七十五)浅谈SOSL(Salesforce Object Search Language)
Salesforce Batch Apex 批处理(三)Database.Stateful接口
Batch处理中,根据特定需求,会有在处理中计算数量的业务,例如现在需要计算所有满足条件的Opportunity表total__c的总额。
repick
2021/11/22
8900
Salesforce Batch Apex 批处理(三)Database.Stateful接口
Salesforce sendEmail 常见应用(二)
看上边log,虽然显示发送成功,但是并没有收到邮件,看来在异常处理里边无法发送出去,只能另外想办法。
repick
2022/09/11
3850
Salesforce sendEmail 常见应用(二)
salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
本文主要介绍了Salesforce SOQL的基础知识,包括什么是SOQL、如何查询数据、如何更新数据、如何删除数据、如何批量处理数据等。同时,还介绍了SOQL中的where语句、order by语句、limit语句等基本语法和示例。最后,还介绍了如何通过SOQL实现多表关联查询,并给出了相应的示例代码。
Zero-Zhang
2018/01/05
2.6K0
salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
Salesforce Batch Apex 批处理(五)AsyncApexJob情报
如下,在batch所有方法里边都有【Database.BatchableContext】Object,前边讲的的例子中,都没有用到BC,因为它是用来取得【AsyncApexJob】情报跟踪Job进程的,然后可以及时发送邮件共享信息还可以做成后台log并出力等等。
repick
2021/11/23
1.2K0
Salesforce Batch Apex 批处理(五)AsyncApexJob情报
Salesforce学习 What is Trigger in Salesforce?
用于访问系统设置的字段值,并影响记录中的任何更改。换句话说,在这里一般用于更改其他Object的值。
repick
2020/12/12
8630
Salesforce JSON应用(二) 反序列化deserializeUntyped方法,序列化serialize方法
在Apex中使用deserializeUntyped方法反序列化处理,查看具体内容。
repick
2022/09/24
4101
Salesforce JSON应用(二) 反序列化deserializeUntyped方法,序列化serialize方法
salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)
Ajax Toolkit 参考文档:https://resources.docs.salesforce.com/212/latest/en-us/sfdc/pdf/apex_ajax.pdf 在项目中,我们有时会在自定义button或者action上使用javascript进行一些SOQL或者DML操作处理;有时会在VF页面中获取相关数据进行逻辑处理,或者进行简单的DML操作,这时候就会使用到Ajax Toolkit。 因为Ajax Toolkit操作数据信息是在浏览器端的,进行复杂的逻辑或者对大量数据处理
Zero-Zhang
2018/04/02
1.4K0
salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)
salesforce零基础学习(一百零二)Limitation篇之 CPU Limit
本篇参考: https://help.salesforce.com/articleView?id=000339361&type=1&mode=1 https://developer.salesforc
Zero-Zhang
2021/04/01
9950
salesforce零基础学习(一百零二)Limitation篇之 CPU Limit
Salesforce Flow如何调用Batch(一)
ApexClass中做成用于传递参数的内部类【UpdateOpportunityRequest】,引数必须指定成【InvocableVariable】
repick
2022/09/27
5070
Salesforce Flow如何调用Batch(一)
Salesforce学习 Lightning(二)【RecordType】
我们做成的【PageLayout】,可以分配给某些Group的人去使用看,也就是通过【Profile】去设置【PageLayout】的权限,但是如果是同一个级别的Group的两个人想看不同的【PageLayout】的情况下,如何实现呢,例如面向【国企】和【民营企业】,需要显示不同风格的【PageLayout】,就可以用【RecordType】去区分。
repick
2021/01/01
1.3K0
salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation
 本篇参考: https://help.salesforce.com/s/articleView?id=000384468&type=1 https://help.salesforce.com/s/a
Zero-Zhang
2022/11/21
5520
salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable
本篇知识参考:https://developer.salesforce.com/trailhead/force_com_dev_intermediate/asynchronous_apex/async
Zero-Zhang
2018/01/05
2.1K1
salesforce 零基础学习(三十九) soql函数以及常量
Zero-Zhang
2017/12/26
2.8K0
salesforce 零基础学习(三十九) soql函数以及常量
Salesforce Future method in salesforce – @future
future方法用于在系统资源可用时在单独的线程中运行进程,我们可以将future方法用于任何我们希望在其自己的线程中异步运行的操作。
repick
2021/11/23
8590
Salesforce Future method in salesforce – @future
Salesforce JSON应用(一) 反序列化deserializeUntyped方法,序列化serialize方法
【deserializeUntyped】方法用于将JSON内容反序列化成基本数据类型的集合,不能反序列化sObject类型。
repick
2022/09/23
5390
Salesforce JSON应用(一) 反序列化deserializeUntyped方法,序列化serialize方法
Salesforce Spring '21 新功能 SOQL FIELDS()方法介绍
使用过Oracle或者Sql Server的朋友们都知道,语句【SELECT * FROM 表】可以查询整个表的项目,之前Salesforce是不支持此功能的,只能每个项目都写一遍,非常麻烦,随着2021年2月14日,Spring '21的正式上线,此类功能终于可以使用了,它就是今天要介绍的SOQL FIELDS()方法,前提是当前用户对于取得项目必须具备参照权限,
repick
2021/11/16
9190
Salesforce Spring '21 新功能 SOQL FIELDS()方法介绍
salesforce 零基础学习(三十七) DML及Database方法简单描述
Zero-Zhang
2018/01/05
6510
【salesforce】用lwc 实现community site popup page 覆盖homepage (LWC)
需求是针对guest user追加一个验证画面,也就是guest user上来加载的时候会弹出一个画面,让输入邮箱紧接着输入验证码 验证通过才会跳转到home画面,而admin user直接登录home page。
Merry he
2023/05/05
4410
Salesforce 大数据量处理篇(一)Skinny Table
本篇参考:https://developer.salesforce.com/docs/atlas.en-us.salesforce_large_data_volumes_bp.meta/salesforce_large_data_volumes_bp/ldv_deployments_infrastructure_skinny_tables.htm
Zero-Zhang
2021/01/07
8910
推荐阅读
相关推荐
salesforce零基础学习(七十五)浅谈SOSL(Salesforce Object Search Language)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验