日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习(三十七)——CenterNet, Anchor-Free, NN Quantization

發布時間:2023/12/20 pytorch 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(三十七)——CenterNet, Anchor-Free, NN Quantization 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CenterNet

CenterNet是中科院、牛津、Huawei Noah’s Ark Lab的一個聯合團隊的作品。(2019.4)

論文:

《CenterNet: Keypoint Triplets for Object Detection》

上圖是CenterNet的網絡結構圖。

正如之前提到的,框對于物體來說不是一個最好的表示。同理,Corner也不是什么特別好的表示:絕大多數情況下,Corner同樣是遠離物體的。

也正是由于Corner和物體的關聯度不大,CornerNet才發明了corner pooling操作,用以提取Corner。

但是即使這樣,由于沒有anchor的限制,使得任意兩個角點都可以組成一個目標框,這就對判斷兩個角點是否屬于同一物體的算法要求很高,一但準確度差一點,就會產生很多錯誤目標框。

有鑒于此,CenterNet除了Corner之外,還添加了Center的預測分支,也就是上圖中的center pooling+center heatmap。這主要基于以下假設:如果目標框是準確的,那么在其中心區域能夠檢測到目標中心點的概率就會很高,反之亦然。

因此,首先利用左上和右下兩個角點生成初始目標框,對每個預測框定義一個中心區域,然后判斷每個目標框的中心區域是否含有中心點,若有則保留該目標框,若無則刪除該目標框。

為了和CornerNet做比較,CenterNet同樣使用了Hourglass Network作為骨干網絡。并針對中心點和角點的提取,提出了Center pooling和Cascade corner pooling操作。這里不再贅述。

參考:

https://mp.weixin.qq.com/s/wWqdjsJ6U86lML0rSohz4A

CenterNet:將目標視為點

https://zhuanlan.zhihu.com/p/62789701

中科院牛津華為諾亞提出CenterNet,one-stage detector可達47AP,已開源!

https://mp.weixin.qq.com/s/CEcN5Aljvs7AyOLPRFjUaw

真Anchor Free目標檢測----CenterNet詳解

Anchor-Free

在前面的章節,我們已經簡要的分析了Anchor Free和Anchor Base模型的差異,并介紹了兩個Anchor-Free的模型——CornerNet和CenterNet。

這里對其他比較重要的Anchor-Free模型做一個簡單介紹。

ExtremeNet

ExtremeNet是UT Austin的Xingyi Zhou的作品。(2019.1)

論文:

《Bottom-up Object Detection by Grouping Extreme and Center Points》

代碼:

https://github.com/xingyizhou/ExtremeNet

上圖是ExtremeNet的網絡結構圖。它預測是關鍵點就不光是角點和中心點了,事實上它預測了9個點。具體的方法和CenterNet類似,也是heatmap抽取關鍵點。

顯然,這類關鍵點算法是受到人臉/姿態關鍵點算法的啟發,因此它們采用Hourglass Network作為骨干網絡也就順理成章了,后者正是比較經典的關鍵點算法模型之一。

FoveaBox

論文:

《FoveaBox: Beyond Anchor-based Object Detector》

上兩圖是FoveaBox的網絡結構圖。

它的主要思路是:直接學習目標存在的概率和目標框的坐標位置,其中包括預測類別相關的語義圖和生成類別無關的候選目標框。

事實上這和YOLOv1的思路是一致的。但FoveaBox比YOLOv1精度高,主要在于FPN提供了多尺度的信息,而YOLOv1只有單尺度的信息。

此外,Focal loss也是Anchor-Free模型的常用手段。

總結

Anchor-Free模型主要是為了解決Two-stage模型運算速度較慢的問題而提出的,因此它們絕大多數都是One-stage模型。從目前的效果來看,某些Anchor-Free模型其精度已經接近Two-stage模型,但運算速度相比YOLOv3等傳統One-stage模型,仍有較大差距,尚無太大的實用優勢(可以使用,但優勢不大)。

其他比較知名的Anchor-Free模型還有:

  • FCOS

《FCOS: Fully Convolutional One-Stage Object Detection》

  • FSAF

《Feature Selective Anchor-Free Module》

  • DenseBox

