【CVPR2023】奔跑而非行走:追求更高FLOPS以實現更快神經網絡

文章目錄

  • 一、論文信息
  • 二、論文概要
  • 三、實驗動機
  • 四、創新之處
  • 五、實驗分析
  • 六、核心代碼
    • 注釋版本
  • 七、實驗總結

一、論文信息

  • 論文題目:Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks
  • 中文題目:奔跑而非行走:追求更高FLOPS以實現更快神經網絡
  • 論文鏈接:點擊跳轉
  • 代碼鏈接:點擊跳轉
  • 作者:Jierun Chen (中文名:陳潔潤),香港科技大學(HKUST)、Shiu-hong Kao (高詩鴻),香港科技大學(HKUST)、Hao He (何豪),香港科技大學(HKUST)、Weipeng Zhuo (卓偉鵬),香港科技大學(HKUST)\Song Wen (溫松),羅格斯大學(Rutgers University)、Chul-Ho Lee (李哲昊),德州州立大學(Texas State University)、S.-H. Gary Chan (陳紹豪),香港科技大學(HKUST)
  • 單位: 香港科技大學(HKUST)、羅格斯大學、德克薩斯州立大學
  • 核心速覽:提出一種新型部分卷積(PConv)和FasterNet架構,在減少FLOPs的同時提升FLOPS,實現更快的推理速度。

二、論文概要

本文指出當前輕量級神經網絡雖然FLOPs低,但由于內存訪問頻繁導致FLOPS(每秒浮點運算次數)不高,實際延遲并未顯著降低。作者提出部分卷積(PConv),僅對部分通道進行卷積,減少計算和內存訪問,并基于此構建FasterNet,在多個視覺任務上實現速度與精度的最優平衡。

三、實驗動機

  • 現有輕量網絡(如MobileNet、ShuffleNet)雖FLOPs低,但FLOPS也低,導致實際延遲高。

  • 深度可分離卷積(DWConv)等操作內存訪問頻繁,成為速度瓶頸。

  • 目標:在減少FLOPs的同時保持高FLOPS,實現真正的高速度。

兩個概念:FLOPS和FLOPs(s一個大寫一個小寫)
FLOPS: FLoating point Operations Per Second的縮寫,即每秒浮點運算次數,或表示為計算速度。是一個衡量硬件性能的指標。
FLOPs: FLoating point OPerationS 即 浮點計算次數,包含乘法和加法,只和模型有關,可以用來衡量其復雜度。
總結起來,S大寫的是計算速度,小寫的是計算量。計算量 / 計算速度 = 計算時間Latency

在這里插入圖片描述

四、創新之處

  • 提出PConv:僅對連續的一部分通道進行卷積,其余通道保留,大幅減少計算和內存訪問。

  • T型感受野:PConv + PWConv 組合形成T型卷積,更關注中心位置,與常規卷積近似。

  • FasterNet架構:基于PConv構建,結構簡潔,硬件友好,在多個設備上(GPU/CPU/ARM)均表現優異。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

五、實驗分析

  • PConv速度對比:在相同FLOPs下,PConv的FLOPS顯著高于DWConv和GConv。

  • ImageNet分類:FasterNet在相同精度下延遲更低,吞吐量更高。

  • 下游任務(檢測/分割):在COCO數據集上,FasterNet作為Backbone顯著提升檢測與分割性能。

  • 消融實驗:驗證了部分比例 r=1/4 最優,BN比LN更高效,不同規模模型適用不同激活函數。

在這里插入圖片描述

六、核心代碼

class Partial_conv3(nn.Module):def __init__(self, dim, n_div, forward):super().__init__()self.dim_conv3 = dim // n_divself.dim_untouched = dim - self.dim_conv3self.partial_conv3 = nn.Conv2d(self.dim_conv3, self.dim_conv3, 3, 1, 1, bias=False)if forward == 'slicing':self.forward = self.forward_slicingelif forward == 'split_cat':self.forward = self.forward_split_catelse:raise NotImplementedErrordef forward_slicing(self, x: Tensor) -> Tensor:# only for inferencex = x.clone()   # !!! Keep the original input intact for the residual connection laterx[:, :self.dim_conv3, :, :] = self.partial_conv3(x[:, :self.dim_conv3, :, :])return xdef forward_split_cat(self, x: Tensor) -> Tensor:# for training/inferencex1, x2 = torch.split(x, [self.dim_conv3, self.dim_untouched], dim=1)x1 = self.partial_conv3(x1)x = torch.cat((x1, x2), 1)return x

