輕量級網路基礎知識記錄

2021-10-05 19:35:33 字數 1315 閱讀 4295

基礎知識記錄

計算消耗(1)全連線層(2)啟用函式(3) 卷積層(4) batch normalization(5) 其他層

記憶體占用(1)權重的記憶體占用(2) feature maps 和中間結果

flops:注意全大寫,是floating point operations per second的縮寫,意指每秒浮點運算次數,理解為計算速度。是乙個衡量硬體效能的指標。

flops:注意s小寫,是floating point operations的縮寫(s表複數),意指浮點運算數,理解為計算量。可以用來衡量演算法/模型的複雜度。

maccs(multiply-accumulate operations,乘-加操作),也叫 madds。但說穿了,都是點積運算而已。

什麼叫乘-加?神經網路裡的運算大都是這樣的:y = w[0]*x[0] + w[1]*x[1] + w[2]*x[2] + … + w[n-1]*x[n-1]

mobilenet卷積:3x3 depthwise conv+bn+relu 和 1x1 pointwise conv+bn+relu

shufflenet是face++提出的一種輕量化網路結構,主要思路是使用group convolution和channel shuffle改進resnet,可以看作是resnet的壓縮版本。

目前衡量模型複雜度的乙個通用指標是flops,具體指的是multiply-add數量,但是這卻是乙個間接指標,因為它不完全等同於速度。如圖1中的(c)和(d),可以看到相同flops的兩個模型,其速度卻存在差異。這種不一致主要歸結為兩個原因,首先影響速度的不僅僅是flops,如記憶體使用量(memory access cost, mac),這不能忽略,對於gpus來說可能會是瓶頸。另外模型的並行程度也影響速度,並行度高的模型速度相對更快。另外乙個原因,模型在不同平台上的執行速度是有差異的,如gpu和arm,而且採用不同的庫也會有影響。

空洞卷積的作用(用來提高精確度的)

(1)擴大感受野:在deep net中為了增加感受野且降低計算量,總要進行降取樣(pooling或s2/conv),這樣雖然可以增加感受野,但空間解析度降低了。為了能不丟失解析度,且仍然擴大感受野,可以使用空洞卷積。這在檢測,分割任務中十分有用。一方面感受野大了可以檢測分割大目標,另一方面解析度高了可以精確定位目標。

(2)捕獲多尺度上下文資訊:空洞卷積有乙個引數可以設定dilation rate,具體含義就是在卷積核中填充dilation rate-1個0,因此,當設定不同dilation rate時,感受野就會不一樣,也即獲取了多尺度資訊。多尺度資訊在視覺任務中相當重要啊。

從這裡可以看出,空洞卷積可以任意擴大感受野,且不需要引入額外引數,但如果把解析度增加了,演算法整體計算量肯定會增加。

Java 基礎知識記錄

int整型 string字串型 char字元型 float,double浮點型別,即小數,使用float時小數後加f 輸出字元system.out.println hello world 每個println獨佔一行,print合併在同一行 自增 自減 加 減 乘 除法 餘數 與 或 非 短路與 短路...

Unity Shader 基礎知識記錄

首先謝謝大家的支援,其次如果你碰到什麼其他問題的話,歡迎來 我自己的乙個 討論群559666429來,大家一起找答案,共同進步 你能看到這篇文章,說明你最近在和我做一樣的事情 學習shader 由於也是剛開始學習,此處也是整理一些基礎的知識。unity官網資源 著色器 貓都能學會的unity sha...

python基礎知識記錄

1.python 必須頂格寫,除非是巢狀在其他語句中 2.每一層巢狀需要相差4個空格,且同一級 必須對齊 3.當行注釋用 多行注釋用 三引號 注釋 或 注釋 4.if while for語句以冒號結尾,然後通過4個空格開始下一層 5.每行語句結尾不用 6.識別符號除了字母數字下劃線之外可以用中文 7...