神经网络视觉循迹小车

        大四狗下学期想学习机器学习、深度学习等相关知识,于是毕设想做些神经网络相关的东西,因为本科期间参加过大学生智能车竞赛,于是想利用小车,通过神经网络,实现自主学习,完成在规定赛道上的行驶。现在在这里,记录,归纳,整理下过程,同时也留点资料给实验室的学弟学妹们……持续更新……

        在传统的视觉循迹小车中,主要是通过摄像头获取赛道图像,然后对图像进行处理,得到偏差,然后根据偏差控制小车行驶。小车之所以能运行,关键在于,他会根据人为设定好的判定条件,去抉择下一步该怎么做。人为设定的判定条件的好坏,决定的车能跑成什么样。而神经网络,是机器学习的一种方法。通过神经网络实现循迹功能,与传统的方法比较,他更可以被说成是一种自主学习的方法。整个思路大致如下,首先通过摇杆操纵小车运行一段时间,收集训练数据(包括图像,摇杆值),然后通过神经网络训练出一套模型,以后就可以根据这个模型,预测、控制小车行驶。

        本人从最简单的做起,从BP神经网络学起,后面学习其它更快更新的算法,例如近几年特别火的CNN……(文章后面也会写出一些机器学习的笔记心得)

       http://www.tudou.com/programs/view/nr8PE4RkWTY (这个是我用BP神经网络做的效果-0-)

       整体框架:

       1、小车:主控芯片K60,但K60运行速度有限,于是这里只用作小车的控制驱动,不涉及图像处理,神经网络等算法。(关于小车,没什么要求,只要能通过某种方式控制就好,我用的是比赛时候的车模,也懒得重新组装了,就是往上加树莓派,加电源,所以导致太重了……太重了就不好控制了2333333,如果只是简单学习的话强烈建议用些简单的,轻的,好控制的,什么adurino小车啊,调起来不用考虑那么多因素)

       2、树莓派+camera :可以作为传输中介,将图像传给PC,通过PC进行训练预测等。也可以直接作为运算终端,直接在树莓派上进行训练,预测等。我这里是用作前者,因为用电脑开发比较快,写代码什么的都比较方便0-0:(ps:树莓派我用的是pi3,官方系统是基于debian的linux系统。刚开始用linux肯定各种陌生,然后就各种百度,谷歌的查。现在官方的桌面系统已经很好用了,但终究到底还是得通过命令行控制。摄像头用的是官方的,派上有专门接口,直接调用官方库。用usb的摄像头也行,可以通过opencv调用)

       3、PC电脑:和树莓派通过wifi连接在同一个局域网内,通过socket服务传输数据。同时可以和小车主控板通过蓝牙连接,发送指令控制小车

       4、手柄:通过手柄遥控小车,收集训练数据,同时记录手柄的摇杆值,即学习的标签

       

       整个程序用python语言开发,主要python比较容易上手,而且各种库方便调用。主要用的都是opencv,opencv里有大量成熟的库,BP神经网络就是调用的是opencv的ml类,简直不能再简单了,几句话就能搭建好了一个网络…(往后打算自己写个BP,这样方能更深入学习,至少看起来不是很难写0-0)

作者:刘宇鸣
链接:https://zhuanlan.zhihu.com/p/26307292
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

-------------第二次更新-------------

一开始在各大报道论坛上听到神经网络都是被唬住的,后面认认真真看了点资料,似乎懂了那么一点点……人工神经网络(Artificial Neural Network,即ANN),就是通过模仿神经元的活动,获得一个可以变形为任意形状的任意函数。比如我们人类从小辨别猫狗,一开始我们肯定不知道这是猫还是狗,辨别准确率为0。然后家长告诉你,这只是狗,汪汪汪……这只是猫,喵喵喵……其实你还是啥也不知道。然后有了下一次,家长继续告诉你,这样的是狗,那样的是猫,汪汪汪的狗让你害怕,喵喵喵的猫让你开心。然后你的大脑神经网络慢慢在训练出一个能辨别狗和猫的模型。可能某个阶段你认错了猫,家长们又告诉了你这是狗,这样你对狗的认识又深了。随着你的成长,见着猫狗的次数不断增加,你辨别猫狗的准确率也就越来越高。直到长大,你基本能一眼就辨别出猫和狗了……这是一个监督学习的例子,动物的样貌,声音等等特征就是神经网络的输入,辨别出是猫还是狗就是输出。而你的大脑慢慢会辨别出猫狗,这个就是学习过程,至于你的大脑是如何通过神经网络学习会的,具体是识别了哪些特征,我们不知道,也难以解释。神经网络就好比一个黑箱子,我们只需要确定输入输出,然后搭建网络,训练出一个模型,尽可能让输出对应上输入,让他们满足一定的映射关系。这个关系可能是线性,也有可能是非线性的,但我们都不需要理它。以后我们就用这个模型去预测其他的输入。使用不同的神经网络,比如BP神经网络,CNN,RNN得到的模型是不一样的,效果也不一样,也各适用于不同的问题,不同的场合。

我这里这开始用的就是BP,因为简单,好理解,对于我这种刚入门的人来说。首先对于我这个小项目来说,输入就是摄像头采回来的图像,我的输出直接小车的舵机控制量。基本实现的是end-to-end(端对端)(ps:英伟达去年大约这个时候发布了一个无人驾驶系统DAVE,就是end-to-end,人家这真车实战的,仰望高端玩家 End-to-End Deep Learning for Self-Driving Cars



……未完待续……

       

        

        

你可能感兴趣的:(神经网络视觉循迹小车)