1、MobileNet
GoogleMobileNets:用于移動視覺應用的高效卷積神經網絡的張量流實現
在tensorflow / model中可以正式實施。
對象檢測的正式實現現已發(fā)布,請參閱tensorflow / model / object_detection。
YellowFin優(yōu)化器已經集成,但是我沒有gpu資源在imagenet上訓練。呼叫培訓?_?
官方實施點擊這里
模型寬度乘數預處理精度-TOP1精度-TOP5
MobileNet1.0與初始相同66.51%87.09%
失利
環(huán)境:Ubuntu 16.04 LTS,Xeon E3-1231 v3,4核3.40GHz,GTX1060。
TF 1.0.1(原生pip安裝),TF 1.1.0(從源碼生成,優(yōu)化標志'-mavx2')
設備前鋒向前向后指令系統(tǒng)量化融合-BN備注
中央處理器52ms503ms---TF 1.0.1
中央處理器44ms177ms--上TF 1.0.1
中央處理器31毫秒--8位-TF 1.0.1
中央處理器26ms75msAVX2--TF 1.1.0
中央處理器128毫秒-AVX28位-TF 1.1.0
中央處理器19ms89msAVX2-上TF 1.1.0
GPU為3ms16毫秒---TF 1.0.1,CUDA8.0,CUDNN5.1
GPU為3ms15毫秒--上TF 1.0.1,CUDA8.0,CUDNN5.1
圖像尺寸:(224,224,3),批量:1
python ./scripts/time_benchmark.py
準備KITTI數據。
下載KITTI數據后,您需要將數據分成train / val集。
cd /path/to/kitti_rootmkdir ImageSetscd ./ImageSetsls ../training/image_2/ | grep ".png" | sed s/.png// > trainval.txtpython ./tools/kitti_random_split_train_val.py
kitti_root floder然后看起來像下面
kitti_root/|->training/|? ? |-> image_2/00****.png|? ? L-> label_2/00****.txt|->testing/|? ? L-> image_2/00****.pngL->ImageSets/|-> trainval.txt|-> train.txtL-> val.txt
然后將其轉換為tfrecord。
python ./tools/tf_convert_data.py
根據您的環(huán)境,Mobify'./script/train_mobilenet_on_kitti.sh'。
bash ./script/train_mobilenetdet_on_kitti.sh
這個主題的代碼主要基于SqueezeDet和SSD-Tensorflow。如果你能反饋任何錯誤,我將不勝感激。
關于MobileNet模型大小
根據這篇論文,MobileNet擁有3.3百萬個參數,不會因輸入分辨率而異。這意味著由于fc層,最終模型參數的數量應該大于3.3百萬。
當使用RMSprop訓練策略時,由于RMSprop中使用了一些輔助參數,檢查點文件大小應該幾乎是模型大小的3倍。你可以使用inspect_checkpoint.py來找出它。
纖細的多GPU性能問題
在Imagenet上訓練
添加寬度乘數超參數
報告培訓結果
集成到對象檢測任務(進行中)
2、ResNet在TensorFlow中
的實行圖像識別深層殘留學習。包括使用He等人在TensorFlow中發(fā)布的經過訓練的Caffe權重的工具。
MIT許可證。貢獻值得歡迎。
能夠使用Kaiming和Caffe提供的預訓練模型。在convert.py將其轉換權與TensorFlow使用。
以Inception的風格實現,不使用任何類,大量使用變量作用域。它應該很容易在其他型號中使用。
基礎,像隨機深度一樣試驗ResNet的變化,在每個尺度上分享權重,以及音頻的一維卷積。(尚未實現。)
ResNet是完全卷積的,實現應該允許任何大小的輸入。
能夠在CIFAR-10,100和ImageNet上進行培訓。(執(zhí)行不完整)
要轉換已發(fā)布的Caffe pretrained模型,請運行convert.py。然而,咖啡煩惱安裝,所以我提供了convert.py的輸出下載:
tensorflow-resnet-pretrained-20160509.tar.gz.torrent464M
這個代碼依賴于TensorFlow的git commit cf7ce8或更高版本,因為ResNet需要1x1與步幅2的卷積.TF0.8是不夠新的。
該convert.py腳本檢查激活類似caffe版本,但它不完全相同。這可能是由于TF和Caffe如何處理填充差異造成的。另外預處理是用顏色通道方法來完成的,而不是像素方式。
深柱式卷積神經網絡
DCCNN是一個卷積神經網絡架構,受Ciresan(2012)的多列深度神經網絡的啟發(fā)。
使用批處理標準化,Leaky Relu,初始BottleNeck塊和卷積子采樣等近期論文的改進,網絡使用非常少的參數來獲得各種數據集(例如MNIST,CIFAR 10/100和SHVN 。
雖然它在現有技術水平上沒有得到改善,但是它表明,較小參數的體系結構可以與大型集成網絡的性能相媲美。
論文:“深度柱狀卷積神經網絡”
這種體系結構對于包含小灰度圖像的MNIST數據集來說足夠簡單。經過500個歷元后,達到了0.23%的錯誤率。這個模型的權重可以在權重文件夾中找到。

該架構與MNIST數據集相似,但是使用了近60萬個彩色圖像的SVHN數據集。它實現了1.92%的錯誤率。由于GPU內存不足,無法在此模型中使用較大的DCCNN CIFAR 100架構。
請注意,雖然類似,但使用卷積抽樣而不是最大池來完成合并。

這個架構不同于上述兩個,用于CIFAR 10數據集。它實現了6.90%的低錯誤率。這比現有的3.47%高,但是這是一個非常深的18層網絡。

這個架構類似于上面的架構,但是在最后一級有更多的叉子。它實現了28.63%的低錯誤率。這比現有技術水平高24.28%,其中有五千萬參數,需要超過16萬個歷元。

DCCNN Cifar 100 Weights - 7137.h5
寬殘留網絡,Tensorflow
這是一個使用Tensorflow庫進行圖像分類的寬余量網絡的實現該模型在cifar10數據集上進行了訓練和測試。然后使用該模型對從Google下載的一些圖像進行預測。
一些樣品Cifar10訓練圖像(經過一些處理):
(見OLD文件夾內)
我訓練了批量大小為120的16-4 WRN 3,3型塊(帶壓差)。任何具有K加寬因子塊的L層WRN 3,3型塊可以通過簡單地改變變量層的值和代碼中的'K'。
我實現了90.15%的準確率,這與WRN應達到的最高水平相比是相當低的。
這里有一些圖表顯示了培訓的進行情況:
低準確性有各種可能的原因:
由于各種環(huán)境問題,我可以訓練模型相對較少的迭代(僅約100個時代)
性能可能會更好更廣泛和更深入的警告
我實現了非常輕的增強(僅橫向翻轉)。用鏡子填充裁剪可能是值得一試的。
對于預處理,我只使用了全局對比度歸一化而沒有ZCA白化。不同的預處理步驟可能會產生明顯不同的結果。
沒有二線正規(guī)化。似乎有一些過度配合。
某些超參數可能需要進一步優(yōu)化。
我對舊模型做了一些修改 - 參見Model(WRN)(NEW).ipynb和DataProcessing(NEW).ipynb。
包括l2正則化。
用平均預處理代替GCN(全局對比度標準化)。
圖像增強包括在原始32x32
圖像上隨機化的28x28裁剪和裁剪位置的位移。它創(chuàng)造了翻譯般的效果。橫向翻轉仍然存在。
改進了配料方法。
用ELU取代了ReLus。
添加標簽平滑。(https://arxiv.org/abs/1708.01729)
但是,在16-8型號的WRN中,我仍然達不到92%以上。我想我有一些超參數達到了92.7%。
注:我正在使用相同的樣本進行測試和驗證 - 這應該是一個罪過。即使偏向測試集的假設之后,我的糟糕結果也使得這一切變得更加尷尬。
潛在的改進:
用零初始化所有的偏差。
首先嘗試用ReLus(最初使用的)復制結果,
Xavier初始化權重。
關于ResNeXt的論文(“深度神經網絡的聚集殘差變換”,謝寧寧,Ross Girshick,PiotrDollár,涂卓文,Kaiming He arXiv:1611.05431)強調了“分裂變換合并”策略(用于初始模型),并建議將其納入殘余塊。我在更新的WRN模型上創(chuàng)建了另一個模型,其中我添加了4K基數(其中K是寬度 - 通?;鶖挡槐厝Q于K)。現在將一個塊中的卷積層堆棧以4K分隔(由基數指定的號碼)分離的并行層,并減小了濾波器的大小。然后添加并行堆棧的輸出。結果然后添加標準跳過連接。
我也包括合奏。這個模型沒有經過訓練,沒有經過測試。
(設置基數= 1會變成一個普通的WRN)
我沒有廣泛地測試它?;鶖凳鼓P妥兊贸林亍N易隽艘粋€天真的實現,使得卷積層的“分支”按順序處理。這增加了培訓所需的時間。在分布式設置中,有一些并行計算,基數沒有任何問題。
數據處理(OLD).ipynb:它包含對cifar10數據執(zhí)行一些基本預處理并將處理后的數據保存在hdf5文件中的代碼。
模型(WRN)(舊).ipynb:這包括用于撤回處理的數據的代碼,用于在訓練期間實時創(chuàng)建無偏和增強的訓練批次的功能,模型定義和構建,訓練(連同檢查點和模型保存) 。
Predict.ipynb:該文件用于恢復保存的模型,并使用該模型對指定目錄中的任何圖像進行新的預測。我通過預測通過Google下載的幾個圖像的類別來測試模型。(這只適用于舊型號)
Predict-lite.ipynb:與Predict.ipynb相同,但下載的圖片較少。如果Predict.ipynb需要太多時間加載或打開,請嘗試此文件。(這只適用于舊型號)
該Model_Backup文件夾包含可加載預測或進一步培訓訓練的模型文件。(只適用于舊款)
ResNeXt-in-tensorflow-master.zip
4、ResNet TensorFlow
的實行圖像識別深層殘留學習。包括使用He等人在TensorFlow中發(fā)布的經過訓練的Caffe權重的工具。
MIT許可證。貢獻值得歡迎。
能夠使用Kaiming和Caffe提供的預訓練模型。在convert.py將其轉換權與TensorFlow使用。
以Inception的風格實現,不使用任何類,大量使用變量作用域。它應該很容易在其他型號中使用。
基礎,像隨機深度一樣試驗ResNet的變化,在每個尺度上分享權重,以及音頻的一維卷積。(尚未實現。)
ResNet是完全卷積的,實現應該允許任何大小的輸入。
能夠在CIFAR-10,100和ImageNet上進行培訓。(執(zhí)行不完整)
要轉換已發(fā)布的Caffe pretrained模型,請運行convert.py。然而,咖啡煩惱安裝,所以我提供了convert.py的輸出下載:
tensorflow-resnet-pretrained-20160509.tar.gz.torrent464M
這個代碼依賴于TensorFlow的git commit cf7ce8或更高版本,因為ResNet需要1x1與步幅2的卷積.TF0.8是不夠新的。
該convert.py腳本檢查激活類似caffe版本,但它不完全相同。這可能是由于TF和Caffe如何處理填充差異造成的。另外預處理是用顏色通道方法來完成的,而不是像素方式。
Keras中剩余網絡
一般來說,殘留網絡有幾百甚至上千層,可以在主要的圖像識別任務中對圖像進行準確分類,但是通過簡單堆積殘留塊來構建網絡,不可避免地限制了其優(yōu)化能力。
本文試圖通過在原有的剩余網絡上增加層次快捷連接來提高剩余網絡的優(yōu)化能力,從而提高剩余網絡的學習能力。
這可以從紙上的數字看出來:
有兩種不同的體系結構可用,因為RoR可以擴展到寬余隙網絡或預先ResNets。
本文下面兩張圖片描述了ResRets和RoR在寬余留網絡上的RoR架構:
這些網絡在CIFAR 10上的分類準確性(來自紙面)是:
本文使用RoR-3-110(ResNet-101)和RoR-3-WRN-40-2(Wide Residual Network-40-2)等幾種型號,但由于GPU內存的限制, RoR-3-WRN-40-2已經在版本標簽中提供
請下載重量并將它們放在重量文件夾中。
要創(chuàng)建RoR ResNet模型,請使用以下ror.py腳本:
import rorinput_dim = (3, 32, 32) if K.image_dim_ordering() == 'th' else (32, 32, 3)model = ror.create_residual_of_residual(input_dim, nb_classes=100, N=2, dropout=0.0) # creates RoR-3-110 (ResNet)
要創(chuàng)建RoR寬余量網絡模型,請使用以下ror_wrn.py腳本:
import ror_wrn as rorinput_dim = (3, 32, 32) if K.image_dim_ordering() == 'th' else (32, 32, 3)model = ror.create_pre_residual_of_residual(input_dim, nb_classes=100, N=6, k=2, dropout=0.0) # creates RoR-3-WRN-40-2 (WRN)
本文所描述的RoR-WRN-40-2模型需要500個時期來達到94.99%的分類準確率(5.01%誤差)。
為這個模型提供的Theano權重,使用Adam的學習率為1e-3,訓練了100個時期,達到了94.48%的分類準確率(5.52%的誤差)
5、CIFAR-VGG
這是基于CIFAR-10和CIFAR-100的VGG16架構的Keras模型。它可以使用預訓練重量文件或從零開始訓練。
該軟件包為每個數據集包含2個類,該體系結構基于VGG-16 [1],基于[2]適應CIFAR數據集。通過運行py文件,你可以得到一個trining和估計驗證錯誤的樣本。
CIFAR-10的驗證準確率達到93.56%,CIFAR-100的驗證準確率達到70.48%。在實例化模型可以被訓練或加載從以前保存的體重文件。
帶有ImageNet預訓練模型的DenseNet-Keras
這是一個Keras實現DenseNet與ImageNet預訓練的權重。權重從Caffe模型轉換而來。該實現支持Theano和TensorFlow后端。
要了解更多關于DenseNet的工作原理,請參閱原文
Densely Connected Convolutional NetworksGao Huang, Zhuang Liu, Kilian Q. Weinberger, Laurens van der MaatenarXiv:1608.06993
通過使用單中心裁剪(裁剪尺寸:224x224,圖像尺寸:256xN),前1/5準確率
網絡頂1前5Tensorflow
DenseNet 121(k = 32)74.9192.19型號(32 MB)
DenseNet 169(k = 32)76.0993.14模型(56 MB)
DenseNet 161(k = 48)77.6493.79
首先,將上述預訓練的權重下載到imagenet_models文件夾中。
運行test_inference.py一個如何使用預訓練模型進行推理的例子。
python test_inference.py
查看此示例,查看使用您自己的數據集微調DenseNet的示例。
Keras1.2.22.0.5
Theano 0.8.2或TensorFlow0.12.01.2.1
Keras 2.0.5和TensorFlow 1.2.1被支持
在Keras的密網
現在支持更高效的DenseNet-BC(DenseNet-Bottleneck-Compressed)網絡。使用DenseNet-BC-190-40型號,獲得了CIFAR-10和CIFAR-100的最新性能
DenseNet是寬余隙網絡的延伸。根據文件:
The lth layer has l inputs, consisting of the feature maps of all preceding convolutional blocks.Its own feature maps are passed on to all L ? l subsequent layers. This introduces L(L+1) / 2 connectionsin an L-layer network, instead of just L, as in traditional feed-forward architectures.Because of its dense connectivity pattern, we refer to our approach as Dense Convolutional Network (DenseNet).
它具有幾個改進,如:
密集連接:將任何圖層連接到任何其他圖層。
增長率參數決定隨著網絡變得越來越深,特征數目增加的速度。
連續(xù)功能:來自Wide ResNet的BatchNorm - Relu - Conv和ResNet紙張的改進。
瓶頸 - 壓縮密集網提供了進一步的性能優(yōu)勢,如減少參數數量,具有相似或更好的性能。
考慮DenseNet-100-12模型,使用DenseNet-BC-100-12約700萬個參數,僅有80萬個參數。BC模型與原始模型的4.10%誤差相比誤差為4.51%
最好的原始模型DenseNet-100-24(2720萬參數)誤差為3.74%,而DenseNet-BC-190-40(2560萬參數)誤差為3.46%,這是CIFAR- 10。
密集的網絡有一個架構可以顯示在下面的圖像從紙上:
本文提供了DenseNet的準確性,擊敗了CIFAR 10,CIFAR 100和SVHN
導入densenet.py腳本并使用該DenseNet(...)方法創(chuàng)建具有各種參數的自定義DenseNet模型。
例子 :
import densenet# 'th' dim-ordering or 'tf' dim-orderingimage_dim = (3, 32, 32) or image_dim = (32, 32, 3)model = densenet.DenseNet(classes=10, input_shape=image_dim, depth=40, growth_rate=12,bottleneck=True, reduction=0.5)
或者,為ImageNet導入預先構建的DenseNet模型,其中一些模型具有預先訓練好的權重(121,161和169)。
例如:
import densenet# 'th' dim-ordering or 'tf' dim-orderingimage_dim = (3, 224, 224) or image_dim = (224, 224, 3)model = densenet.DenseNetImageNet121(input_shape=image_dim)
提供DenseNetImageNet121,DenseNetImageNet161和DenseNetImageNet169型號的權重(在版本選項卡中),首次調用時將自動下載。他們已經在ImageNet上接受過培訓。權重從存儲庫https://github.com/flyyufelix/DenseNet-Keras移植。
Keras
Theano(重量未測試)/ Tensorflow(測試)/ CNTK(重量未測試)
h5Py
DenseNet-40-12-Tensorflow-Backend-TF-dim-ordering.h5
DenseNet-Fast-40-12-CIFAR10.h5
6、基于ImageNet預訓練模型的微調卷積神經網絡
創(chuàng)建這個回購的原因是沒有太多的在線資源提供示例代碼進行微調,并沒有一個集中的地方,我們可以很容易地下載普通的ConvNet架構的ImageNet預訓練模型,如VGG,Inception, ResNet和DenseNet。通過提供在Cifar10數據集上進行微調的工作示例,使用流行的ConvNet實現上的ImageNet預訓練模型,這個回購可以彌補這個缺陷。
見這在Keras綜合治療微調深學習模型
為了便于說明,假設您想用VGG-16進行微調。首先,將VGG-16的ImageNet預訓練重量下載到imagenet_models目錄中。在Cifar10上進行微調的架構和示例代碼可以在這里找到vgg16.py。運行該文件:
python vgg16.py
該代碼將自動下載Cifar10數據集并使用VGG-16進行微調。請注意,模型編譯和加載ImageNet權重可能需要一段時間(最多分鐘)。
如果您希望對自己的數據集進行微調,則必須將加載Cifar10數據集的模塊替換為您自己的load_data()模塊以加載自己的數據集。
X_train, Y_train, X_valid, Y_valid = load_data()
具體來說,必須執(zhí)行下面的圖像預處理步驟以獲得與預訓練模型兼容的數據集的格式:
# For Tensorflow# Switch RGB to BGR orderx = x[:, :, :, ::-1]# Subtract ImageNet mean pixelx[:, :, :, 0] -= 103.939x[:, :, :, 1] -= 116.779x[:, :, :, 2] -= 123.68# For Theano# Switch RGB to BGR orderx = x[:, ::-1, :, :]# Subtract ImageNet mean pixelx[:, 0, :, :] -= 103.939x[:, 1, :, :] -= 116.779x[:, 2, :, :] -= 123.68
heroku-windows-amd64.exe 直接發(fā)布應用程序到服務器的免費網站
我的Github上有許多標記的資源,后期會持續(xù)更新,請關注我吧!