1. 程式人生 > 其它 >ChainerCV: 一個用於深度學習的計算機視覺庫

ChainerCV: 一個用於深度學習的計算機視覺庫

ChainerCV是一個基於Chainer用於訓練和執行計算機視覺任務的神經網路工具。它涵蓋了計算機視覺模型的高質量實現,以及開展計算機視覺研究的必備工具集。

這些是由ChainerCV支援的檢測模型的輸出。

安裝

$ pip install -U numpy
$ pip install chainercv

使用Anaconda的安裝指令在這裡(推薦)。

要求

  • Chainer和它的依賴項
  • Pillow
  • Cython (建立需求)

附加特徵

  • Matplotlib
  • OpenCV

在Python 2.7.12和3.6.0的環境下獲得了測試。

  • 主分支將在穩定版本(v2)和開發版本(v3)上工作。
  • 對於使用Chainer v1的使用者,請使用0.4.11版本,它可以由命令列pip install chainercv==0.4.11安裝。這個分支是不受維護的。

特性

資料慣例

ChainerCV遵循以下慣例

  • 彩色影象的通道被命令為RGB。影象陣列的形狀是CHW形式(channel(通道)、height(高度)、width(寬度))。
  • 軸依賴的值遵循行列的順序。

1.影象的形狀總是被表示為(height,width)。

2.邊界框的座標被排序為(y_min, x_min, y_max, x_max)。(y_min, x_min)和(y_max, x_max)分別是左上的座標和右下頂點的邊界框。

3.關鍵點的座標被排序為(y,x)。

模型

目前, ChainerCV支援物件檢測和語義分割的網路。我們計劃在未來支援不同任務的網路。影象檢測是在影象中查詢物件並對物件進行分類的任務。語義分割是將影象分割成塊並將物件標籤分配給它們的任務。我們的實現包括:

檢測模型

  • Faster R-CNN
  • Single Shot Multibox Detector (SSD)

語義分割

  • SegNet

某些任務的模型被設計成具有公共介面。例如,檢測模型支援方法,它獲取影象和輸出座標、類標籤和在估計的物件區域中預測的邊界框的置信度。通用介面允許使用者在程式碼中輕鬆地交換不同的模型。最重要的是,使用的程式碼在這個介面之上構建。 例如,有一個chainer.training.Trainer

擴充套件叫做chainercv.extensions.DetectionVisReport,它在先前宣告的通用介面的模型訓練中顯示輸出。

ChainerCV在一個檔案系統內下載和儲存檔案,使用Chainer的下載機制,方便地從網際網路上下載預先訓練的模型。便捷介面加上這個功能允許使用者用兩行程式碼來執行演算法:

from chainercv.links import FasterRCNNVGG16, SSD300# You can use Faster R-CNN instead of SSD.# model = FasterRCNNVGG16(pretrained_model='voc07')model = SSD300(pretrained_model='voc0712')# `bboxes` is a list of numpy arrays containing coordinates of boundnig boxes# around objects. `labels` and `scores` are class ids and confidence scores for# the boxes.bboxes, labels, scores = model.predict(imgs)  # imgs is a list of image

使用下面的命令,你可以執行一個視覺化演示。

$ cd examples/ssd # or cd examples/faster_rcnn $ wget https://cloud.githubusercontent.com/assets/2062128/26187667/9cb236da-3bd5-11e7-8bcf-7dbd4302e2dc.jpg -O sample.jpg $ python demo.py sample.jpg

使用下面的命令,可以生成頁面頂部的視覺化。

$ cd examples/detection
$ python visualize_models.py

轉換

ChainerCV提供了通用函式以在饋送到神經網路之前執行資料預處理。我們希望使用者使用這些函式和物件一起支援資料介面(例如chainer.dataset.DatasetMixin)。使用者可以通過定義一個函式來建立一個定製的預處理管道,該函式描述一個過程來轉換傳入的資料。通過將預處理步驟與資料集物件分離,資料集物件可以在各種預處理管道中重用。這裡有一個例子,使用者可以對影象進行隨機旋轉(random_rotate),並將其作為預處理步驟應用到影象上。

from chainer.datasets import get_mnistfrom chainer.datasets import TransformDatasetfrom chainercv.transforms import random_rotate

dataset, _ = get_mnist(ndim=3)def transform(in_data):    # in_data is values returned by __getitem__ method of MNIST dataset.
    img, label = in_data
    img -= 0.5  # rescale to [-0.5, 0.5]
    img = random_rotate(img)    return img, label
dataset = TransformDataset(dataset, transform)
img, label = dataset[0]

如在本例中所發現的,random_rotate是由ChainerCV提供的轉換之一。與其他轉換一樣,這只是一個將陣列作為輸入的函式。