首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ChainerCV: 一个用于深度学习的计算机视觉库

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

作者头像
AiTechYun
发布2018-03-02 17:30:24
发布2018-03-02 17:30:24
1.7K0
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

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

这些是由ChainerCV支持的检测模型的输出。

安装

代码语言:javascript
复制
$ 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的下载机制,方便地从互联网上下载预先训练的模型。便捷接口加上这个功能允许用户用两行代码来执行算法:

代码语言:javascript
复制
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

使用下面的命令,你可以运行一个可视化演示。

代码语言:javascript
复制
$ 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

使用下面的命令,可以生成页面顶部的可视化。

代码语言:javascript
复制
$ cd examples/detection
$ python visualize_models.py

转换

ChainerCV提供了通用函数以在馈送到神经网络之前执行数据预处理。我们希望用户使用这些函数和对象一起支持数据接口(例如chainer.dataset.DatasetMixin)。用户可以通过定义一个函数来创建一个定制的预处理管道,该函数描述一个过程来转换传入的数据。通过将预处理步骤与数据集对象分离,数据集对象可以在各种预处理管道中重用。这里有一个例子,用户可以对图像进行随机旋转(random_rotate),并将其作为预处理步骤应用到图像上。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 特性
  • 模型
  • 转换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档