使用MobileNet模型进行物体识别

我们上一讲介绍如何加载已经训练好的模型和权重,其实这就给大家开了一扇无限大的门。我们可以使用别人已经训练好的模型做各种有趣的项目。

这里我们就使用大名鼎鼎的MobileNet识别物体

加载MobileNet模型

MobileNet是一个轻量化的神经网络模型,所谓轻量化就是可以在一般的家用pc和手机上跑起来的模型。一般我们人工智能的在线服务后端很可能是一个有几千层,还有n个模型相互嵌套的引擎,并且还有伴随着很多人工的优化和结果处理。而MobileNet全部细分层加起来也只有88个,最后结果输出1000个常见物品的分类。

下图是mobilenet的拓扑结构

../_images/c6_01.png

我们新建一个项目,并且记得先新建一个model变量保存模型的名字。

之后我们需要mobilenet的模型和训练权重,这两个文件可以在我们github仓库找到

本节需要下载这三个文件

../_images/c6_07.png

下载方式需要注意,很容易犯错,CC喵就中招了。下载这三个文件的时候需要点进去(如下图),这里以mobilenet.json为例,点进去后,右键另存为下载。

../_images/c6_08.png

拖入如下的加载代码

../_images/c6_03.png

第二个方块是加载模型的输出结果名称,因为机器输出的是0~999这样的数字,我们需要将这些数字转换成名字。其中224label.csv这个文件就保存了我们需要的名称。其中item是一个list变量,加载之后我们可以看看item的内容:

../_images/c6_04.png

添加图片

我们这个示例项目的思路是在背景中加入不同的小动物图片,切换这些图片的过程中识别背景中的动物。

../_images/c6_09.png

删除白背景,添加动物图(动物图需要自己上传添加,可以自己网上随意找,尽量找背景是白色的,保证识别的准确度。)

../_images/c6_10.png

../_images/c6_05.png

猫咪精灵的代码如下(从背景编辑状态切回到精灵状态,需要鼠标点击一下喵咪精灵)

../_images/c6_06.png

这里用到谷歌翻译插件,因为分类命名是英文的,我们用谷歌翻译成中文(电脑需要联网)

../_images/c6_11.png

我们设计的猫咪精灵的程序汇总,识别的过程中将猫咪隐藏,防止干扰识别结果。

最后效果如下~可能你做出来的实验结果跟我的不一样,大致分类是对的,但是可能归类到别的大类去。这是正常的,毕竟这个模型还是需要提高精确度。

../_images/c6_07.gif

下一节我们讲解如何改造MobileNet让它识别我们需要的分类,例如剪刀石头布:

../_images/c6_08.gif