《DenseBox: Unifying Landmark Localization and Object Detection》

參考

https://zhuanlan.zhihu.com/p/63024247

錨框:Anchor box綜述

https://mp.weixin.qq.com/s/dYV446meJXtCQVFrLzWV8A

目標檢測中Anchor的認識及理解

https://mp.weixin.qq.com/s/WAx3Zazx9Pq7Lb3vKa510w

目標檢測最新方向:推翻固有設置,不再一成不變Anchor

https://zhuanlan.zhihu.com/p/64563186

Anchor free深度學習的目標檢測方法

https://mp.weixin.qq.com/s/DoN-vha1H-2lHhbFOaVS8w

FoveaBox:目標檢測新紀元,無Anchor時代來臨!

https://zhuanlan.zhihu.com/p/62198865

最新的Anchor-Free目標檢測模型FCOS,現已開源!

https://mp.weixin.qq.com/s/N93TrVnUuvAgfcoHXevTHw

FCOS: 最新的one-stage逐像素目標檢測算法

https://mp.weixin.qq.com/s/04h80ubIxjJbT9BxQy5FSw

目標檢測:Anchor-Free時代

https://zhuanlan.zhihu.com/p/66156431

從Densebox到Dubox:更快、性能更優、更易部署的anchor-free目標檢測

https://zhuanlan.zhihu.com/p/63273342

聊聊Anchor的"前世今生"(上)

https://zhuanlan.zhihu.com/p/68291859

聊聊Anchor的"前世今生"(下)

https://zhuanlan.zhihu.com/p/62372897

物體檢測的輪回:anchor-based與anchor-free

https://mp.weixin.qq.com/s/m_PvEbq2QbTXNmj_gObKmQ

Anchor-free目標檢測之ExtremeNet

NN Quantization

概述

NN的量化計算是近來NN計算優化的方向之一。相比于傳統的浮點計算,整數計算無疑速度更快,而NN由于自身特性,對單點計算的精確度要求不高,且損失的精度還可以通過retrain的方式恢復大部分,因此通常的科學計算的硬件(沒錯就是指的GPU)并不太適合NN運算,尤其是NN Inference。

傳統的GPU并不適合NN運算,因此Nvidia也好,還是其他GPU廠商也好,通常都在GPU中又集成了NN加速的硬件,因此雖然商品名還是叫做GPU,但是工作原理已經有別于傳統的GPU了。

這方面的文章以Xilinx的白皮書較為經典:

https://china.xilinx.com/support/documentation/white_papers/c_wp486-deep-learning-int8.pdf

利用Xilinx器件的INT8優化開展深度學習

Distiller

https://nervanasystems.github.io/distiller/index.html

Intel AI Lab推出的Distiller是一個關于模型壓縮、量化的工具包。這里是它的文檔,總結了業界主要使用的各種方法。

參考:

https://mp.weixin.qq.com/s/A5ka8evElmcuHdowof7kww

Intel發布神經網絡壓縮庫Distiller:快速利用前沿算法壓縮PyTorch模型

Conservative vs. Aggressive

Quantization主要分為兩大類:

1.“Conservative” Quantization。這里主要指不低于INT8精度的量化。

實踐表明,由于NN訓練時采用的凸優化算法,其最終結果一般僅是局部最優。因此,即便是兩次訓練(數據集、模型完全相同,樣本訓練順序、參數初始值隨機)之間的差異,通常也遠大于FP64的精度。所以,一般而言,FP32對于模型訓練已經完全夠用了。

FP16相對于FP32,通常會有不到1%的精度損失。即使是不re-train的INT8,通常也只有3%~15%的精度損失。因此這類量化被歸為"Conservative" Quantization。其特點是完全采用FP32的參數進行量化,或者在此基礎上進行re-train。

1.“Aggressive” Quantization。這里指的是INT4或更低精度的量化。

這種量化由于過于激進,re-train也沒啥大用,因此必須從頭訓練。而且由于INT4表達能力有限,模型結構也要進行一定的修改,比如增加每一層的filter的數量。

INT量化

論文:

《On the efficient representation and execution of deep acoustic models》

一個浮點數包括底數和指數兩部分。將兩者分開,就得到了一般的INT量化。

量化的過程一般如下:

