【深度学习-搭建自动分拣黄瓜的系统】

电子专业 徐 自远 1074℃

【深度学习-搭建自动分拣黄瓜的系统】

准备工作

材料准备

  • ArduCam 扩展板 V2
  • OV2640 摄像头模块
  • MicroSD存储卡(4G以上)
  • Arduino / Genuino 101 开发板
  • 手机支架

开发板程序烧写

下载和安装库文件

首先我们下载和安装好相应的库文件:

  • CurieNeurons Pro
  • 可以在 CurieNeurons Kit 中找到。
  • ArduCAM 和 UTFT4ArduCAM_SPI
  • 可以在 ArduCam 官网下载。

下载完成后解压即可看到相应的 ArduCAM 和 UTFT4ArduCAM_SPI 库文件夹,在库管理器中分两次,选择和安装这2两个库文件夹即可。

库文件配置

在库文件所在目录 ArduCam/memorysaver.h 中,根据提示将下面两段代码取消注释:

#define ARDUCAM_SHIELD_V2

#define OV2640_CAM

完整文件可以直接在这里下载:memorysaver_h.zip

你可以直接下载这个压缩文件,将解压后的 .h 文件替换进去即可。

这里配置的意思是注明我们所使用的扩展板和摄像头模块型号。

程序上传

CurieNeurons Pro 所提供的案例可以帮助你快速了解使用方法:

文件 -> 示例 -> CurieNeuronsPro -> CurieNeurons_ArduCam_Demo_3Feat

这个示例需要使用 ArduCam扩展板 上的 Shutter 按钮,但不便于固定机位操作,所以我们对其进行了简单的改写,直接在串口监视器界面对其发送操作指令和监视结果。

程序源文件下载地址在这里:CurieNeurons_ArduCam_Demo_3Feat_num2.zip

你可以直接打开,然后上传到 Arduino/Genuino 101 中。

点击上传按钮开始上传。

正在上传中……

如果下方的信息框中显示如下信息,就表示你需要按一下板子上的 MASTER_RESET 按钮:

Flashing is taking longer than expected

Try pressing MASTER_RESET button

上传成功后,信息框中会显示:

Starting download script…

SUCCESS: Sketch will execute in about 5 seconds.

接下来我们就可以,断开 Genuino101 的电源,进行下一步操作了。

硬件组装

首先我们组装 Genuino 101 和 ArduCam 扩展板:

再将 MicroSD 卡装入 ArduCam 扩展板上的 MicroSD 卡插槽中:

再将 OV2640 摄像头模块连接到扩展板上:

最后再将手机支架固定上去:

组装好的硬件一览:

然后,我们把组装好的这一套放在三家脚架上

黄瓜样本准备

首先,我们要准备一些黄瓜作为学习样本

大致把他们分为4类:

  • 好的-黄瓜
  • 坏的-黄瓜(弯的)
  • 好的-荷兰黄瓜
  • 坏的-荷兰黄瓜(蔫的)

Curie 学习

首先,用数据线连接 Genuino 101 ,然后打开电脑上的 Arduino IDE。

然后打开“串口监视器”:

此时连接上串口监视器后,设备会进行初始化,出现下面的界面后表示已经准备就绪:

现在,我们把准备好的四组黄瓜黄瓜样本给 Genuino 101 学习:

比如这个“好的-黄瓜”,我们让 Genuino 101 学习为 分类1(cat=1),需要进行如下操作:

首先将黄瓜放到镜头中的画面中央区域,尽可能保证学习样本被包裹在屏幕中闪烁的红框中。

然后,在串口监视器中输入“ 1 ”:

点击发送后,Genuino 101 会自动进行数据的采样和学习,并返回目前所占用的神经元数量:

完成后,会自动进行识别:

可以看到已经开始正确识别了。

以此类推,我们将四种黄瓜依次给 Genuino 101 进行学习:

  • “好的-黄瓜” 学习为 分类1(cat=1),发送“ 1 ”;
  • “好的-荷兰黄瓜” 学习为 分类2(cat=2),发送“ 2 ”;
  • “坏的-黄瓜” 学习为 分类3(cat=3),发送“ 3 ”;
  • “坏的-荷兰黄瓜” 学习为 分类4(cat=4)发送“ 4 ”。

