前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >狗盲不存在!印度小哥实战搭建狗品种识别算法,只要7步

狗盲不存在!印度小哥实战搭建狗品种识别算法,只要7步

作者头像
新智元
发布2021-08-25 11:39:33
1K0
发布2021-08-25 11:39:33
举报
文章被收录于专栏:新智元新智元

新智元报道

来源:网络

编辑:yaxin、su

【新智元导读】狗的品种有多少,你能否一一道来?若将不同品种的狗拉到你面前,你又能认识几个?别急,国外小哥搭建了一个专门对狗的品种进行分类的CNN模型,「狗盲」不存在!

在路上偶然见到一只狗狗觉得很可爱,但是不知道它的品种?

觉得某个喜欢的明星很像……狗狗?

最近,一位印度小哥搭建了一个CNN模型,专门对狗的品种进行分类!

识别到人脸怎么办呢?它会告诉我们与此人最相似的狗狗品种。

该模型使用的狗数据集和人体数据集来自Kaggle。

包括8351张狗图像,分为训练(6680)、验证(835)和测试(836)数据集,以及13233 张人脸。

训练数据集中,图像数量最多的阿拉斯加雪橇犬(77),最少的是挪威布哈德犬 ( 26 )。

如图从上到下依次为:阿拉斯加雪橇犬、挪威布哈德犬

该模型的评估指标是准确性,即正确预测的数量与所有预测的比值。

同时,在总结时使用精度进行评估,避免误报率(False Positive Ratio)。

具体步骤分为七步:

第 1 步:检测人类

第 2 步:检测狗

第 3 步:创建一个CNN 来对狗品种进行分类

第 4 步:使用 CNN 对狗品种进行分类(使用迁移学习)

第 5 步:创建一个CNN来对狗品种进行分类(使用迁移学习)

第 6 步:最终算法

第 7 步:测试算法

七步走,狗狗检测器诞生

第1步 检测人类

研究人员尝试将2种不同的算法来检测人脸:OpenCV 和 MTCNN。

如何实现?

OpenCV 是一个 python 库,它使用基于 Haar 特征的级联分类器,通过各种过滤器/内核函数提取特征,然后应用 Adaboost 算法对不良特征进行处罚。

OpenCV 的 Haar 级联分类器准确预测 100%的人类图像,约12%的狗图像错误地预测为人类。

再来看另一个检测人脸的分类器 MTCNN(多任务级联卷积网络)。

它由三个卷积网络(P-Net、R-Net 和 O-Net)组成,负责实时检测的鲁棒性。

事实证明,MTCNN 是检测「模糊图像」更好选择。

OpenCV和MTCNN对比

然而,当研究者在狗图像上评估 MTCNN 算法时,检测出的比率却是不同的。

尽管它完美地检测了所有人脸,但大约23%的狗图像被检测为人类,这比 OpenCV 的 12% 错误率要大得多。

这表明 MTCNN 中的误报率高于 OpenCV。

第2步 检测狗

为了检测狗,研究人员使用预训练的 Resnet-50 模型。该神经网络已在ImageNet数据集上进行了训练,可直接加载模型利用。

在把图像提供给 Resnet-50模型之前,必须将图像重塑 n(图像的预处理)m为 Keras 接受的张量 (4D 数组)。

预处理图像数据

接下来便是预测。预测前,研究者对输入图像也进行一些额外的处理。

Resnet-50 模型在这方面的表现相当出色,狗和人脸的图像都能正确标记。

第3步 创建一个 CNN 来对狗品种进行分类

现在有了在图像中检测人类和狗的功能,必须设计出一种从图像中预测品种的方法。

研究人员尝试创建了自己的卷积神经网络和训练狗的数据集,如下:

狗品种分类器 CNN

研究者在最初的几个层中使用了Conv2D和MaxPooling的组合,然后是GlobalAveragePooling2D、Dropout和Dense图层。

模型概述

模型编译

模型训练

当前,研究者已经对模型进行了 25 次训练,批量大小为 20。使用的优化器是rmsprop。使用该模型获得的准确度和精密度分别为15.5%和14%。

第4步 使用 CNN 对狗品种进行分类

上面的模型没有给出理想的准确度,值得庆幸的是,「迁移学习」可以帮助实现。

这样,研究者可以在不牺牲准确性的情况下减少训练时间。

因为只需要训练最后几层并利用已经训练好的 CNN 模型的权重,在这种情况下是VGG-16。

VGG 16 CNN 模型

VGG16 模型的上述实现产生了45.5%的准确率,远高于研究者自己的 CNN 模型。

第5步 创建一个 CNN 来对狗品种进行分类(使用迁移学习)

接下来,研究者对下载到各自架构的瓶颈特性上训练更多模型 (Resnet-50,InceptionV3)。

在实现方面,它们与 VGG-16 模型完全相似,只有架构不同。

他们创建了一组函数来构建架构、编译和训练模型,以及报告准确性和热图。

犬种预测的 Inception V3 模型热图

因此,我们使用InceptionV3网络来训练我们的模型。从上图中可以明显看出,这是一个更好的热图,大多数预测都沿着对角线。它产生了81.2%的准确度和大约84%的精度。

第6步 最终算法

将人脸检测器、狗检测器和狗品种分类器整合到一个算法中。

然后就可以拍摄图像并预测狗的品种啦!当然,如果是人类,则预测与此人最相似的狗品种。

狗品种预测

输入图像后,softmax分类器会将最大概率的索引定为最终品种。

此外,算法还会显示5个最有可能的犬种及其softmax概率。

最终算法

输入狗和人脸的图片后,上述函数将调用final_breed_prediction方法进行预测,并显示相关信息。

第7步 测试算法

最后,研究人员分别检测了5张狗的图像以及2张人的图像。

结果显示,它准确地预测了所有5只狗图像的品种。然而,就人类图片预测而言,并不完全令人信服。

比如下面这张图就闹了一个笑话,「你看起来像一只獒犬」。

准确度还不错!但也存在改进空间

总的来说,这一模型准确度还可以。

对提取的瓶颈特征进行训练后,基准模型的准确度如下:

VGG16:45%、InceptionV3:82%、Resnet50:81%

研究人员发现,增加epoch的数量并不能减少验证损失。也就是说,在20次迭代内就可以实现最佳的验证损失和准确性。

此外,在CNN结构中添加太多层并不能提高准确性。

因而,最终模型保留了1 个GAP 2D层和1个Dense Softmax层。

当然,改进的空间是存在的!

比如,最近开发的其他先进人脸检测方法可以降低在MTCNN实现中观察到的误报率。

此外,通过增加训练数据可以使提取的瓶颈特征更完整,并且创建更丰富的图像表示,从而提高准确性。

制作一个狗狗检测器,你学废了吗?

参考资料:

https://winxzenpiyush23.medium.com/dog-breed-classifier-using-cnn-4f408d04ff86

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

本文分享自 新智元 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【新智元导读】狗的品种有多少,你能否一一道来?若将不同品种的狗拉到你面前,你又能认识几个?别急,国外小哥搭建了一个专门对狗的品种进行分类的CNN模型,「狗盲」不存在!
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档