1.使用一批樣本進行推斷,記錄下每個layer的數值范圍。

2.根據該范圍進行量化。

量化的方法又分為兩種:

1)直接使用浮點數表示中的指數。也就是所謂的fractional length,相當于2的整數冪。

2)使用更一般的scale來表示。這種方式的精度較高,但運算量稍大。

量化誤差過大,一般可用以下方法減小:

1.按照每個channel的數值范圍,分別量化。

2.分析weight、bias,找到異常值,并消除之。這些異常值通常是由于死去的神經元所導致的誤差無法更新造成的。

如何確定每個layer的數值范圍,實際上也有多種方法:

1.取整批樣本在該layer的數值范圍的并集,也就是所有最大(小)值的極值。

2.取所有最大(小)值的平均值。

UINT量化

論文:

《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》

UINT量化使用bias將數據搬移到均值為0的區間。

這篇論文的另一個貢獻在于:原先的INT8量化是針對已經訓練好的模型。而現在還可以在訓練的時候就進行量化——前向計算進行量化,而反向的誤差修正不做量化。

bfloat16

bfloat16是Google針對AI領域的特殊情況提出的浮點格式。目前已有Intel的AI processors和Google的TPU,提供對該格式的原生支持。

上圖比較了bfloat16和IEEE fp32/fp16的差異。可以看出bfloat16有如下特點:

1.bfloat16可以直接截取float32的前16位得到,所以在float32和bfloat16之間進行轉換時非常容易。

2.bfloat16的Dynamic Range比float16大,不容易下溢。這點在training階段更為重要,梯度一般都挺小的,一旦下溢變成0,就傳遞不了了。

3.bfloat16既可以用于訓練又可以用于推斷。Amazon也證明Deep Speech模型使用BFloat的訓練和推斷的效果都足夠好。Uint8在大部分情況下不能用于訓練,只能用于推斷。

論文:

《Mixed Precision Training》

參考:

https://www.zhihu.com/question/275682777

如何評價Google在TensorFlow中引入的bfloat16數據類型?

https://zhuanlan.zhihu.com/p/56114254

PAI自動混合精度訓練—TensorCore硬件加速單元在阿里PAI平臺落地應用實踐

Saturate Quantization

上述各種量化方法都是在保證數值表示范圍的情況下,盡可能提高fl或者scale。這種方法也叫做Non-saturation Quantization。

NVIDIA在如下文章中提出了一種新方法:

http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf

8-bit Inference with TensorRT

Saturate Quantization的做法是:將超出上限或下限的值,設置為上限值或下限值。

如何設置合理的Saturate threshold呢?

可以設置一組門限,然后計算每個門限的分布和原分布的相似度,即KL散度。然后選擇最相似分布的門限即可。

量化技巧

1.設計模型時,需要對輸入進行歸一化,縮小輸入值的值域范圍,以減小量化帶來的精度損失。

2.tensor中各分量的值域范圍最好相近。這個的原理和第1條一致。比如YOLO的結果中,同時包含分類和bbox,而且分類的值域范圍遠大于bbox,導致量化效果不佳。

3.最好不要使用ReluN這樣的激活函數,死的神經元太多。神經元一旦“死亡”,相應的權值就不再更新,而這些值往往不在正常范圍內。

4.對于sigmoid、tanh這樣的S形函數,其輸入在∣x∣>σ\mid x \mid > \sigmax>σ范圍的值,最終的結果都在sigmoid、tanh的上下限附近。因此,可以直接將這些x值量化為σ\sigmaσ。這里的σ\sigmaσ的取值,對于sigmoid來說是6,而對于tanh來說是3。

NN硬件的指標術語

MACC:multiply-accumulate,乘法累加。

FLOPS:Floating-point Operations Per Second,每秒所執行的浮點運算次數。

顯然NN的INT8計算主要以MACC為單位。

gemmlowp

gemmlowp是Google提出的一個支持低精度數據的GEMM(General Matrix Multiply)庫。

代碼:

https://github.com/google/gemmlowp

論文

《Quantizing deep convolutional networks for efficient inference: A whitepaper》

總結

以上是生活随笔為你收集整理的深度学习(三十七)——CenterNet, Anchor-Free, NN Quantization的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。