首页 / 新闻 / 正文

深度神经网络帮您监视宠物拆家,这牛逼了~

时间:2019-02-11 04:40 飞飞的小妙招

摘要:北京时间2019-02-11 04:40 飞飞的小妙招为您报道关于【深度神经网络帮您监视宠物拆家,这牛逼了~】的具体情况和说明,让www.hqx666.com新闻频道的飞飞的小妙招君以图文形式为您慢慢道来,本文关注焦点《》。

大家好,我叫徐珂靖,是个骨灰级工科男。

本人同时也是“哈市土猫之家”的一员。关于“土猫之家“”,我在过去的帖子里也曾介绍过。这是个保护流浪猫狗的民间组织,倡导领养代替买卖。我在土猫之家已经领养到一只小喵咪了,现在是个幸福的“铲屎官”。如果你也是个资深“猫奴”,就请加入我们吧

我以前也用树莓派做过猫脸识别的应用,但是这个算法有些局限性,分类器是对猫咪正脸做的,不太适合多种不同物体和不同角度图像的检测。所以我一直在考虑升级它。

土猫之家群里有位大姐,特别有爱心,收养了好几只猫。但是大姐最近一直被一件事情困扰,心理已经快奔溃了。

爱小动物的人,也热爱生活,家里往往也养一些花花草草,然而猫咪却总是喜欢对这些花草撒野。

一天,大姐回家,发现亲手种的小花被“斩草除根”了。

猫咪狡辩说,这棵花占我晒太阳的地儿了,我帮你把它拔掉。。。是花先动手的。

当时,大姐的心理还没奔溃,于是把眼泪咽下,坦然面对人世间的挫折。

然后过了几天,猫咪又闯祸了。。。。

猫咪说,这个花盆压到架子了,我把它推开。。。是花盆先动手的。。。

群里也有不少养狗的网友。

有个网友喜欢大狗,群主送了那个网友一只哈士奇,然后网友的家就被拆了。。。。

真的被拆了。。。。

二哈说,麻麻,是沙发先动手的,真的是沙发先动手的!

群主现在也是鸭梨山大,现在还得赔人家沙发。

各位“铲屎官”们,遇到这种情况,往往也只能忍气吞声。

因为看见“主子”们那一脸无辜的小表情以后,一般就不忍心惩罚了。但是铲屎官也迫切地希望能有个产品,帮他们时刻监视是否有“主子”闯入危险区域,好提着鸡毛掸子上去抓个“现行”。

本人很早就想开发一个自动检测猫咪和狗狗靠近沙发或花盆这些“易损物品”的小装置,大概的思路是用摄像头捕获图像,然后用计算机识别图像里的花盆或沙发,如果识别到有猫或狗进入图像区域了,就给个反馈。这里需要多物体多尺寸的检测,这种活儿比较适合让深度神经网络(DNN)来做。

但是遭遇了两个问题:一是当时主流的深度学习算法对计算机性能的要求较高,不适合在低性能的移动平台上跑;二是当时的嵌入式小电脑的硬件配置也确实有些寒酸。

现在是2019年了,我们已经有了很多优秀的人工智能算法,比如Mobilenet网络结构、SSD目标检测框架。其中,Mobilenet是提取特征的网络。然后基于这些特征,再判定属于哪种分类。而SSD就非常适合这种需要用多种特征来解决多物体多尺寸目标检测问题的应用场景。

小明同学表示已经听不下去,他对具体的机器学习算法的讨论不感兴趣。他要看他能看得懂的。

小明:别墨迹,赶紧进入正题!

小伙伴们,请再给我“一分钟”。

我再简要说一段关于这个算法的介绍,后面会马上跳入到实际测试。

2016年,Liu发布了SSD算法。该算法利用不同卷积层的特征图来综合识别不同大小的不同物体。算法的主网格结构是VGG16,有5个卷积层。输入一个300x300的图片,SSD算法可以在英伟达泰坦显卡上跑到大约60帧每秒。对于普通的移动版低功耗x86处理器,也能达到5帧每秒,可以胜任日常应用。SSD检测框架的示意图可以参考Liu的论文。

