縱覽輕量化卷積神經網絡:SqueezeNet、MobileNet、ShuffleNet...

2021-01-11 機器之心Pro

機器之心專欄

作者:餘霆嵩

本文就近年提出的四個輕量化模型進行學習和對比,四個模型分別是:SqueezeNet、MobileNet、ShuffleNet、Xception。

目錄

一、引言

二、輕量化模型

2.1 SqueezeNet

2.2 MobileNet

2.3 ShuffleNet

2.4 Xception

三、網絡對比

一、引言

自 2012 年 AlexNet 以來,卷積神經網絡(簡稱 CNN)在圖像分類、圖像分割、目標檢測等領域獲得廣泛應用。隨著性能要求越來越高,AlexNet 已經無法滿足大家的需求,於是乎各路大牛紛紛提出性能更優越的 CNN 網絡,如 VGG、GoogLeNet、ResNet、DenseNet 等。由於神經網絡的性質,為了獲得更好的性能,網絡層數不斷增加,從 7 層 AlexNet 到 16 層 VGG,再從 16 層 VGG 到 GoogLeNet 的 22 層,再到 152 層 ResNet,更有上千層的 ResNet 和 DenseNet。雖然網絡性能得到了提高,但隨之而來的就是效率問題。

效率問題主要是模型的存儲問題和模型進行預測的速度問題(以下簡稱速度問題)

第一,存儲問題。數百層網絡有著大量的權值參數,保存大量權值參數對設備的內存要求很高;第二,速度問題。在實際應用中,往往是毫秒級別,為了達到實際應用標準,要麼提高處理器性能(看英特爾的提高速度就知道了,這點暫時不指望),要麼就減少計算量。只有解決 CNN 效率問題,才能讓 CNN 走出實驗室,更廣泛的應用於移動端。對於效率問題,通常的方法是進行模型壓縮(Model Compression),即在已經訓練好的模型上進行壓縮,使得網絡攜帶更少的網絡參數,從而解決內存問題,同時可以解決速度問題。

相比於在已經訓練好的模型上進行處理,輕量化模型模型設計則是另闢蹊徑。輕量化模型設計主要思想在於設計更高效的「網絡計算方式」(主要針對卷積方式),從而使網絡參數減少的同時,不損失網絡性能。

本文就近年提出的四個輕量化模型進行學習和對比,四個模型分別是:SqueezeNet、MobileNet、ShuffleNet、Xception。

(PS: 以上四種均不是模型壓縮方法!!)

以下是四個模型的作者團隊及發表時間

其中 ShuffleNet 論文中引用了 SqueezeNet;Xception 論文中引用了 MobileNet

二、輕量化模型

由於這四種輕量化模型僅是在卷積方式上做了改變,因此本文僅對輕量化模型的創新點進行詳細描述,對實驗以及實現的細節感興趣的朋友,請到論文中詳細閱讀。

2.1 SqueezeNet

SqueezeNet 由伯克利&斯坦福的研究人員合作發表於 ICLR-2017,論文標題:

《SqueezeNet:AlexNet-level accuracy with 50x fewer parameters and <0.5MB》

命名:

從名字——SqueezeNet 就知道,本文的新意是 squeeze,squeeze 在 SqueezeNet 中表示一個 squeeze 層,該層採用 1*1 卷積核對上一層 feature map 進行卷積,主要目的是減少 feature map 的維數(維數即通道數,就是一個立方體的 feature map,切成一片一片的,一共有幾片)。

創新點:

1. 採用不同於傳統的卷積方式,提出 fire module;fire module 包含兩部分:squeeze 層+expand 層

創新點與 inception 系列的思想非常接近!首先 squeeze 層,就是 1*1 卷積,其卷積核數要少於上一層 feature map 數,這個操作從 inception 系列開始就有了,並美其名曰壓縮,個人覺得「壓縮」更為妥當。

