好久没有更新。最近又学到不少知识,记录一下。8月份,试用了 end-to-end 的 DCNN 来学习人类驾驶。但最终的比赛中,仍是 rule-based 结合 深度神经网络效果是最快的。
CNN
为了识别路牌,学习了CNN。使用这个网络可以很好的对图片进行分类。
1. 数据的准备
2. 训练和验证
3. 性能测量
4. 用于目标检测
Faster R-CNN
这个是为了目标检测。从知道这个技术到跑通,只用了大约两天的时间。身后有狗,就是跑的快。
跑通这个网络的主要要解决的问题是:如何使用自己的数据,建立 Fster R-CNN模型。网上有不少人写出来自己的过程,我写出我的过程。
1. 找到合适的开源代码
https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
需要在Windows下运行,并使用的是TensorFlow。支持这个要求的只有这个项目。
2. 建立环境
这个开源项目必须要使用Python 3.5.0。手工安装后,在安装相关的 pip 包时,遇到问题。一个包没有合适的源。所以,转而使用 Anaconda。
Anaconda 最新的版本里,建立 Python 3.5 环境时,安装的已经是 Python 3.5.X,而不是 3.5.0。 所以又向前找 Anaconda 的旧的版本。它的 2.4.0 和 2.5.0 里安装的是 Python 3.5.0。
3. 明确需要准备哪些数据
为了降低工作量,也就是说,不要修改代码,我们最好顺从项目本身对数据规格的要求。包括,文件名,XML文件的格式,目录结构等。对于 Faster R-CNN来说,有两套数据集,也就对应了两套数据格式: MS Coco 和 VOC2007。
这个项目支持的是后者。那我们就按后者要求的数据格式来。
Faster R-CNN,需要下面的数据:
预训练的 VGG16模型 或是 Res101,或是基它的特征抽取模式。(这个项目支持的是 VGG16)
训练用的图片
每个图片对应的区域标注数据(以文件形式。VOC2007是XML文件,还有一种是TXT)
4. 准备数据的过程
预训练模型在开源项目Faster-RCNN-TensorFlow-Python3.5的网页上有下载地址,可以直接下载。5xxMB
训练用的图片就需要自己收集 或是 采集。大约180张左右。
标注数据,可以使用这个开源软件 labelImg 来制作。软件会为每个图片单独生成一个xml文件。
图片数据按上面的目录结构安放。
Annotations 放 XML 文件。
ImageSets 放 索引文件(文本),指明那些文件是用于训练,那些是用来评估。
JPEGImages目录下放 jpg文件。文件名最好是000001.jpg ~ 999999.jpg。
另外一个注意点是,数据的完全绝对路径中不要用中文。
上图中有一个 gen_main.py 程序,这个是用来生成 ImageSets 中的索引文件的。这些索引文件格式很简单,就是一个纯文本的列表文件。
文件内容就是一行一行的文件名(不带扩展名)。训练程序根据这些文件的指引,加载图片。
5. 训练和验证
在开始前,注意要修改代码中的 class 数量。比如,我这里只有一个类,就需要把代码中的设置为1。
执行 项目 Faster-RCNN-TensorFlow-Python3.5-master 中的 train.py 就可以开始训练了。
执行项目中的 demo.py 就是验证。
生成的模型会在下面的目录中:
6. 解决性能问题
在 Faster-RCNN-TensorFlow-Python3.5-master\lib\config 里的 config.py 文件中,是有很多参数可以修改的。通常我们不需要修改。
为了性能的需求,我修改了下面的几个参数:
rpn_top_n ,这个是 用来评估的 proposals 的数量。越大,就意味着越多的计算。设置小了,可能会不准确。
最初,这个值是300,分析一个图片,需要1.9秒。把这个参数设置为1,需要0.9秒。但仍不满足要求。
DQN 与 Deepmind
以上两个,都是为了图像识别。这个则是为了解决打牌的问题。让AI自己学习如何打红心,并自行训练,提高自己的战力。类似与 Alphamaster,就是 AlphaGo的升级版,可以自我对战,学习,提高。
目前比赛中,水平最高的,已知其使用的是MCTS算法。算是轻度AI了。我使用DQN写的,战力很弱,也许需要训练1亿轮才行?目前一天只能练150万轮。当然,这是我的猜测。
总结
以上,都是知其然,而不知其所以然,不过,DL 或者说 深度神经网络 最终一定是演变成 engine or SDK。软件工程师只需要使用它们就好。可以解决问题就OK。
参考
https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/
optiva-framework - scan tools
https://blog.csdn.net/hongxingabc/article/details/79039537
https://blog.csdn.net/gvfdbdf/article/details/52214008
https://blog.csdn.net/sinat_30071459/article/details/50723212
https://blog.csdn.net/j497205974/article/details/80074494
https://blog.csdn.net/weixin_40920228/article/details/79561524
https://cloud.tencent.com/developer/article/1010754
http://blog.leanote.com/post/braveapple/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%87%AA%E5%B7%B1%E6%95%B0%E6%8D%AE%E9%9B%86%E8%AE%AD%E7%BB%83Faster-RCNN%E6%A8%A1%E5%9E%8B
https://www.jiqizhixin.com/articles/2018-02-23-3
https://zhuanlan.zhihu.com/p/31772360
https://blog.csdn.net/weixin_31200719/article/details/81220924
https://medium.com/@jonathan_hui/object-detection-speed-and-accuracy-comparison-faster-r-cnn-r-fcn-ssd-and-yolo-5425656ae359
https://zhuanlan.zhihu.com/p/32230004
https://zhuanlan.zhihu.com/p/32404424