Liu的《SSD: Single Shot MultiBox Detector》是公开发表的。如果这个SSD算法对您有帮助,写文章时请引用一下原作者,喝水不忘挖井人嘛。这也是对原作者的鼓励。

本人对这个算法也是非常满意的。下面给大家看看实际测试例子。我们就用刚才那几张宠物闯祸的照片当神经网络的处理素材吧。

先是那个打翻花盆的橘胖

然后是那只把沙发拆掉的二哈。

在上面两幅图中,猫咪、狗狗、盆栽和沙发都能正确识别,识别准确度较高,而且算法鲁棒性也比较好。

下面再说说硬件。在这几年里,嵌入式计算机硬件也有了很大发展,处理器从最初的ARM Cortex A7、ARM Cortex A53,到现在的ARM Cortex A72。比如,今年友善之臂推出了搭载瑞芯微RK3399处理器芯片的NanoPC T4和NanoPi M4,性能非常强劲。

本人已经对NanoPC T4做过性能评测了。

我们回过头来,看看RK3399芯片跑上面那个橘猫和二哈的识别例子。程序运行截图在这里,处理帧率大约能到2。

算法调通了,把输入源从图像文件换成摄像头就可以实时监控了。然后控制输出也做个接口,终端打印文字或GPIO电平输出。

我已经把这套设备做出来了。使用友善之臂开发团队赞助的NanoPC T4+云汉电子社区送的小礼物(USB摄像头)+激光LED,组成了自动把猫咪或狗狗驱离花盆或沙发的装置。

但是,群里的“铲屎官”们觉得激光可能会伤到“主子”;另外,不如亲手打“主子”的屁股过瘾。所以我把程序反馈改到了终端打印上了,剩下的程序反馈回路由各位“铲屎官”来完成。只要终端输出了“Warning”字样,就请提起鸡毛掸子上去问罪吧。

这套设备的程序代码,我已经使用了别人的开源计算库(感谢前人为我造的车轮)。

所以,遵循GNU的契约精神,我也会把我的项目给大家公开;虽然我还打算基于这套方案去参加阿里云和庆科的AI比赛的。

说到比赛嘛,重点不是大家互相碾压了啦,而是为了促进技术交流和进步。

我是来比赛的。但我不是来抢第一名的,而是来交朋友的。

我只是个海边拾贝壳的宝宝,拾到好看的贝壳,就跟大家分享。

下面开始上重点,按我这个教程,保证你15分钟内快速把这个猫狗入侵检测设备做出来。

小伙伴们快拿出小本本,赶紧记笔记,我要开始上课了。

第一步,写个cpp代码。

这是主函数部分。其中microtime()是计时函数,我用来测量计算速度的。ssd()是目标检测函数。

microtime函数的具体形式。这个很简单,就是个提取时间的小函数,计时到微秒量级。

ssd函数的具体形式。注意第41行,NanoPC T4插上云汉社区送的USB 摄像头时,dev目录下可以看到video0、video1和video2,我们要用的是video1,这个是USB摄像头。再看第47行,我先把while循环的括号折叠起来了,后面继续说。

下面把while循环展开给大家看。在这个while循环里,不断地从摄像头读取图像(第51行),然后把图像标准化并输入SSD算法框架(第52行),算法推理(第53行)。55行开始,是一些花里胡哨的功能,我把检测结果给可视化了。第69行到第72行是为了把默认的浮点型的准确度系数转化为百分比形式然后转文字。第77到101行是对各种检测到的目标使用不同颜色的框和文字来标注;猫咪或旺用红色,盆栽或沙发用绿色,人或自行车(我以后会做车辆识别,但是在这里,自行车没有用)用青色,其他目标都用蓝色。第105行是个猫狗触发,前面如果检测到了,这里trigger肯定会大于等于1,让就保存“罪证”图片,并在终端打印“Warning”字样。112-113行测量计算速度。最后114行把可视化结果显示在一个叫test的窗口上。

第二步,编译并执行。代码如下,一条条执行。


查看更多相关资讯
今日要闻