Expand 層分別用 1*1 和 3*3 卷積,然後 concat,這個操作在 inception 系列裡面也有。

SqueezeNet 的核心在於 Fire module,Fire module 由兩層構成,分別是 squeeze 層+expand 層,如下圖 1 所示,squeeze 層是一個 1*1 卷積核的卷積層,expand 層是 1*1 和 3*3 卷積核的卷積層,expand 層中,把 1*1 和 3*3 得到的 feature map 進行 concat。

具體操作情況如下圖所示:

Fire module 輸入的 feature map 為 H*W*M 的,輸出的 feature map 為 H*M*(e1+e3),可以看到 feature map 的解析度是不變的,變的僅是維數,也就是通道數,這一點和 VGG 的思想一致。

首先,H*W*M 的 feature map 經過 Squeeze 層,得到 S1 個 feature map,這裡的 S1 均是小於 M 的,以達到「壓縮」的目的,詳細思想可參考 Google 的 Inception 系列。

其次,H*W*S1 的特徵圖輸入到 Expand 層,分別經過 1*1 卷積層和 3*3 卷積層進行卷積,再將結果進行 concat,得到 Fire module 的輸出,為 H*M*(e1+e3) 的 feature map。

fire 模塊有三個可調參數:S1,e1,e3,分別代表卷積核的個數,同時也表示對應輸出 feature map 的維數,在文中提出的 SqueezeNet 結構中,e1=e3=4s1。

講完 SqueezeNet 的核心——Fire module,看看 SqueezeNet 的網絡結構,如下圖所示:

網絡結構設計思想,同樣與 VGG 的類似,堆疊的使用卷積操作,只不過這裡堆疊的使用本文提出的 Fire module(圖中用紅框部分)

看看 Squezeenet 的參數數量以及性能:

在這裡可以看到,論文題目中提到的小於 0.5M,是採用了 Deep Compression 進行模型壓縮之後的結果!!

看了上圖再回頭看一看論文題目:

SqueezeNet :AlexNet-level accuracy with 50x fewer parameters and <0.5MB

標!題!黨!SqueezeNet < 0.5MB, 這個是用了別的模型壓縮技術獲得的,很容易讓人誤以為 SqueezeNet 可以壓縮模型!!

SqueezeNet 小結:

1 Fire module 與 GoogLeNet 思想類似,採用 1*1 卷積對 feature map 的維數進行「壓縮」,從而達到減少權值參數的目的;

2 採用與 VGG 類似的思想——堆疊的使用卷積,這裡堆疊的使用 Fire module

SqueezeNet 與 GoogLeNet 和 VGG 的關係很大!

2.2 MobileNet

MobileNet 由 Google 團隊提出,發表於 CVPR-2017,論文標題:

《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》

命名:

MobileNet 的命名是從它的應用場景考慮的,顧名思義就是能夠在移動端使用的網絡模型。

創新點:

1. 採用名為 depth-wise separable convolution 的卷積方式代替傳統卷積方式,以達到減少網絡權值參數的目的。

通過採用 depth-wise convolution 的卷積方式,達到:1. 減少參數數量 2. 提升運算速度。(這兩點是要區別開的,參數少的不一定運算速度快!還要看計算方式!)

depth-wise convolution 不是 MobileNet 提出來的,也是借鑑,文中給的參考文獻是 2014 年的博士論文——《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》

depth-wise convolution 和 group convolution 是類似的,depth-wise convolution 是一個卷積核負責一部分 feature map,每個 feature map 只被一個卷積核卷積;group convolution 是一組卷積核負責一組 feature map,每組 feature map 只被一組卷積核卷積。Depth-wise convolution 可以看成是特殊的 group convolution,即每一個通道是一組。

MobileNets 精華在於卷積方式——depth-wise separable convolution;採用 depth-wise separable convolution,會涉及兩個超參:Width Multiplier 和 Resolution Multiplier 這兩個超參只是方便於設置要網絡要設計為多小,方便於量化模型大小。

