祝大家有美好的一天。
小小的Raspberry很棒。 在过去六个月中,我在几个项目中使用了Raspberry ZeroW。 受制于原型制作的简单性并推开各种想法。 现在,这是一个可选的问题:该设备是否会拉起完整的卷积网格? [剧透-拉,但有有趣的细微差别]。 谁在乎这个话题-欢迎来到猫。 注意,会有很多猫!

为什么是Raspberry神经网络?
不知何故,我在Raspbery Zero W上收集了一个简单的视频陷阱,用于观察该国动物(主要是猫)的夜生活。 该代码很简单并且运行良好。 对于视频照片检测,使用了具有红外照明的相机,例如
“ Raspberry Pi夜间版本相机” 。

该代码的本质是拍摄两个连续的帧,逐像素进行比较,如果更改后的像素数大于某个阈值,则开始录制10秒的视频。 我不会在这篇文章中提供代码文本,如果有人感兴趣,请在评论中写下,我可以将其放在下面。 主要功能是在0.2秒内将两个帧进行比较,至少可以捕获快速事件。 好吧,当然,快速比较这些框架。
然后,提出了将简单的神经网络固定到算法的想法,从而只有在可靠地确定了对象类别的情况下,才有可能在捕获的帧中确定对象并开始视频录制。 这样可以消除视频陷阱中的误报。 这些是由于移动的物体(例如,草或树枝)或摄像机场景的锐利照明(例如,车窗中的灯打开或灯熄灭)引起的。
在Raspberry上放置什么网格?
幸运的是,在预装的Python(在我的情况下是3.5.3)和广泛可用的OpenCV(我使用3.4.3)下,几乎可以放置任何网格。 不幸的是,由于设备的计算能力有限,因此选项列表很小。 实际上,您只能从“ light”选项中进行选择:
1. SqueezeNet(
此处为示例代码)。
2. YOLO Tiny(
在此 )。
3. MobileNet-SSD(
此处 )。
4. MobileNet_v1_224(
此网格上有一个精彩的
视频,介绍了对象检测器的操作 )。
在所有这些情况下,它都贿赂了使用在实体数据集上预先训练的模型的机会,从而减轻了自己对独立数据集的所有困扰和后顾之忧,并避免了对其进行神经网络训练。
1号申请人的灵感来自于
声称的高识别精度以及适度的加权因子大小。 此外,在Internet上的简短搜索导致出色的博客
Adrian Rosebrock进行了详细评论,并描述了在Raspberry上实施深度学习的几种选择。
这里的代码用于测试SqueezeNet的功能。 在网站上填写表格后,作者将模型的权重和文本表示形式发送到电子邮件。 顺便说一句,如果您尚未安装OpenCV,则可以在他的博客中找到操作算法。 另外,还有“超频”代码的示例,以加快模型的工作时间等等。 尊重Adrian,这是一个非常酷的资源。
好吧,让我们运行代码,在第一张图片中获得惊人的结果!

图片中的猫被定义为波斯语,概率为99%。 实际上,他不是波斯人,而是英国的长毛猫或汉兰达。 但是对于一个拥有1000个班级范围的模型,您可以说,触及了靶心。 为了方便起见,我将神经网络的主要结果直接放在照片中。 这是5个最可能的类别,第一个是最可能的类别,第二个是下一个最重要的类别,依此类推。
顺便说一句,模型在我的“零”上计数对象类达6.5秒。 如果您相信Adrian的数据,那么在其帖子中给出的图片(理发店,眼镜蛇和水母的照片)中对Raspberry Pi B +的计算将花费大约0.92秒。 我愿意相信完整版的Raspberry毕竟在处理器中具有4个内核。 我相信每个人都知道零只有一个(((
似乎您将不得不忘记在“零”上实时定义对象类。 顺便说一句,我必须承认,花一秒钟的时间在“完整” Pi上运行模型也不是最终的梦想。
但是,让我们继续测试模型。

这只猫改变了身体姿势,并损失了其先前的“波斯人”多达7%的体重)。 但这当然是个笑话,总的来说,该模型的工作非常出色。 正是在这个地方可以完成,但是我想稍微简化一下模型的任务。 让我们继续练习...猫。 但是我们将收集一些框架,例如,猫不是以经典姿势坐着,而是睡觉。 所以走吧

在这张照片中,猫被定义为安哥拉猫,但这并不准确。 显然是因为她对离开水槽的强迫性要求感到恼火。 好吧,神经网络错了,好吧,到底谁没有发生?

原来,我家住着一个蓬松的足球。)是的,碰巧人们根本不像乍看起来那样。 猫与神经网络的战斗发生了严重的转变。

哇 现在她是西伯利亚雪橇犬。 告诉我那只猫还在计数)

似乎这两个中的一个显然被击倒了,这显然不是猫。 现在,它被神经网络定义为纺锤体(虽然只有8.5%),但仍然有选择是小猎犬,逆戟鲸,岩石巨蟒或臭鼬。 不是猫,而是女人是个谜!

拜托! 这仍然是逆戟鲸! 是的,是鲸类动物的海洋哺乳动物。 由于某种原因,我回想起遥远的童年时的台词:
“这个故事没有秩序,
这是一个错误,一个错字! 有人
违反所有规则
在童话中,他重新排列了字母,
渡轮
“ CAT”上的“ KIT”
相反,“ KIT”上的“ CAT”!
锣响了,裁判停止了比赛)

在第二轮中,狡猾地戴着眼镜的猫以34%的概率通过了波士顿斗牛犬。 还是法国人。 似乎神经网络尚未从第一轮的失败中完全恢复过来)

好吧,终于! 猫被定义为暹罗猫,可能性高达66%! 太棒了,SqueezeNet! 严重的是,似乎在原始数据集中,没有撒谎但坐在猫中的照片占了上风。 说谎的大多是狗)

猫具有盒子形状的能力甚至使人类感到困惑,更不用说神经网络了。 浸入盒子会使识别精度降低多达40%。

所以,等等……而且,这似乎通常是被禁止的招待会。 躺在猫旁边的电脑鼠标完全混淆了神经网络。 现在我们的猫是老鼠! )
因此,在整个神经网络中展示了11张猫的照片,其中只有5张被正确识别,而且在三例中,概率超过50%。 绝不减少SqueezeNet作者的工作。 这是一个坚固的网络,具有非常广泛的对象类别和相对较低的资源需求。
该文章当然是喜剧性的,但是从获得的数据中可以得出相当实用的结论。 必须谨慎使用预训练的神经网络,并在计划使用神经网络的任务的真实图像上检查它们。
关于为Raspberry选择最佳神经网络的问题-到目前为止,这个问题仍然悬而未决。 我继续进行实验,如果听众对此主题感兴趣,我将分享进一步研究的结果。 只是第一步的结果非常有趣,以至于我真的很想分享。
感谢您阅读到最后。 祝你好运,并祝您工作愉快!
UPD:有关在Raspberry Pi Zero W上运行神经网络的工作代码,请参见本文的
第二部分 。