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

2021-08-25 11:39:33 浏览数 (1)

新智元报道

来源:网络

编辑: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

0 人点赞