注釋版本

class Partial_conv3(nn.Module):def __init__(self, dim, n_div, forward):super().__init__()self.dim_conv3 = dim // n_div  # 計算要進行3x3卷積的通道數self.dim_untouched = dim - self.dim_conv3  # 計算保持不變的通道數self.partial_conv3 = nn.Conv2d(self.dim_conv3, self.dim_conv3, 3, 1, 1, bias=False)  # 定義3x3卷積# 根據forward參數選擇前向傳播的實現方式 兩個函數實質上是等價的操作,只是實現方式不同而已。if forward == 'slicing':self.forward = self.forward_slicingelif forward == 'split_cat':self.forward = self.forward_split_catelse:raise NotImplementedErrordef forward_slicing(self, x: Tensor) -> Tensor:# 僅用于推理的切片方法x = x.clone()   # 克隆輸入以保持原始輸入不變(為了后續殘差連接)# 只對前dim_conv3個通道進行卷積操作x[:, :self.dim_conv3, :, :] = self.partial_conv3(x[:, :self.dim_conv3, :, :])return xdef forward_split_cat(self, x: Tensor) -> Tensor:# 用于訓練/推理的分割-連接方法# 將輸入分割為兩部分:要進行卷積的部分和保持不變的部分x1, x2 = torch.split(x, [self.dim_conv3, self.dim_untouched], dim=1)x1 = self.partial_conv3(x1)  # 對第一部分進行卷積x = torch.cat((x1, x2), 1)   # 將兩部分重新連接return x

七、實驗總結

  • PConv 在減少FLOPs的同時顯著提升FLOPS,是替代DWConv的高效選擇。

  • FasterNet 在ImageNet、COCO等任務上實現SOTA速度-精度權衡。

  • 方法簡潔、通用性強,適用于多種硬件平臺。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921960.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921960.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM(二)--- 類加載子系統

目錄 前言 一、類加載過程 1. loading階段 2. Linking階段 2.1 驗證 2.2 準備 2.3 解析 3. Initialization階段 二、類加載器 1. 類加載器的分類 2. 用戶自定義類加載器 三、雙親委派機制 四、其他知識點 前言 JVM的內存結構如圖所示: 一、類加載過程…

Docker 容器的使用

