ChainerCV: 一个用于深度学习的计算机视觉库

2017年08月23日 由 yining 发表 513192 0
ChainerCV是一个基于Chainer用于训练和运行计算机视觉任务的神经网络工具。它涵盖了计算机视觉模型的高质量实现,以及开展计算机视觉研究的必备工具集。

ChainerCV: 一个用于深度学习的计算机视觉库

这些是由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_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提供的转换之一。与其他转换一样,这只是一个将数组作为输入的函数。

 
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消