我们见惯了上古时代,由电子管组成的时钟。在 AI 时代,有没有更加新潮的时间显示方式?是的,数据集也能做成时钟,每天早上,让 MNIST 手写数字唤醒你一天的记忆。

MNIST 是计算机视觉中不老的经典,当第一代卷积神经网络在这个手写数字数据集上绽放出耀眼的光芒,它注定会载入「史册」。

尽管目前计算机视觉已经早就走出了 MNIST 数据集的时代,甚至连一千多万图像的 ImageNet 也不再是非常大的一个图像数据集。然而,MNIST 仍然不可忽视,深度学习入门的第一个数据集、验证算法的第一个实验都是它。甚至连 Hinton 验证 Capsule 这个想法的数据集都用的它。

如果说想要致敬这样的数据集「先驱」,你会采用什么样的方式?在 GitHub 中,机器之心发现一个有意思的小项目,作者 Dheera Venkatraman 做了一面钟,里面的数字都是从 MNIST 数据集中采样的。

项目地址:https://github.com/dheera/mnist-clock

也就是说,24 小时随机抽万张不同的手写数字,每天都不带重样。做出来的效果是这样的:

这样的电子钟只需要简单的电路板再加上 4 块电子墨水屏就行了,它背后的样子是这样的:

硬件

项目使用了 TinyPICO 开发板;紧凑的 ESP32 板以及大量的 GPIO 插脚、4MB 闪存、Wi-Fi,以及其他很多功能。TinyPICO 可以说是目前世界上基于 ESP32-PICO-D4 体积最小的开发板,240 MHz 的 32 位双核处理器足够我们完成计算。

4 块 e-link 数字显示器,之所以选择 e-link,是因为它符合手写数字的概念,在任何光线条件下都能正常运行,而且也不至于打扰到任何人。Waveshare 的 e-link 显示屏大部分是 SPI,虽然也有些额外的引脚。大部分人会希望一块只包含 SPI 以及一块 CS 插脚,但多一些的链接器是有必要的。下面是 ESP32 的连接图,根据这个把电线卷起来。

作者在 TinyPICO 上使用的是两个 10-引脚的 JST-EH 的连接器,JST-EH 比 JST-XH 使用更低的配置,更适合插入,以及比标准引脚更短更安全。

JST-EH 连接器所连接的 TinyPICO

下面,再见硬件固定在 3D 打印的外壳上,就大功告成了:

如果读者们对硬件不熟悉,那也不要急,我们只要按照项目作者给出的硬件,并装配好就行了。后面我们会介绍所有「装备」的价格以及作者提供了设计图。

软件

项目作者 Dheera Venkatraman 表示,他经常写 C++或者 C,但他对 MicroPython 非常有兴趣,因此在这个项目中采用的就是它。

项目作者使用每像素 2 比特的灰度深度来表示 MNIST 手写数字。在这种比特深度下一张 28*28 像素的图像只需要 196 字节,因此一个 4MB 的闪存就能满足整个 MNIST验证集。如果你想把整个数据集都装进去,那么也只需要换闪存更大的微控制器、或者使用 1 比特深度的图像、或者使用压缩方法等。

将所有文件放在 TinyPICO 根目录中的/ code 中,正确的文件大概如下图所示。

另外,我们还需要为 Wi-Fi 创建一个名为.wifi 的文件,中间写上 yourssid 与 yourpassword,具体的读取 WIFI 设置的代码就如下所示。

项目作者 Dheera Venkatraman 在 GitHub 中提供了所有代码文件,打印钟表数字的代码也非常易读。更友善的的是,作者的代码提供了非常完善的注释,基本重要的语句都有解读。

现实一点,做一块多少钱?

如果从硬件来看,似乎主要成本就是 TinyPICO 开发板以及四块 e-ink 屏。首先 TinyPICO 在淘宝或者国外网站都能买到,国外卖 20 美元,而淘宝上标价 235 元,加上运费其实也差不多。此外,读者也可以选择专门的元器件商城,其价格也在 200 块左右。

其次,一块 e-ink 屏大概 24 美元,虽然淘宝找不到,但是国内的元器件商城要便宜得多,一块只需要 92 元左右,可能树莓派对它的需求比较大吧。

其它的成本就比较少了,线材、连接器装时钟的外包装都比较容易获得,在国内的元器件商城也可以一次性买到。如果读者想 3D 打印外包装,作者也提供了具体的打印参数。所以,总的来说,制作成本应该是低于 650 元的,其中开发板和电子屏都可以在其它项目中再利用。

也许我们还能改进该项目作者的实现,在一块大的墨水屏上实现数字时钟,直接使用更常用的树莓派作为主板(功耗远高于 TinyPICO),并实现更多的能力,例如实时采样个 CIFAR-10 作为背景。总之,MNIST 数字时钟还有很多可以玩的地方。

最后,所有硬件与软件的详细信息都可查阅原项目。此外,值得一提的是,Dheera Venkatraman 还是非常有意思的一位小哥哥,他从杭州到北京沿着人类历史上最长的人工河靠自行车骑了 1600 公里。

Last But Not Least

确实 MNIST 站在舞台中央的时代已经过去了,但它的作用仍然不可忽视,仍然有很多研究者致力于改进并修复它,做出独特的贡献。

2017 年,德国时尚科技公司 Zalando 提供了 Fashion MNIST 数据集,它的大小、格式和训练集 / 测试集划分与原始的 MNIST 完全一致,从 MNIST 迁移到它,我们不需要修改任何代码。