MobileNet 將標準卷積分成兩步:

第一步 Depth-wise convolution, 即逐通道的卷積,一個卷積核負責一個通道,一個通道只被一個卷積核「濾波」;第二步,Pointwise convolution,將 depth-wise convolution 得到的 feature map 再「串」起來,注意這個「串」是很重要的。「串」作何解?為什麼還需要 pointwise convolution?作者說:However it only filters input channels, it does not combine them to create new features. Soan additional layer that computes a linear combination ofthe output of depth-wise convolution via 1 × 1 convolutionis needed in order to generate these new features。從另外一個角度考慮,其實就是:輸出的每一個 feature map 要包含輸入層所有 feature map 的信息。然而僅採用 depth-wise convolution,是沒辦法做到這點,因此需要 pointwise convolution 的輔助。

「輸出的每一個 feature map 要包含輸入層所有 feature map 的信息」這個是所有採用 depth-wise convolution 操作的網絡都要去解決的問題,ShuffleNet 中的命名就和這個有關!詳細請看 2.3

Standard convolution、depth-wise convolution 和 pointwise convolution 示意圖如下:

其中輸入的 feature map 有 M 個,輸出的 feature map 有 N 個。

對 Standard convolution 而言,是採用 N 個大小為 DK*DK 的卷積核進行操作(注意卷積核大小是 DK*DK, DK*DK*M 是具體運算時一個卷積核的大小!)

而 depth-wise convolution + pointwise convolution 需要的卷積核呢?

Depth-wise convolution :一個卷積核負責一個通道,一個通道只被一個卷積核卷積;則這裡有 M 個 DK*DK 的卷積核;

Pointwise convolution:為了達到輸出 N 個 feature map 的操作,所以採用 N 個 1*1 的卷積核進行卷積,這裡的卷積方式和傳統的卷積方式是一樣的,只不過採用了 1*1 的卷積核;其目的就是讓新的每一個 feature map 包含有上一層各個 feature map 的信息!在此理解為將 depth-wise convolution 的輸出進行「串」起來。

下面舉例講解 Standard convolution、depth-wise convolution 和 pointwise convolution。

假設輸入的 feature map 是兩個 5*5 的,即 5*5*2;輸出 feature map 數量為 3,大小是 3*3(因為這裡採用 3*3 卷積核)即 3*3*3。

標準卷積是將一個卷積核(3*3)複製 M 份(M=2), 讓二維的卷積核(麵包片)拓展到與輸入 feature map 一樣的麵包塊形狀。

Standard 過程如下圖,X 表示卷積,+表示對應像素點相加,可以看到對於 O1 來說,其與輸入的每一個 feature map 都「發生關係」,包含輸入的各個 feature map 的信息。

Depth-wise 過程如下圖,可以看到 depth-wise convolution 得出的兩個 feature map——fd1 和 fd2 分別只與 i1 和 i2「發生關係」,這就導致違背上面所承認的觀點「輸出的每一個 feature map 要包含輸入層所有 feature map 的信息」,因而要引入 pointwise convolution。

那麼計算量減少了多少呢?通過如下公式計算:

其中 DK 為標準卷積核大小,M 是輸入 feature map 通道數,DF 為輸入 feature map 大小,N 是輸出 feature map 大小。本例中,DK=3,M=2,DF=5,N=3,參數的減少量主要就與卷積核大小 DK 有關。在本文 MobileNet 的卷積核採用 DK=3,則大約減少了 8~9 倍計算量。

看看 MobileNet 的網絡結構,MobileNet 共 28 層,可以發現這裡下採樣的方式沒有採用池化層,而是利用 depth-wise convolution 的時候將步長設置為 2,達到下採樣的目的。

1.0 MobileNet-224 與 GoogLeNet 及 VGG-16 的對比:

