36

图像分类任务中,Tensorflow 与 Keras 到底哪个更厉害?

 5 years ago
source link: https://www.leiphone.com/news/201809/8wyR44kEzfaTsLPV.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Z32MVbf.jpg!web

本文为 AI 研习社编译的技术博客,原标题 Tensorflow Vs Keras? — Comparison by building a model for image classification,作者为DataTurks: Data Annotations Made Super Easy。

翻译 | shunshun    整理 |  凡江

ZBZFfuQ.jpg!web

是的,标题中的问题在数据科学家之间的谈话中是很常见。有人说TensorFlow更好,有人说Keras更好。让我们看看这个问题在图像分类的实际应用中的答案。

在此之前,先介绍Keras和Tensorflow这两个术语,帮助你在10分钟内构建强大的图像分类器。

    Tensorflow:

Tensorflow是开发深度学习模型最常用的库。它是有史以来最好的库,在日常实验中被许多极客选择。如果我说Google已经将Tensor Processing Units(TPU)用于处理张量,你能想象吗?是的,他们已经这样做了。他们提出了一个名为TPU的独立实例,它具有最强大的功率驱动计算能力来处理tensorflow的深度学习模型。

    是时候做一个了!

我现在将帮助你使用tensorflow创建一个功能强大的图像分类器。等等!什么是分类器?这只是一个简单的问题,你向你的tensorflow代码询问,给定的图像是玫瑰还是郁金香。所以,首先的首先,让我们在机器上安装tensorflow。官方文档有两个版本,即CPU和GPU版本。对于CPU版本:

bqi2YjV.png!web

请注意,我是在GPU上而非CPU上进行实验后才写的这篇博客。这里给出了详细的GPU安装。

yqQVRzi.png!web

现在,让我们采用Google的Tensorflow进行实验来训练模型。谷歌的这个仓库有许多令人惊叹的处理图像的简单实验的脚本。它非常简洁,足以满足我们的目的。还记得前面我用过“强大”这个词吗?是的,当我们使用称为迁移学习的方法时,这个词就会生效。迁移学习是一种有效的方式,它使用预训练模型,这些模型已经训练了几天或几周,然后改变最后一层以适应我们自己的类别。

Inception V3是一个非常好的模型,在[2015 ImageNet Challenge](http://image-net.org/challenges/LSVRC/2015/results)图像分类竞赛中排名第二。当数据集的每个类别具有较少图像数量时,它被提及为迁移学习的最佳网络。

FRrUJbb.jpg!web

Inception V3

现在克隆git仓库:

NBzyaiB.png!web

现在,你可以选择图像。你所要做的就是以下面的方式存储数据集文件夹。

32yuuuQ.png!web

ENZjAr2.jpg!web

FLOWER DATA

它看起来应该像上面图那样(忽略image.py)。通过下面代码获得flower_photos文件夹:

iaiIjiY.png!web

创建数据

你可以使用任何你喜欢的图像。越多越好(目标是几千)。向上面文件夹格式那样以类别将它们分开,并确保它们在一个名为tf_files的文件夹中。

你可以下载已经存在的有多种任务使用的数据集,如癌症检测,权力的游戏中的人物分类。这里有各种图像分类数据集。

或者,如果你有自己独特的用例,则可以为其创建自己的数据集。你可以从网上下载图像并立即制作大型数据集,使用像Dataturks这样的注释工具,你可以手动上传图像并标记图像。更好的是,Dataturks的输出可以很容易地用于构建tf_files。

e2EZZjf.jpg!web

使用Dataturks创建数据

我发现了一个很棒的插件,可以在Google Chrome上批量下载图像。这个和Dataturks将使构建训练数据变得轻而易举。链接在这里。

您可以尝试使用dataturks的image_classification工具执行此操作。这里该工具提供的最佳功能是,如果我们有一个非结构化数据集,其中所有图像都在一个文件夹中。通过手动标记图像的类别,你可以下载一个json文件,该文件包含嵌入其中的类的图像的所有详细信息。然后使用下面给出的keras和tensorflow脚本:

EbIrY3R.png!web

训练

现在是时候训练模型了。在tensorflow-for-poets-2文件夹中,有一个名为scripts的文件夹,它包含重新训练模型所需的一切。retrain.py有一种特殊的裁剪和缩放图像的方式,非常酷。

JVFnEfy.jpg!web

然后使用以下命令训练,选项名称本身描述所需的训练路径的位置。

aqE32eq.png!web

这将下载inception模型并使用training文件夹和给定的参数训练最后一层。我使用12GB Nvidia Tesla k80和7GB Vram在GCP实例上训练了4000步。

73a6N3f.jpg!web

训练时80%数据集用作训练,20%用作测试,我们可以看到,它给出了91%的test_accuracy。现在是时候测试了!我们在`tf_files/`中有一个.pb文件,可用于测试。`label_image.py`中添加了以下更改:

fMBrumU.png!web

上面的代码将帮助我们绘制正在测试的图像的准确性并保存它。对于rodom图像的置信度百分比如下所示

qAVRfan.png!web

下面显示了几个测试图像的输出

jANNZjq.jpg!web

包含所有类别的少量输出的拼贴画 

正如我们所看到的,结果对于所述任务来说真的很好了。

    Keras

Keras是一个基于TensorFlow构建的高级API(也可以在Theano之上使用)。与Tensorflow相比,它更加用户友好且易于使用。如果我们是所有这些深度学习的新手,并想从头开始编写一个新模型,那么我会建议使用Keras,因为其易读性和易写性。可以通过下面指令安装:

甚至这个东西都包含了tensorflow,所以CPU v/s GPU兼容性变化也将适用于此。

MJRriqe.png!web

因为,我们必须执行使用inception模型的迁移学习对花进行分类的相同任务,我已经看到Keras以标准格式加载模型,如API编写的那样。

Keras有一种加载数据集的标准格式,即我们不是直接在数据集文件夹中提供文件夹,而是手动划分训练和测试数据,并按以下方式排列。我使用了我在tensorflow部分下载的相同数据集,并按照以下说明进行了一些更改。

m2I7fmu.png!web

它看起来应该如下所示:

6FnEviu.png!web

TRAIN FOLDER

至于,我们现在已完成数据集的设置,是时候进行训练了。我已经写了一小段代码来进行下面的训练:

想要继续阅读并且查看更多代码、链接和参考文献?

戳链接: http://www.gair.link/page/TextTranslation/997

雷锋网 (公众号:雷锋网) 雷锋网雷锋网

A研习社每日更新精彩内容,点击链接 http://www.gair.link/page/translate 即可观看更多精彩内容:

如何利用深度学习和 Pytorch 实现推荐系统

想了解 MIT 发布的最新编程语言 Julia,这篇文章就够了

开发者必看:8月 Python 热门开放源码

亚马逊、谷歌、微软等各家公司人脸识别对比

斯坦福CS231n李飞飞计算机视觉经典课程(中英双语字幕+作业讲解+实战分享)

等你来译:

使用 Python 完成自动特征工程——如何自动创建机器学习特征

利用 Pytorch 和 CoreML 建立一个风格转换的 iOS 程序

10个 Python 中常见的安全问题以及如何避免他们

NRnU7bF.jpg!web

雷锋网原创文章,未经授权禁止转载。详情见 转载须知

vQnueq3.jpg!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK