刷剧不忘学习:用Faster R-CNN定位并识别辛普森一家中多个人物

王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI

Alexandre Attia是《辛普森一家》的狂热粉丝,在之前他已经写了一篇用卷积神经网络来识别20个辛普森人物的教程。给定一个人物图片后,该模型能返回该图片的所属类别,识别效果相当好,F1分值可达96%。

量子位翻译过这篇教程:刷剧不忘学CNN:TF+Keras识别辛普森一家人物 | 教程+代码+数据集

相关数据集已经在Kaggle上开源,但是该CNN模型每次只能识别单个人物,且不能指出该人物的图片位置。

作者不满足于只构建了一个简单的分类器,所以在本文中,作者创建了一个能检测和分类图片中每个人物的新模型,该模型将比之前的模型复杂得多,并且能为每个人物绘制对应的边框。

接下来让我们跟着他的文章来了解下该如何建立一个具有定位加识别功能的网络模型。

一开始,我考虑使用滑动窗口的方法来分类图片中的多个人物。为了检测出每个人物,我们组合不同大小的窗口进行多次判断。该算法可以预测每张图片中的大量子图片,但是计算十分耗时。

因此,在这篇文章中,我会使用更快速且最先进的深度学习模型Faster R-CNN,听起来非常有趣。本文仍然使用了以TensorFlow为后端的Keras库。

Faster R-CNN网络

目标检测网络是基于区域提案(region proposal)算法来进行假设,得到目标的位置。

该模型的主体为区域提案网络,结合能同时预测目标边界和每个位置目标评分的完全卷积网络来实现的。

Faster R-CNN是R-CNN和Fast R-CNN的升级版本,其结构类似于Fast R-CNN网络,但是使用ConvNet取代了区域提案部分。

Faster R-CNN网络示意图

下面是前馈通道的信息流:

1.卷积网络从末个卷积层得到特征图谱;

2.区域提案网络(RPN)通过convnet结构提出感兴趣区域RoI(Region of Interest),用来处理特征图谱;

3.每个所提出的区域都会被传递到一个RoI池化层中;

4.通过全连接层来分类各区域;

Yann Henon曾经用Keras库实现了上述Faster R-CNN网络。

你也可以查看量子位之前编译过的《卷积神经网络在图像分割中的发展历程:从R-CNN到Mask R-CNN》,来详细了解图像分割技术。

完善数据集

第一部分中所使用的数据集还存在一定问题,因此我们仍需要为训练集中每个人物确定对应的边界框。

我们可以通过点击鼠标和matplotlib库,为每张图片标记出边界框。已标记的训练集和相关说明已经上传至Kaggle平台。

确定每个图片中人物的边界框坐标

我们不仅保存了图片形式的训练集,还将边界框坐标和对应类别保存为一个文本文件:

对于每个人物,要确定该人物边界框的左上角和右下角坐标。

人物的样本量分布

数据预处理

训练集中的子图片可能具有不同的长宽比和分辨率,因此需要进行预处理。

首先要调整图片的分辨率,使最小边的分辨率为300像素,同时保持相同的长宽比。然后通过减去每个通道的数据平均值来归一化图像,使训练集数值居中。通过以上操作,使每个特征的变化范围相似,减少发生梯度失控现象。

定义网络

本文以ResNet网络为基础,构建了区域提案网络RPN。同时也使用基本网络层定义了人物分类器。

训练模型

在训练时,该模型基于训练集迭代训练了50步,每次迭代的长度为1000。还使用了两种数据增强方法,分别是水平翻转和90度旋转。

想要在CPU上训练该网络是不可能的,所以我使用了AWS EC2的Tesla K80:每次迭代需要390秒。

训练时的正确率和Loss值

模型测试

训练模型的效果图1
训练模型的效果图2

在每张图片中,该模型能正确定位图中人物并对其进行分类,同时还能预测每个定位人物的边界框坐标。

根据效果图可以看出,该模型能很好地检测出图中人物,但是确定人物的边界框时较为粗糙。实际上,该模型确定出的人物边界框过大,所以当图片中有多个人物时,边界框可能会重叠。针对这一点,通过调整overlap_threshold值和Non-Maximum Suppression函数可以改善。