可以發現,相較於 GoogLeNet,雖然參數差不多,都是一個量級的,但是在運算量上卻小於 GoogLeNet 一個量級,這就得益於 depth-wise convolution!

MobileNet 小結:

1. 核心思想是採用 depth-wise convolution 操作,在相同的權值參數數量的情況下,相較於 standard convolution 操作,可以減少數倍的計算量,從而達到提升網絡運算速度的目的。2. depth-wise convolution 的思想非首創,借鑑於 2014 年一篇博士論文:《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》3. 採用 depth-wise convolution 會有一個問題,就是導致「信息流通不暢」,即輸出的 feature map 僅包含輸入的 feature map 的一部分,在這裡,MobileNet 採用了 point-wise convolution 解決這個問題。在後來,ShuffleNet 採用同樣的思想對網絡進行改進,只不過把 point-wise convolution 換成了 channel shuffle,然後給網絡美其名曰 ShuffleNet,欲知後事如何,請看 2.3 ShuffleNet

2.3 ShuffleNet

ShuffleNet 是 Face++團隊提出的,與 MobileNet 一樣,發表於 CVPR-2017,但晚於 MobileNet 兩個月才在 arXiv 上公開。論文標題:

《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices》

命名:

一看名字 ShuffleNet,就知道 shuffle 是本文的重點,那麼 shuffle 是什麼?為什麼要進行 shuffle?

shuffle 具體來說是 channel shuffle,是將各部分的 feature map 的 channel 進行有序的打亂,構成新的 feature map,以解決 group convolution 帶來的「信息流通不暢」問題。(MobileNet 是用 point-wise convolution 解決的這個問題)

因此可知道 shuffle 不是什麼網絡都需要用的,是有一個前提,就是採用了 group convolution,才有可能需要 shuffle!!為什麼說是有可能呢?因為可以用 point-wise convolution 來解決這個問題。

創新點:

1. 利用 group convolution 和 channel shuffle 這兩個操作來設計卷積神經網絡模型, 以減少模型使用的參數數量。

其中 group convolutiosn 非原創,而 channel shuffle 是原創。channel shuffle 因 group convolution 而起,正如論文中 3.1 標題: . Channel Shuffle for Group Convolution;

採用 group convolution 會導致信息流通不當,因此提出 channel shuffle,所以 channel shuffle 是有前提的,使用的話要注意!

對比一下 MobileNet,採用 shuffle 替換掉 1*1 卷積,這樣可以減少權值參數,而且是減少大量權值參數,因為在 MobileNet 中,1*1 卷積層有較多的卷積核,並且計算量巨大,MobileNet 每層的參數量和運算量如下圖所示:

ShuffleNet 的創新點在於利用了 group convolution 和 channel shuffle,那麼有必要看看 group convolution 和 channel shuffle。

Group convolution

Group convolution 自 Alexnet 就有,當時因為硬體限制而採用分組卷積;之後在 2016 年的 ResNeXt 中,表明採用 group convolution 可獲得高效的網絡;再有 Xception 和 MobileNet 均採用 depth-wise convolution, 這些都是最近出來的一系列輕量化網絡模型。depth-wise convolution 具體操作可見 2.2 MobileNet 裡邊有簡介。

如下圖 (a) 所示, 為了提升模型效率,採用 group convolution,但會有一個副作用,即:「outputs from a certain channel are only derived from a small fraction of input channels.」

於是採用 channel shuffle 來改善各組間「信息流通不暢」問題,如下圖 (b) 所示。

具體方法為:把各組的 channel 平均分為 g(下圖 g=3)份,然後依次序的重新構成 feature map

Channel shuffle 的操作非常簡單,接下來看看 ShuffleNet,ShuffleNet 借鑑了 Resnet 的思想,從基本的 resnet 的 bottleneck unit 逐步演變得到 ShuffleNet 的 bottleneck unit,然後堆疊的使用 ShuffleNet bottleneck unit 獲得 ShuffleNet;

