DMLC團隊發布GluonCV和GluonNLP:兩種簡單易用的DL工具箱

選自 Gluon,機器之心編譯,參與:思源、李亞洲

近日,DMLC 發布了簡單易用的深度學習工具箱 GluonCV 和 GluonNLP,它們分別為計算機視覺和自然語言處理提供了頂級的演算法實現與基本運算。本文簡要介紹了這兩個工具箱,並提供了基本的使用示例,更多詳細的內容請查看它們的原文檔。

  • GluonCV 文檔地址:gluon-cv.mxnet.io
  • GluonNLP 文檔地址:gluon-nlp.mxnet.io/

自去年以來,MXNet 的動態圖介面 Gluon 憑藉著它的簡單易用、並行效率高和節省顯存等特點,成為了非常受歡迎的一個開源工具。此外,Gluon 最大的特點就是文檔和教程齊全,李沐及 MXNet 團隊還發布了一系列「動手學深度學習」的公開課。

GluonCV 和 GluonNLP 繼承了 Gluon 的優良傳統,它們都能使用簡單易用的 API 構建複雜的深度神經網路。此外,這兩個項目目前都處於開發的早期階段,它們的更新頻率會比較高。因此,各位讀者對該項目的貢獻將極大地完善用戶體驗和工具性能。

  • GluonCV 項目地址:github.com/dmlc/gluon-c
  • GluonNLP 項目地址:github.com/dmlc/gluon-n

GluonCV 提供了計算機視覺領域頂級深度學習演算法的實現。設計上,GluonCV 是為了幫助工程師、研究人員、學生快速的做出產品原型、驗證新思路、學習計算機視覺。

1. 訓練腳本從而重現最新論文中的頂級結果;

2. 大量的預訓練模型;

3. 細心設計的 API,便於理解實現;

4. 社區支持。

GluonNLP 提供了 NLP 領域頂級深度學習模型的實現,且建立了文本數據管道和模型的模塊。設計上,它同樣也是為了讓工程師、研究員和學生能快速的實現研究思路,做出產品原型。該工具箱提供以下四大特徵:

1. 訓練腳本來重現研究論文中的頂級結果;

2. 通用 NLP 任務的預訓練模型;

3. 仔細設計的 API,極大的減少了實現的複雜性;

4. 社區支持。

安裝

安裝 MXNET

GluonCV 和 GluonNLP 都依賴最新版的 MXNet,最簡單的方式是通過 pip 安裝 MXNet,運行下面的命令行將安裝 CPU 版本的 MXNet。

pip install --pre --upgrade mxnet

安裝 GluonCV

使用 pip 是安裝 GluonCV 最簡單的方式:

pip install gluoncv

當然,我們也可以使用 Git 複製 GluonCV 項目並在本地安裝:

git clone https://github.com/dmlc/gluon-cvcd gluon-cv && python setup.py install --user

安裝 GluonNLP

同樣,通過以下 pip 命令安裝 GluonNLP 也是最簡單的:

pip install gluonnlp

這兩個工具目前都提供了案例或教程,但 GluonNLP 假定了用戶對深度學習與 NLP 有基礎理解,GluonCV 的教程假定用戶對深度學習與計算機視覺有基礎了解。以下簡要展示了這兩個工具的使用案例。

以下的案例將使用 20 層的殘差網路在 CIFAR10 上從頭開始訓練,我們這裡只展示了模型架構和最優化方法。使用 GluonCV 首先需要導入這個庫:

import numpy as npimport mxnet as mxfrom mxnet import gluon, ndfrom mxnet import autograd as agfrom mxnet.gluon import nnfrom gluoncv.model_zoo import get_model

選擇模型架構可以簡單地從已有模型中導入,以下將從 GluonCV 的模型庫中導入用於 CIFAR10 的 20 層殘差網路:

# number of GPUs to usenum_gpus = 1ctx = [mx.gpu(i) for i in range(num_gpus)]# Get the model CIFAR_ResNet20_v1, with 10 output classes, without pre-trained weightsnet = get_model(cifar_resnet20_v1, classes=10)net.initialize(mx.init.Xavier(), ctx = ctx)

而剩下的優化方法及損失函數的配置就可以通過一般的 Gluon 介面完成,這同樣也是非常簡明和高效的使用方法。

# Learning rate decay factorlr_decay = 0.1# Epochs where learning rate decayslr_decay_epoch = [80, 160, np.inf]# Nesterov accelerated gradient descentoptimizer = nag# Set parametersoptimizer_params = {learning_rate: 0.1, wd: 0.0001, momentum: 0.9}# Define our trainer for nettrainer = gluon.Trainer(net.collect_params(), optimizer, optimizer_params)loss_fn = gluon.loss.SoftmaxCrossEntropyLoss()

對於 GluonNLP 來說,一般的任務都可以分為載入數據、構建詞表、搭建模型和載入詞嵌入等。以下將針對這些步驟展示該自然語言處理庫的簡單使用過程。

首先,以下代碼將導入 GluonNLP,並載入 Wikitext-2 數據集:

>>> import gluonnlp as nlp>>> train = nlp.data.WikiText2(segment=train)>>> train[0][0:5][=, Valkyria, Chronicles, III, =]

隨後,我們可以根據上面導入的數據集創建詞表:

>>> vocab = nlp.Vocab(counter=nlp.data.Counter(train[0]))>>> vocabVocab(size=33280, unk="<unk>", reserved="[<pad>, <bos>, <eos>]")

創建詞表後,我們就能繼續構建神經網路模型。如下將從模型倉庫中導入一個標準的 RNN 語言模型,並將其應用到上面載入的數據集上:

>>> model = nlp.model.language_model.StandardRNN(lstm, len(vocab),... 200, 200, 2, 0.5, True)>>> modelStandardRNN( (embedding): HybridSequential( (0): Embedding(33280 -> 200, float32) (1): Dropout(p = 0.5, axes=()) ) (encoder): LSTM(200 -> 200.0, TNC, num_layers=2, dropout=0.5) (decoder): HybridSequential( (0): Dense(200 -> 33280, linear) ))

最後,載入詞嵌入表徵就能饋送到模型並進行訓練。如下將載入 GloVe 詞嵌入表徵,它是一種頂級的英語詞嵌入方法:

>>> glove = nlp.embedding.create(glove, source=glove.6B.50d)# Obtain vectors for baby in the GloVe word embedding>>> type(glove[baby])<class mxnet.ndarray.ndarray.NDArray>>>> glove[baby].shape(50,)

推薦閱讀:

Focal Loss for Dense Object Detection解讀
2017年歷史文章匯總|深度學習
《論文研讀系列》SSD-Single Shot Multibox Detector
利用點雲掃描技術增強FM視覺功能
從RTX&DXR看圖形學的發展

TAG:深度學習DeepLearning | 人工智慧 | 計算機視覺 |