小程序也可以训练图像识别模型

前言

大概是前两周,MuseLab 的创办人在知乎联系了我,希望我把谷歌的 TeachableMachine 搬到我的小程序「AI Pocket」上。

某个周天,我研究了 TeachableMachine 官方代码和部分文章,觉得可行。所以「AI Pocket」上就多了个「初识 AI」的功能,然后也就有了这篇文章。

解题思路

之前给某学校办科技节时,团队有接触过 TeachableMachine 这个颇具教育意义的游戏。不过当时也只是试玩了一番,没有把它迁移到「AI Pocket」的想法。

在 MuseLab 创办人联系我之后,我最初的想法是「不保证能实现」,毕竟微信小程序限制实在是太多了,如果要在小程序上实现模型的训练,恐怕又要掉一把烦恼丝。

好了,言归正传。在拿到题目之后,谷歌了相关关键词之后,我找到了 teachable-machine-boilerplate 这个仓库,启发很大。

This is a small boilerplate project that demonstrates how to use tensorflow.js to create projects like Teachable Machine. The code shows how you can create a KNN classifier that can be trained live in the browser on a webcam image. It is intentionally kept very simple so it can provide a starting point for new projects.

从官方文档中,我大概知道了 TeachableMachine 的实现原理:利用预训练好的图像分类模型获取图像特征向量,再利用 KNN 分类器对图像特征作聚类分析操作。

其实用脚趾头想想也应该知道,光靠浏览器采集几张图片做训练,怕是也得不到什么「好模型」嘛。到这里,解题步骤已经很明显了:

  1. 能够在小程序上加载 MobileNet,输入图像并获取倒数 N 层的「特征层」的输出
  2. 能够在小程序上正常使用 KNN 模型
  3. 一些 UI 设计的问题

答案和后续

步骤明确之后,抽了一晚上时间出了初版,第二天上线。再一晚上出了优化版本,也就是目前在服务的版本。

初识

当然,还有改进的空间,比如长按「采集样本」按钮可以持续采集、可以切换前置摄像头、MobileNet 模型预热等等。But,还是等后面不那么忙了再议吧。

AI Pocket 小程序码

最后,附个「AI Pocket」的二维码吧,欢迎各位体验并提供修改意见!