ChainerCV: 一个用于深度学习的计算机视觉库
2017年08月23日 由 yining 发表
513373
0
ChainerCV是一个基于
Chainer用于训练和运行计算机视觉任务的神经网络工具。它涵盖了计算机视觉模型的高质量实现,以及开展计算机视觉研究的必备工具集。
这些是由ChainerCV支持的检测模型的输出。
安装
$ pip install -U numpy
$ pip install chainercv
使用Anaconda的安装指令在
这里(推荐)。
要求
附加特征
在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(宽度))。
- 轴依赖的值遵循行列的顺序。
- 图像的形状总是被表示为(height,width)。
- 边界框的坐标被排序为(y_min, x_min, y_max, x_max)。(y_min, x_min)和(y_max, x_max)分别是左上的坐标和右下顶点的边界框。
- 关键点的坐标被排序为(y,x)。
模型
目前, ChainerCV支持对象检测和语义分割的网络。我们计划在未来支持不同任务的网络。图像检测是在图像中查找对象并对对象进行分类的任务。语义分割是将图像分割成块并将对象标签分配给它们的任务。我们的实现包括:
检测模型
- Faster R-CNN
- Single Shot Multibox Detector (SSD)
语义分割
某些任务的模型被设计成具有公共接口。例如,检测模型支持方法,它获取图像和输出坐标、类标签和在估计的对象区域中预测的边界框的置信度。通用接口允许用户在代码中轻松地交换不同的模型。最重要的是,使用的代码在这个接口之上构建。
例如,有一个
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_mnist
from chainer.datasets import TransformDataset
from 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提供的转换之一。与其他转换一样,这只是一个将数组作为输入的函数。