下圖展示了 ShuffleNet unit 的演化過程

圖 (a):是一個帶有 depth-wise convolution 的 bottleneck unit; 圖 (b):作者在 (a) 的基礎上進行變化,對 1*1 conv 換成 1*1 Gconv,並在第一個 1*1 Gconv 之後增加一個 channel shuffle 操作; 圖 (c): 在旁路增加了 AVG pool,目的是為了減小 feature map 的解析度;因為解析度小了,於是乎最後不採用 Add,而是 concat,從而「彌補」了解析度減小而帶來的信息損失。

文中提到兩次,對於小型網絡,多多使用通道,會比較好。

「this is critical for small networks, as tiny networks usually have an insufficient number of channels to process the information」

所以,以後若涉及小型網絡,可考慮如何提升通道使用效率

至於實驗比較,並沒有給出模型參數量的大小比較,而是採用了 Complexity (MFLOPs) 指標,在相同的 Complexity (MFLOPs) 下,比較 ShuffleNet 和各個網絡,還專門和 MobileNet 進行對比,由於 ShuffleNet 相較於 MobileNet 少了 1*1 卷積層,所以效率大大提高了嘛,貼個對比圖隨意感受一下好了

ShuffleNet 小結:

1. 與 MobileNet 一樣採用了 depth-wise convolution,但是針對 depth-wise convolution 帶來的副作用——「信息流通不暢」,ShuffleNet 採用了一個 channel shuffle 操作來解決。2. 在網絡拓撲方面,ShuffleNet 採用的是 resnet 的思想,而 mobielnet 採用的是 VGG 的思想,2.1 SqueezeNet 也是採用 VGG 的堆疊思想

2.4 Xception

Xception 並不是真正意義上的輕量化模型,只是其借鑑 depth-wise convolution,而 depth-wise convolution 又是上述幾個輕量化模型的關鍵點,所以在此一併介紹,其思想非常值得借鑑。

Xception 是 Google 提出的,arXiv 的 V1 版本 於 2016 年 10 月公開。論文標題:

《Xception: Deep Learning with Depth-wise Separable Convolutions》

命名:

Xception 是基於 Inception-V3 的,而 X 表示 Extreme,為什麼是 Extreme 呢?因為 Xception 做了一個加強的假設,這個假設就是:

we make the following hypothesis: that the mapping of cross-channels correlations and spatial correlations in the feature maps of convolutional neural networks can be entirely decoupled

創新點:

1. 借鑑(非採用)depth-wise convolution 改進 Inception V3

既然是改進了 Inception v3,那就得提一提關於 inception 的一下假設(思想)了。

「the fundamental hypothesis behind Inception is that cross-channel correlations and spatial correlations are sufficiently decoupled that it is preferable not to map them jointly」

