Caffe框架下OPenMV的机器学习(一)初探OPenMV神经网络

1.  OPenMV 可以进行机器学习?

OPenMV 是一款可编程的摄像头,主要使用MicroPython语言,实现基本的图像处理。

你可以把OPenMV当成一个工具,也可以把它当成一套产品,开源的编程环境能为进一步向机器视觉领域迈进奠定基础。

OPenMV 对于入门计算机视觉的小白来说就是一个你数学方面的救星,因为摄像头内置有许多痛的的图像处理算法,我们使用起来十分容易,适合快速入门,而通过观察各种函数运行后的变化,也能加深我们在图像处理方面的理论学习。

对OpenMV的介绍不必多说,这里推荐一个学习OPenMV的网站:星瞳科技OPenMV教程

言归正传,OPenMV能用于机器学习呢?

教程给我们的答案是:

不过 淘宝的亲亲怪 也给出了不一样的解释:

通过了解知道,最近两年机器学习越来越火,OPenMV函数库中已经加入了神经网络nn库和Net库,这一壮举极大地扩展了OPenMV的功能与实用价值,所以我决定就用OPenMV来跑机器学习

本次学习常用到的函数文档如下:(文档由星瞳科技OPenMV提供)

nn 神经网路: https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.nn.html#

Net 类:https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.nn.html#net

我们查阅相关例程,可以看到,OPenMV机器学期会用到一个叫CNN网络库的东西,通过查阅相关资料,我们基本了解它的工作机制,这时你会发现,我们的机器学习之旅,已经渐渐开始了。。。

本小节得出的结论:OPenMV可以借助卷积神经网络,完成简单的机器学习!!

2.  OPenMV例程测试

打开 OPenMV IDE 给出的几个例程:

我们找到了8个机器学习相关的例程,依次按照 教程 的方法导入对应的CNN网络库(保存到OPenMV SD内存卡),运行例程,关键时要修改以下语句:

img = img.binary([(230, 130)]) # 调整阈值,使二值图像(只有0,1,即黑白)清晰

此处应该注意,如果网络库识别结果总是一个错误结果,则考虑将图像阈值调整,使捕获图像从白底黑字更改为黑底白字,直到识别结果为多个字符连续变换(可能不准确)

下面是对官方提供的几个CNN库的测试截图:

fnt-chars74k.network  的测试结果如下图:

Chars74K 数据集是一个经典的字符识别数据集,主要包括了英文字符与坎那达语(Kannada)字符。数据集一共有74K幅图像

cifar_fast.network  的测试结果如下图:

        

在牺牲一定准确率的条件下,勉强可以识别出一些物体

lenet.network  的测试结果如下图:

lenet.network  由 MNIST数据集 训练而成,用于识别手写数字

                    

                    

经测试对手写数字的识别效果不理想,反而对打印的数字比较敏感(结果会受当时光线的影响,弱光环境下,准确率大幅降低)

综上测试结果,自带的神经网络库并不适用与我们各种环境下的对象识别,下一步我们计划训练自己的神经网络库

3.  训练适用于OPenMV的神经网络

由于商业原因,国内的公司也许不会给我们提供训练神经网络的方法,我没找到,很长一段时间,我都在想尽一切办法训练网络,还好论坛上有答主回答了有关训练网络的问题。链接将我引导向笑脸检测识别的例子上,在OPenMV的英文官网中,我找到了网络训练的例子:

其中说明了网络训练的方法

目前 OPenMV 只提供Caffe模型到network网络的转换,未来可能会支持TensorFlow,但目前不行。通过Caffe框架学习,我们最终的目标肯定是得到 ******.network 的网络库文件

训练网络的主要步骤如下:

  1. 配置环境,安装Caffe
  2. 采集数据集
  3. 训练网络
  4. 量化模型
  5. 将模型转换为二进制格式
  6. 在OPenMV上部署模型
  7. 运行网络
  8. 故障排除

当然,在 OPenMV源码  (GitHub上,开源可下载)的文件夹中我也找到了对应网络训练的方法:

### Train A Custom Net
If you'd like to train your own custom CNN you need to assemble a dataset of hundreds (preferably thousands) of images of training examples. Once you've collected 
all the training examples save the images per class of training examples in seperate folders structed like this:
* data/
    * 0_some_class/
    * 1_some_other_class/
    * 2_etc/

Once you've built a folder structure like this please refer to the examples above to:
1. Create a labeled training dataset using augment_images.py and create_labels.py.
#首先用augment_images.py 和 create_labels.py 生成训练集的标签
#生成标签参考https://medium.com/@alexrachnog/using-caffe-with-your-own-dataset-b0ade5d71233
2. Create training and test lmdb files.
#使用caffe自带的函数处理train 和 test 的lmdb数据集
3. Create a mean.binaryproto file.
#创建 均值二进制文件 
4. Train the network (copy how the smile train.sh script and solver/train/test protobufs work to do this).
5. Test the network (copy how the smile test.sh script and solver/train/test protobufs works to do this).
#编写脚本训练网络,参考train.sh 和 test.sh
6. Quantize the network.
#量化神经网络
7. And finally convert the network.
#将神经网络转化为指定格式

### Known Limitations 
1. Parser supports conv, pool, relu, fc layers only.
2. Quantizer supports only networks with feed-forward structures (e.g. conv-relu-pool-fc)  without branch-out/branch-in (as in inception/squeezeNet, etc.).
3. See [ARM ML-examples](https://github.com/ARM-software/ML-examples/tree/master/cmsisnn-cifar10) for more information.
4. Source Code https://github.com/ARM-software/CMSIS_5/tree/develop/CMSIS/NN

了解了大致方法后,我大概有了一个训练网络的思路,从下一章开始,我将介绍如何在windows上借助Caffe框架训练网络

 

参考资料:

Low Power Deep Learning on the OpenMV Cam powered by the Cortex-M7 Processor

工程师亲笔丨如何使用 CMSIS-NN 在 OpenMV 上部署 Caffe 模型?

  • 39
    点赞
  • 263
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: OpenMV神经网络数字识别是一种基于OpenMV开发板和神经网络算法的数字识别技术。通过OpenMV开发板的图形处理和计算能力,结合神经网络算法,可以实现对数字图像的识别和分类。 OpenMV神经网络数字识别技术的核心是神经网络算法。神经网络是一种模仿人类神经系统的计算模型,它能够自动学习和优化,适用于图像、语音、自然语言处理等领域。在数字识别中,我们可以将输入的数字图像通过卷积神经网络等算法进行特征提取和分类,得出数字识别结果。 通过OpenMV开发板和神经网络算法结合,可以实现高速、准确的数字识别OpenMV开发板具有高性能、低功耗、体积小等优势,可适用于嵌入式设备和智能物联网应用场景。同时,OpenMV神经网络数字识别技术也可以应用于手写数字识别、车牌识别、人脸识别等领域,具有广阔的应用前景。 总之,OpenMV神经网络数字识别技术能够结合神经网络算法和OpenMV开发板的图形处理和计算能力,实现数字图像的高速、准确识别,具有较好的应用前景。 ### 回答2: OpenMV 是一个基于微控制器的计算机视觉开发平台,可用于快速开发各种视觉应用程序。OpenMV还支持基于神经网络数字识别,可以用于数码识别和基于视觉的控制系统。 神经网络数字识别是通过神经网络算法对图像进行分析和识别的过程,通过建立一个模型来对数字进行分类,在实际应用中可以用于自动化分类、识别和检测。OpenMV神经网络数字识别功能采用 TensorFlow Lite 运行时来执行,在RAM内运行,所以速度非常快。同时,它还支持灰度或彩色图像的输入,以及通过USB和串行端口的实时图像传输。 对于数字识别应用程序,首先需要收集用于训练和验证模型的样本数据集,并将其转化为OpenMV内置的 .tflite 文件格式。然后,使用OpenMV提供的API来加载并执行此模型,即可在实时流中进行数字识别。 基于OpenMV神经网络数字识别功能,可广泛应用于自动售货机、智能门禁、物品识别等各种场景,提高了自动化识别识别技术的有效性和准确性。该功能操作简单,易于配置,可高效地实现各种数字识别应用程序的开发和部署。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值