为了降低画面背景对识别结果产生的干扰,我们还可以发送“ 0 ”,让 Genuino 101 将背景图像数据学习为 分类0 (cat=0 / Forget),即消除影响,这个操作将不会占用神经元:

建议的学习流程:

学习一遍所有黄瓜样本 -> 学习一遍背景 -> 学习一遍所有黄瓜样本 -> 学习一遍背景

这样,基本的学习就完成了。

效果测试

让我们测试一下识别的效果:

我们把好的黄瓜放进去:

我们可以在串口监视器中看到,已经正确识别了。

我们再把好的荷兰黄瓜放进去:

再把坏的黄瓜放进去:

把坏的荷兰黄瓜也放进去:

全部识别正确!

如果识别出错的也很简单,直接在串口监视器中再教它一次就好啦。

技术解析

图像数据是如何给 Curie 进行学习的?

我们让 Curie 进行学习的区域是整个画面中间 121*121 像素大小的区域,基于 CurieNeurons Pro (居里神经元开发工具专业版)的高级功能,在这个案例中每次的学习和识别操作,都有3组分类器,将这个 121*121 像素原始数据提取为下面的 3 个特征,让 Curie 学习:

  1. 将 121 * 121 的数据分割成 11*11 像素大小区块,再对这些区块进行平均化处理的数据组;
  2. RGB 直方图;
  3. “Composite Profile“

翻译成人话就是:

我们下达的每一个学习指令,都会同时进行以下三种信息的学习,识别时也会同时通过以下三种信息进行判断。

  1. 形状、轮廓信息;
  2. 物体颜色信息;
  3. 综合信息。

识别时,当3个条件中的2个条件满足时,即确认识别结果。也就是我们在识别结果中所看到的 “ matches=* ” 信息:

CurieNeurons 与 TensorFlow 原案例的对比

TensorFlow 原案例的相关信息

图像识别部分所使用的硬件:

  1. 树莓派3
  2. 上方摄像头
  3. 下方摄像头
  4. 侧面摄像头
  5. Windows 台式个人电脑

训练的样本数量和时间:

  • 7000张图片
  • 总共2~3天时间完成训练
  • 约合每张图片训练时间需要 24.7秒~37秒。

训练的样本质量:

  • 80 * 80 像素
  • 学习的特征仅为形状相关的信息

CurieNeurons 案例相关信息

图像识别部分所使用硬件:

  1. Genuino 101
  2. ArduCAM 扩展板 + 模块

训练所需时间:

  • 神经网络的学习和识别只需要几纳秒(ns,1纳秒=0.000000001秒);
  • 每组数据的处理、传输和学习时间总和为毫秒级;
  • 7000张图片以最慢每张耗时500毫秒来计算,只需要58分钟即可完成全部样本的学习。

训练的样本质量:

  • 121 * 121 像素
  • 所学习的样本信息
  • 形状、轮廓信息;
  • 物体颜色信息;
  • 综合信息。

CurieNeurons 案例为什么可以这么快速、高效?

Curie 中的神经网络之所以可以在几纳秒(ns,1纳秒=0.000000001秒)的时间内完成学习和识别,得益于 General Vision 的 NeuroMem® 技术,完全将神经网络固化到了芯片中,其独特的 Daisy Chain ,使每个入神经网络的数据能够同时到达每个神经元中进行处理。

所有这些 Curie 隐藏超能力,只有依靠 General Vision 发布的 CurieNeurons Pro (居里神经网络工具专业版)才可以完全释放

http://m.toutiao.org/group/6414820502485483777/?iid=9709044404&app=news_article&tt_from=android_share&utm_medium=toutiao_android&utm_campaign=client_share

 

转载请注明:徐自远的乱七八糟小站 » 【深度学习-搭建自动分拣黄瓜的系统】

喜欢 (0)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号