簡單理解就是說,卷積的時候要將通道的卷積與空間的卷積進行分離,這樣會比較好。(沒有理論證明,只有實驗證明,就當它是定理,接受就好了,現在大多數神經網絡的論文都這樣。

既然是在 Inception V3 上進行改進的,那麼 Xception 是如何一步一步的從 Inception V3 演變而來。

下圖 1 是 Inception module,圖 2 是作者簡化了的 inception module(就是只保留 1*1 的那條「路」,如果帶著 avg pool,後面怎麼進一步假設嘛~)

假設出一個簡化版 inception module 之後,再進一步假設,把第一部分的 3 個 1*1 卷積核統一起來,變成一個 1*1 的,後面的 3 個 3*3 的分別「負責」一部分通道,如圖 3 所示; 最後提出「extreme」version of an Inception,module Xception 登場,,先用 1*1 卷積核對各通道之間(cross-channel)進行卷積,如圖 4 所示,

作者說了,這種卷積方式和 depth-wise convolution 幾乎一樣。Depth-wise convolution 較早用於網絡設計是來自:Rigid-Motion Scatteringfor Image Classification,但是具體是哪一年提出,不得而知;至少 2012 年就有相關研究,再比如說 AlexNet,由於內存原因,AlexNet 分成兩組卷積 ;想深入了解 Depth-wise convolution 的可以查閱本論文 2.Prior work,裡面有詳細介紹。

Xception 是借鑑 Rigid-Motion Scatteringfor Image Classification 的 Depth-wise convolution,是因為 Xception 與原版的 Depth-wise convolution 有兩個不同之處

第一個:原版 Depth-wise convolution,先逐通道卷積,再 1*1 卷積; 而 Xception 是反過來,先 1*1 卷積,再逐通道卷積; 第二個:原版 Depth-wise convolution 的兩個卷積之間是不帶激活函數的,而 Xception 在經過 1*1 卷積之後會帶上一個 Relu 的非線性激活函數;

Xception 結構如上圖所示,共計 36 層分為 Entry flow;Middle flow;Exit flow。。

Entry flow 包含 8 個 conv;Middle flow 包含 3*8 =24 個 conv;Exit flow 包含 4 個 conv,所以 Xception 共計 36 層。

文中 Xception 實驗部分是非常詳細的,實現細節可參見論文。

Xception 小結:

Xception 是基於 Inception-V3,並結合了 depth-wise convolution,這樣做的好處是提高網絡效率,以及在同等參數量的情況下,在大規模數據集上,效果要優於 Inception-V3。這也提供了另外一種「輕量化」的思路:在硬體資源給定的情況下,儘可能的增加網絡效率和性能,也可以理解為充分利用硬體資源。

三、網絡對比

本文簡單介紹了四個輕量化網絡模型,分別是 SqueezeNet、 MobileNet、 ShuffleNet 和 Xception,前三個是真正意義上的輕量化網絡,而 Xception 是為提升網絡效率,在同等參數數量條件下獲得更高的性能。

在此列出表格,對比四種網絡是如何達到網絡輕量化的。

實現輕量化技巧

這麼一看就發現,輕量化主要得益於 depth-wise convolution,因此大家可以考慮採用 depth-wise convolution 來設計自己的輕量化網絡,但是要注意「信息流通不暢問題」。

解決「信息流通不暢」的問題,MobileNet 採用了 point-wise convolution,ShuffleNet 採用的是 channel shuffle。MobileNet 相較於 ShuffleNet 使用了更多的卷積,計算量和參數量上是劣勢,但是增加了非線性層數,理論上特徵更抽象,更高級了;ShuffleNet 則省去 point-wise convolution,採用 channel shuffle,簡單明了,省去卷積步驟,減少了參數量。

學習了幾個輕量化網絡的設計思想,可以看到,並沒有突破性的進展,都是借鑑或直接使用前幾年的研究成果。希望廣大研究人員可以設計出更實在的輕量化網絡。

通過這幾篇論文的創新點,得出以下可認為是發 (Shui) 論文的 idea:

1. 採用 depth-wise convolution,再設計一個方法解決「信息流通不暢」問題,然后冠以美名 XX-Net。(看看 ShuffleNet 就是)2. 針對 depth-wise convolution 作文章,卷積方式不是千奇百怪麼?各種卷積方式可參考 Github(https://github.com/vdumoulin/conv_arithmetic),挑一個或者幾個,結合起來,只要參數量少,實驗效果好,就可以發 (Shui) 論文。3. 接著第 2,如果設計出來一個新的卷積方式,如果也存在一些「副作用」,再想一個方法解決這個副作用,再美其名曰 XX-Net。就是自己「挖」個坑,自己再填上去。

個人介紹: 餘霆嵩,廣東工業大學研三學生,研究方向:深度學習,目標檢測,圖像分類,模型壓縮

機器之心發布首份《人工智慧技術趨勢報告》,縱覽人工智慧的 23 個分支技術。明晰歷史發展路徑,解讀現有瓶頸及未來發展趨勢。點擊閱讀原文,立即獲取報告完整版。

相關焦點

  • 卷積神經網絡中十大拍案叫絕的操作。
    為了解決這個問題,ShuffleNet在每一次層疊這種Group conv層前,都進行一次channel shuffle,shuffle過的通道被分配到不同組當中。進行完一次group conv之後,再一次channel shuffle,然後分到下一層組卷積當中,以此循環。
  • MXNet開放支持Keras,高效實現CNN與RNN的分布式訓練
    地址:https://github.com/awslabs/keras-apache-mxnetKeras 是用 Python 編寫的高級神經網絡 API,因其快速、簡單的 CNN 和 RNN 原型而廣受歡迎。Keras 開發人員現在可以使用高性能的 MXNet 深度學習引擎展開卷積神經網絡(CNN)和循環神經網絡(RNN)的分布式訓練。
  • AlexNet、VGGNet、ResNet、Inception、DenseNet體系結構簡介
    AlexNet層的詳細信息AlexNet是第一個在ImageNet分類上表現出色的大規模卷積神經網絡體系結構。AlexNet在比賽中大大超越了以前所有基於非深度學習的模型。網絡一開始有11 x 11個filters,然後是5x5和3x3。最後,我們有兩個大小為4096的全連接層,最後一層是FC8到softmax,也就是1000個ImageNet類。該架構是ReLu非線性的首次使用。
  • 谷歌發布MobileNetV2:可做語義分割下一代移動端計算機視覺架構
    項目連結:https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet谷歌 2017 年推出了 MobileNetV1,它是一種為行動裝置設計的通用計算機視覺神經網絡,因此它也能支持圖像分類和檢測等。
  • 洛克網絡新版Net-USB Server發布
    淄博洛克網絡科技有限公司旗下RockLink Net-USB Server V2.0於2016年6月15日正式發布。新版本將增加以下功能:1.Li-on鋰電池UPS不間斷電源供電。2.全新的電源管理模塊。3.全新的更加友好的WEB UI界面設計。4.USB設備兼容性更新,支持更多USB設備。
  • 小姜學網絡(net和netstat命令,附使用netstat -n看對方IP)
    >net命令:使用net命令可以查詢網絡狀態、共享資源以及計算機所開啟的服務等,該命令的語法格式信息如下:NET [ ACCOUNTS | COMPUTER | CONFIG | CONTINUE | FILE | GROUP | HELP
  • 《沙漠特遣隊 3》遊戲資源驚現網絡_遊俠網 Ali213.net
    遊戲名稱:沙漠特遣隊3英文名稱:Terrorist Takedown 3遊戲製作:City Interactive遊戲發行:City Interactive遊戲類型:Shooter遊戲容量:2.6G遊戲語種:英文所屬討論區:(FPS遊戲專區)http://game.ali213.net
  • 卷積神經網絡理解(一):濾波器的意義
    卷積神經網絡的發展二. 卷積神經網絡的重要性三. 卷積神經網絡與圖像識別四. 濾波器一.卷積神經網絡的發展卷積神經網絡受到視覺細胞研究的啟發,1962年,Hubel和Wiesel發現初級視覺皮層中的神經元會響應視覺環境中特定的簡單特徵(比如有向的邊等)。
  • 用TensorFlow和Keras構建卷積神經網絡
    全文共9940字,預計學習時長20分鐘或更長不同神經網絡結構各有所長。本文主要介紹如何在Python中使用TensorFlow和Keras構建卷積神經網絡。 卷積神經網絡是過去十年中深度學習成為一大熱點的部分原因。今天將使用TensorFlow的eager API來訓練圖像分類器,以辨別圖像內容是狗還是貓。
  • SourceForge.NET 使用的開源軟體
    (http://www.oschina.net/p/allura)MongoDB,高性能的無模式資料庫,能夠允許你存儲和取回類JSON文件(http://www.oschina.net/p/mongodb)Ming,MongoDB的類ORM層(http://www.oschina.net/p/ming-mongodb
  • LeNet-5——CNN經典網絡模型詳解(pytorch實現)
    一、LeNet-5這個是n多年前就有的一個CNN的經典結構,主要是用於手寫字體的識別,也是剛入門需要學習熟悉的一個網絡。原論文地址輸入:32*32的手寫字體圖片,這些手寫字體包含0~9數字,也就是相當於10個類別的圖片輸出:分類結果,0~9之間的一個數因此我們可以知道,這是一個多分類問題,總共有十個類,因此神經網絡的最後輸出層必然是SoftMax問題,然後神經元的個數是
  • 追憶網吧年華:如流星般璀璨而短暫的《流星蝴蝶劍.net》
    現在,在一個網絡發達的時代,電腦早已成為了人們必備的工具用品,"網吧遊戲時代"已然成為過去。在當時的"網吧時代"中,出現過很多火爆全網的遊戲,不管是當年"萬人空巷"的CS,還是如今空前發展《英雄聯盟》,在網吧之中總有那麼一些遊戲是網吧老闆的裝機必備,是無數玩家空餘時光的心之所向,是能夠被時間所銘記的經典之作。
  • 全新上線,GateChain測試鏈Testnet3.0正式發布
    但通過用戶的積極反饋,Testnet 1.0還存在很大的提升空間,很快,12月24日Gate.io發布了Testnet 2.0,由於對GateChain1.0進行了全方位的整改與修復,使其在保障用戶資產安全和去中心化交易方面達到了一個新的高度。
  • 讓你的電腦擁有「視力」,用卷積神經網絡就可以!
    卷積神經網絡極大地提升了圖像識別模型的精度,在生活中也有很多的應用。在這篇文章中,我將描述它的工作原理、一些實際應用,以及如何用Python和Keras是實現一個卷積神經網絡。通過這個過程,一個神經網絡可以學習並提高預測的準確度。我不會講述反向傳播過程和損失函數,但是有許多很棒的資源介紹了它們,例如這一篇。卷積神經網絡(Convolutional Neural Networks)是神經網絡的一種特別的類型。它們在圖像數據集上表現的很好。
  • Petnet智能餵食器 讓你家汪/喵星人當家作主
    因此為了讓各種健忘的主人能夠更好的「服侍」寵物,就必須要讓這款Petnet智能寵物餵食器出場了。首先,Petnet最大的亮點就是可以提供全自動的餵養、警報和通知,並且通過計算得出最適合自家寵物的餵食方案。怎麼樣,看到這立刻就會明白什麼叫「人不如狗」了吧。
  • 微軟開源 WCF 分布式服務框架,併入 .NET Foundation 項目
    不過,開源之後有助於社區或開發者根據自己的需求定製輕量化的 WCF 框架。本文參考了多個信息來源:dotnetfoundation.org、news.ycombinator.com、infoq.com
  • CNN 模型 ShuffleNet
    ShuffleNet 結構與複雜度上表展示了不同配置下 ShuffleNet 的複雜度,複雜度用 FLOPs (浮點運算數量) 衡量。
  • China expects to release the first 5G mobile phone in 2019
    China’s first 5G mobile phone is expected to be released during the second half of 2019, said Wen Ku, director of the telecom development department
  • 基於netX90晶片實現PROFINET從站開發(二)
    上期為大家介紹了netX90作為單晶片解決方案的實例,對於客戶來說,單晶片解決方案最直觀的優勢就是節約成本,不需要額外配一個MCU,單個晶片就可以實現PROFINET從站開發。當然,netX90也可以作為配有HOST CPU的通訊協處理器,僅實現通訊功能。