手把手教你用Keras进行多标签分类(附代码)

640?wx_fmt=png

作者:Adrian Rosebrock

翻译:程思衍

校对:付宇帅

本文约7000字,建议阅读10+分钟。

本文将通过拆解SmallVGGNet的架构及代码实例来讲解如何运用Keras进行多标签分类。


本文的灵感来源于我收到的一封来自PyImageSearch的读者Switaj的邮件。

 

他写到:


你好,Adrian,感谢PyImageSearch,感谢你每周都分享你的知识。我正在构建一个时尚图像的搜索引擎,我需要你的帮助。使用我的app,用户可以上传一张他们喜欢的服饰的图片(如衬衫、裙子、裤子、鞋类),我的系统将会返回相似的物品并附上购买链接。

 

问题是我需要训练一个分类器来将物品分到不同的类别中:

 

服饰类别:衬衫、裙子、裤子、鞋类等

颜色:红、蓝、黑等

质地:棉、羊毛、丝、麻等

 

我已经为这三个不同的类别训练了三个不同的卷积神经网络(下文将称为CNN),效果非常好。

 

是否有办法让这三个CNN合并为一个CNN呢?或者至少训练一个神经网络来完成三项分类任务?

 

我不想在if / else代码的级联中单独应用它们,这些代码使用不同的网络,具体取决于先前分类的输出。

 

谢谢你的帮助


Switaj提出了一个美妙的问题:


Keras深度神经网络是否有可能返回多个预测?

如果可以,它是如何完成的?


基于Keras的多标签分类问题


本文将分为4个部分。

 

在第一部分,我将讨论我们的多标签分类数据集(以及如何快速构建属于你自己的数据集)。

 

之后我们将简要讨论SmallerVGGNet,它是我们将要实现的一个用于多标签分类的Keras神经网络结构。

 

紧接着我们将构建SmallerVGGNet并应用我们的多标签分类数据集来训练他。


最后,我们将基于样例图片测试我们的神经网络,并讨论何时使用多标签分类问题最为合适,包括您需要注意的一些注意事项。


我们的多标签分类数据集

640?wx_fmt=png

图片1:一份多类别深度学习数据集的组合。我们将使用Keras来训练一个多标签分类器来预测衣服的颜色以及类别。


我们将使用的数据集以用于今天的Keras多标签分类教程旨在模仿本文先前提到的Switaj’s的问题(尽管我们基于本文对它进行了简化)。

 

我们的数据集由2167张图片组成,它们来自6个不同的种类,包括:

 

  • 黑色牛仔裤(344张图片)

  • 蓝色裙子(386张图片)

  • 蓝色牛仔裤(356张图片)

  • 蓝色衬衫(369张图片)

  • 红色裙子(380张图片)

  • 红色衬衫(332张图片)

 

我们的卷积神经网络的目标是同时预测颜色和服饰类别。

 

我构建该数据集通过遵循我之前发布过的博文:


How to (quickly) build a deep learning image dataset


下载图片以及手动为该6个类别剔除不相关图片的整个过程将耗费大概30分钟。


当你在尝试构建你自己的深度学习数据集时,请确保你遵循了上述教程链接——它将帮助你快速启动构建你自己的数据集。


多标签分类项目结构


请直接访问本文的“下载”处以获得源代码及文件。一旦你解压缩了zip文件,你将会看到如下的目录结构:

640?wx_fmt=png


在该zip文件的根目录下,你会看到6个文件及3个文件夹。

 

我们将用到的重要文件(基于它们本文出现的大致顺序)包括:


  • search_bing_api.py:此脚本使我们能够快速构建深度学习图像数据集。你不需要运行这段脚本因为图片数据集已经囊括在zip文件中。我附上这段脚本仅为保证(代码的)完整性。

  • train.py:一旦我们拥有了数据,我们将应用train.py训练我们的分类器。

  • fashion.model:我们的train.py脚本将会将我们的Keras模型保存到磁盘中。我们将在之后的classify.py脚本中用到它。

  • mlb.pickle:一个由train.py创建的scikit-learn MultiLabelBinarizer pickle文件——该文件以顺序数据结构存储了各类别名称。

  • plot.png:训练脚本会生成一个名为plot.png的图片文件。如果你在你自己的数据集上训练,你便需要查看这张图片以获得正确率/风险函数损失及过拟合情况。

  • classify.py:为了测试我们的分类器,我写了classify.py。在你将模型部署于其他地方(如一个iphone的深度学习app或是树莓派深度学习项目)之前,你应该始终在本地测试你的分类器。

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值