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

本文分享自微信公众号 - ATYUN订阅号(atyun_com)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

【扫盲】如何区分人工智能,机器学习和深度学习

我们都熟悉“人工智能”这一概念。毕竟,这个词常常在热门电影中出现,如《终结者》、《黑客帝国》、《机械姬》。 但最近你也可能常常听到其他术语,如“机器学习”和“深...

251100
来自专栏人工智能

如何提高深度学习的性能

您可以使用这20个提示,技巧和技术来解决过度拟合问题并获得更好的通用性

76770
来自专栏CDA数据分析师

机器学习的商业应用

机器学习的商业应用就是把真实的场景,真实的商业应用的经验凝练成对每个数据分析师都有价值的功能,逐渐放到产品中。 本期精编版嘉宾演讲为IBM中国开发中心技术总监...

26250
来自专栏企鹅号快讯

能在不同的深度学习框架之间转换模型?微软的MMdnn做到了

Microsoft/MMdnn:深度学习框架随心切换 学习深度学习的各位同学都希望自己的模型能在不同的深度学习框架之间随意转换,比如,斯坦福大学CVGL实验室的...

71750
来自专栏XAI

Java分布式神经网络库Deeplearning4j 环境搭建和运行一个例子

DeeplearningforJava简单介绍: deeplearning4j是一个Apache 2.0-licensed,开源的,分布式神经网络库编写的jav...

53480
来自专栏企鹅号快讯

Yann LeCun力挺前AAAI主席,批判深度学习的Marcus遭怒怼

Yann LeCun、Tom Dietterich、Gary Marcus在NIPS 2015上讨论我们周围的算法,吴恩达同台 昨天,纽约大学教授、Uber A...

21180
来自专栏AI

什么是深度学习?

深度学习是机器学习的一个子领域,涉及被称为人工神经网络的大脑的结构和功能所启发的算法。

30270
来自专栏FreeBuf

如何搭建你自己的“深度学习”机器?

深度学习是一门用来解决复杂问题的技术,例如自然语言处理和图像处理。目前,我们已经可以很快的处理超大计算量的问题——这多亏了GPU,GPU最初就是用于快速生成高分...

22450
来自专栏CDA数据分析师

资源 | 工程师必备!最好的九张机器学习;深度学习代码速查

作者在 Github 上建立了一个代码速查表,对机器学习初学者来说是不可多得的一个资源。文章中的高清图片附加百度网盘,读者可从中浏览,也可以点击项目地址或文后的...

25390
来自专栏XAI

Java分布式神经网络库Deeplearning4j之上手实践手写数字图像识别与模型训练

环境的搭建可以参考另一篇文章。 Java分布式神经网络库Deeplearning4j 环境搭建和运行一个例子 代码所在包截图示意 ? 第一步运行MnistIm...

1.4K100

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励