1.容器的基本信息[roothost1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ac8245b5b08 img-layers-test "python /app/app.py" 45 hours ago Exited (0) 45 hour…

LLMs之Hallucinate:《Why Language Models Hallucinate》的翻譯與解讀

LLMs之Hallucinate:《Why Language Models Hallucinate》的翻譯與解讀 導讀:該論文深入分析了語言模型中幻覺現象的成因,認為幻覺源于預訓練階段的統計壓力和后訓練階段評估體系對猜測行為的獎勵。論文提出了通過修改評估方法,使其…

Spring Cloud @RefreshScope 作用是什么?

RefreshScope 是 Spring Cloud 中的一個重要注解,主要作用如下: 主要功能動態刷新配置 使 Bean 能夠在運行時動態刷新配置屬性當配置中心的配置發生變化時,無需重啟應用即可生效作用域管理 為 Bean 創建一個特殊的作用域 refresh標記的 Bean …

Flutter SDK 安裝與國內鏡像配置全流程(Windows / macOS / Linux)

這是一份面向國內網絡環境的 Flutter 從零到可運行指引:覆蓋 SDK 安裝、平臺依賴準備、國內鏡像配置(PUB_HOSTED_URL、FLUTTER_STORAGE_BASE_URL)、Android 側 Gradle 倉庫加速,以及 Java/Gradle 版本兼容的關鍵坑位與排查思路。文…

【Java】NIO 簡單介紹

簡介 從 Java 1.4 版本開始引入的一個新的 I/O API,可以替代標準的 Java I/O。提供了與標準 I/O 不同的工作方式,核心是 通道(Channel)、緩沖區(Buffer) 和 選擇器(Selector)。支持非…

Java爬蟲獲取京東item_get_app數據的實戰指南

一、引言京東開放平臺提供了豐富的API接口,其中item_get_app接口可用于獲取商品的詳細信息。這些數據對于市場分析、價格監控、商品推薦等場景具有重要價值。本文將詳細介紹如何使用Java編寫爬蟲,通過調用京東開放平臺的item_get_app接口獲取商品詳情數據…

Vue3源碼reactivity響應式篇之批量更新

概述 在vue3響應式系統設計中,批量更新是優化性能的核心機制之一。當短時間內頻繁多次修改響應式數據時,批量更新可以避免頻繁觸發訂閱者的更新操作,將這些更新操作合并為一次,從而減少不必要的計算和DOM操作。 批量更新也是利用鏈…

AI 模型訓練過程中參數用BF16轉向FP16的原因

大模型訓練從 FP16 轉向 BF16 是一個關鍵的技術演進,其核心原因在于 BF16 在動態范圍和精度之間取得了更優的平衡,從而極大地提升了訓練(尤其是大模型訓練)的穩定性和有效性。 1. 背景 為什么需要半精度浮點數 (FP16)?…

python網絡爬取個人學習指南-(五)

**************************************************************************************************************author:keyinfodate:2025-09-09 23:50title:網絡信息爬取之多聯級標題內容點擊****************************************…

RAG - 檢索增強生成

第一部分:RAG 詳解一、RAG 是什么?RAG(Retrieval-Augmented Generation,檢索增強生成)是一種將信息檢索(或知識檢索)與大語言模型(LLM)的生成能力相結合的技術框架。它的…

大數據畢業設計選題推薦-基于大數據的分化型甲狀腺癌復發數據可視化分析系統-Spark-Hadoop-Bigdata

?作者主頁:IT研究室? 個人簡介:曾從事計算機專業培訓教學,擅長Java、Python、微信小程序、Golang、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦??? Java項目 Python…

Spring Bean掃描

好的,沒有問題。基于我們之前討論的內容,這是一篇關于 Spring Bean 掃描問題的深度解析博客。Spring Bean掃描作者:Gz | 發布時間:2025年9月9日🎯 Spring如何找到你的Bean? 首先要理解原理。Spring的組件掃…

【 運維相關】-- HTTP 壓測/負載發生器之新秀 oha

目錄 oha 項目分析(hatoo/oha) 一、概述 二、安裝 三、快速上手 三、常用參數(摘選) 四、輸出解讀(終端 TUI) 五、與其它工具對比 六、最佳實踐 七、注意事項 八、參考 oha 項目分析(h…

淘寶閃購基于FlinkPaimon的Lakehouse生產實踐:從實時數倉到湖倉一體化的演進之路

摘要:本文整理自淘寶閃購(餓了么)大數據架構師王沛斌老師在 Flink Forward Asia 2025 城市巡回上海站的分享。引言在數字化轉型的浪潮中,企業對實時數據處理的需求日益增長。傳統的實時數倉架構在面對業務快速變化和數據規模爆炸性增長時,逐漸…

Android應用添加日歷提醒功能

功能 在安卓應用里調用系統日歷&#xff0c;直接創建一個帶提醒的日歷事件&#xff0c;甚至不需要跳轉到日歷界面&#xff0c;只需要獲取系統日歷的讀取權限即可。 需要的權限 在AndroidManifest.xml里添加 <uses-permission android:name"android.permission.READ_CAL…

?Git Bisect 二分查找定位錯誤總結

# Git Bisect 二分查找指南## 1. 基本原理&#xff08;ASCII示意圖&#xff09; 假設提交歷史是一條時間線&#xff0c;Ggood&#xff08;正常&#xff09;&#xff0c;Bbad&#xff08;異常&#xff09;&#xff1a;提交順序: G --- G --- G --- B --- B --- B | | | 初始正常…

ThingsKit物聯網平臺 v2.0.0 發布|前端UI重構、底層架構升級

v2.0.0 Release發布日期&#xff1a;2025/08/25 代碼標簽&#xff1a;v2.0.0_Release&#x1f947; 新增功能國標級聯&#xff08;支持上級、下級國標級聯&#xff09;視頻回放、錄像計劃&#xff08;用戶可以通過錄像計劃生成對應的視頻回放并查看&#xff09;Modbus_TCP協…

Lua > Mac Mini M4安裝openresty

Mac Mini M4安裝openresty 主要參考 https://www.cnblogs.com/helios-fz/p/15703260.html brew uninstall nginxbrew update brew install pcre openssl #brew install geoip# brew tap openresty/brew # brew install openresty # brew install openresty/brew/openresty# VER…

【多線程案例】:單例模式

多線程案例8.1 單例模式餓漢模式懶漢模式懶漢模式-單線程版懶漢模式-多線程版懶漢模式-多線程版(改進)8.1 單例模式 單個實例. 在一個 java 進程中, 要求指定的類,只能有唯–個實例。&#xff08;嘗試 new 多個實例的時候, 就會直接編譯報錯&#xff09; 單例模式是校招中最常…