当然,与第一部分中只对训练集中人物图片分类的convnet网络相比,该模型的正确率有一定的降低。

使用笔记本电脑CPU进行预测,速度非常慢,每张图片耗时8秒;使用型号为Tesla K80 的GPU进行预测,每张图片耗时0.98秒。

我们可以简单地和结合滑动窗口的简单卷积网络比较,如第一部分使用的CNN网络,结果看起来很有趣。对于一张640x460大小的图片,滑动窗口设置为64x128(水平步幅为8像素,垂直步幅为4像素),仍需要处理6000张子图片。即使某网络的预测速度很快,每张子图片耗时只有0.01s,此时处理每张图片仍需要60秒。另外,如果结合了滑动窗口方法,就只能得到固定长宽比的多张子图片。

改进方向

接下来,我将继续标注相关图片来扩大训练集,如果有新方法会继续进行更新。

相关链接

1.用keras实现的Faster RCNN: https://github.com/yhenon/keras-frcnn

2.完整项目代码: https://github.com/alexattia/SimpsonRecognition

原文发布于微信公众号 - 量子位(QbitAI)

原文发表时间:2017-07-04

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hadoop学习笔记

非局部神经网络,打造未来神经网络基本组件

将非局部计算作为获取长时记忆的通用模块,提高神经网络性能在深度神经网络中,获取长时记忆(long-range dependency)至关重要。对于序列数据(例如...

1400
来自专栏企鹅号快讯

机器学习之白话adaboost元算法

阅读本文大约需要5分钟 作为(曾)被认为两大最好的监督分类算法之一的adaboost元算法(另一个为前几节介绍过的SVM算法),该算法以其简单的思想解决复杂的分...

2036
来自专栏应用案例

机器学习三人行-手写数字识别实战

前面三个系列我们分别从机器学习入门,洞悉数据,已经数据预处理,回归建模等方面进行了系统的学习。 今天我们根据mnist手写数字的数据集来对0-9共10个数字进行...

2805
来自专栏深度学习计算机视觉

计算机视觉中的物体检测方法

本文适合刚入门物体检测的人群学习,不涉及公式推理。 目录 *摘要 *相关物体检测数据集介绍 *现有的主流物体检测算法 *物体检测的难点与挑战 *相关术语介绍 *...

2984
来自专栏AI科技大本营的专栏

学术 | 一种新的CNN网络可以更高效地区分自然图像生成图像

作者 | Weize Quan , Kai Wang, Dong-Ming Yan , Xiaopeng Zhang

1131
来自专栏技术小站

吴恩达深度学习笔记 course4 week 4 特殊应用:人脸识别与神经风格转换

output:如果图片是对应的K人中的一人,则输出此人ID,否则验证不通过    ,人脸识别比人脸验证更难一些,如果一个人脸验证系统的正确率为99%,即错误率为...

1862
来自专栏书山有路勤为径

Regularizing your neural network

如果怀疑神经网络过度拟合了数据,即存在高方差问题那么最先想到的方法可能就是正则化,另一个解决高方差的方法就是准备更多数据,这也是非常可靠的办法,但你可能无法时时...

583
来自专栏xingoo, 一个梦想做发明家的程序员

吴恩达机器学习笔记 —— 5 多变量线性回归

有时候特征各个维度是不同规模的,比如房间的平米数和房间数,两个数量级相差很大。如果不丛任何处理,可能导致梯度优化时的震荡。

1010
来自专栏计算机视觉战队

深度判别和共享特征学习的图像分类

秋雨思童年,落花念爱霖!一场秋雨的洗礼,让我们进入了真正能感觉得到的秋季。秋季是丰收的季节,不知朋友您收获如何?但是我相信您一定硕果累累,满载着各种成果、业绩和...

3467
来自专栏人工智能

吴恩达深度学习课程笔记之卷积神经网络基本操作详解

卷积层 CNN中卷积层的作用: CNN中的卷积层,在很多网络结构中会用conv来表示,也就是convolution的缩写。 卷积层在CNN中扮演着很重要的角色—...

3837

扫码关注云+社区

领取腾讯云代金券