去年 6 月份,NYU 和 Facebook 的研究者重建并扩展了 MNIST 数据集,在测试集中新增了 50000 个样本,将测试集增加到 6 万样本。MNIST 作者之一的 Yann LeCun 表示,「如果多次使用原版的 MNIST 测试集,你的模型可能在测试集上已经过拟合了,是时候在新增的样本上试一下了。」

不论是将 MNIST 做成日常生活中好看又好玩的项目,还是提升数据集本身的能力,MNIST 一直都会是活着的历史~

AI朋克致敬MNIST:只用Python和开发板,制作永不重样的时钟相关推荐

  1. Python开发实例:TPYBoard开发板制作声光控开关

    2019独角兽企业重金招聘Python工程师标准>>> 声光控开关在我们日常生活中已经非常普遍了,几乎每个小区的楼道里都能有声光控开关的影子.现在也逐渐出现了声光控的小夜灯,晚上起夜 ...

  2. esp32-C3开发板制作钉钉蓝牙打卡神器

    我之前对嵌入式.开发板的使用没太接触过.这篇文章记录我用esp32开发板制作钉钉打卡神器的过程,如果能对其他人有一点点小帮助那就更好啦. 关于打卡环境(打卡方式).我们实验室门口墙上有一个考勤机,考勤 ...

  3. arduino串口监视器显示nan_使用Arduino开发板制作摩尔斯电码生成器

    摩尔斯电码是一种通信系统,用于在两个不同持续时间的信号中编码任何字符,称为点和虚线.摩尔斯电码由Samuel F.B开发.并进一步用于电报传输秘密信息.它在第二次世界大战时最常用.摩尔斯电码可以通过点 ...

  4. FPGA之道(19)以FPGA为核心的开发板制作

    文章目录 前言 开发板制作 前言 学习FPGA的初期,我们习惯到网上买一款FPGA开发板,这是新手学习FPGA开发的最佳途径,负责任的开发板制作者会提供相应的教程供练习,毕竟能动手操作上板子才是真正玩 ...

  5. Arduino开发板制作

    Arduino UNO 介绍 ,Arduino开发板制作 教程: Arduino制作 Arduino UNO 图 Arduino是什么 Arduino是一款便捷灵活.方便上手的开源电子原型平台.包含硬 ...

  6. STM32G070RBT6迷你开发板制作总结

    STM32G070RBT6迷你开发板制作总结 目录 STM32G070RBT6迷你开发板制作总结 1.组成概述 1.原理图绘制 系统组成 本系统由五部分构成:电源,晶振,复位电路.调试接口,调试芯片电 ...

  7. 基于arduino uno 开发板制作的 智能书包项目

    基于arduino uno 开发板制作的智能书包,当时收短视频启发,集合自动售货机的代码和RC522 读卡模块代码结合制作,现基本功能可以实现 ,目前代码部分尚不稳定需要继续改进 //一个智能书包小发 ...

  8. 硬件学习、高速dsp开发板制作、STM32学习笔记

    1.硬件工程师成长之路(1)--元件基础_[云轩]的博客-CSDN博客_硬件工程师的成长之路 总目录:https://blog.csdn.net/weixin_44407238/category_10 ...

  9. 用安信可ESP32-G开发板制作一个简易路由器

    文章目录 一.前言 二.中继路由器 三.以太网路由器 四.源码及使用方法 联系我们 一.前言 本文介绍用安信可ESP32-G开发板制作一个路由器,有两种玩法; ESP32无线连接路由器后开启热点,周围 ...

最新文章

  1. Oracle 表空间数据文件迁移图解
  2. 现代谱估计:Blackman-Tukey 相关图
  3. setup.s 总结——Linux-0.11 剖析笔记(四)
  4. 浅谈电商网站开发中用户会话管理机制的设计和实现原理
  5. 【图像处理】——特征匹配(SIFT特征检测器+FLANN特征匹配方法+KNN近邻最优匹配筛选)——cv.xfeatures2d.SIFT_create()sift.detectAndCompute
  6. ★LeetCode(448)——找到所有数组中消失的数字(JavaScript)
  7. python2打印字符串_Python 3基础教程2-打印语句和字符串
  8. 可视化技巧:分类问题中的决策面画法 (直观理解plt.contour的用法)
  9. Xilisoft DVD to iPhone Converter使用教程
  10. CGI + FastCGI(PHP-FPM)联系与区别 【图解 + 注释】
  11. 基于C# 的 WinForm 开发 (一、C# 快速入门)
  12. 新一配:iPod及其系列产品【转载】
  13. 网络工程师--网络规划和设计案例分析(1)
  14. Premiere Pro CC2018安装资料及安装教程
  15. OpenCASCADE:Qt OCCT 概览示例
  16. sqlServer2014用sql server身份认证登录
  17. html标题(heading)
  18. java实现录屏_java录屏详细代码
  19. 二手闲鱼源码 php 如何搭建
  20. 副业项目:抖音车载U盘赚钱项目

热门文章

  1. Laravel服务提供者在平台短信服务中的应用
  2. 通过fiddler和逍遥模拟器模拟抓包android手机
  3. thymeleaf模板引擎基础使用(转)
  4. 【转】去掉换行符的几个方法
  5. //监测网络状态(AFNetworking) 服务端 客户端
  6. 今天我开通了51cto的博客
  7. centOS 6.0无法运行dump指令的解决方法
  8. 转载:Android Display架构分析--侧重高通平台
  9. 恰当地利用中间结果集
  10. CentOS 5.4 制作 Python 2.6 RPM 包的方法