【树莓派 + 深度学习 + Python】从零开始做一个你画AI猜的小游戏

本文介绍了如何使用树莓派、深度学习和Python从零开始构建一个你画AI猜的游戏。游戏基于谷歌Quick, Draw!的数据集,训练了一个卷积神经网络,经过Python实现和摄像头手绘识别,最终成功移植到树莓派上,即使在计算资源有限的树莓派上,也能借助嵌入式智能硬件实现流畅运行。" 136180179,7947617,华为OD机试解析:快递员最短路径算法,"['算法', '图论', '华为OD机试', '编程语言', '路径规划']
摘要由CSDN通过智能技术生成

神经网络能学会辨识随手画的灵魂涂鸦吗?只要数据够多就可以!

今天想带大家从零开始实现一个谷歌开发的小游戏 —— Quick, Draw! 或是叫“限时涂鸦”!

点击打开链接 (谷歌所有,需科学上网…)


在本文将涉及到以下内容:

  • 准备数据
  • 训练用于图片分类的神经网络(Caffe
  • Python实现
  • 移植树莓派
  • 神经网络移植于Intel Movidius 芯片的一款嵌入式智能硬件,弥补树莓派计算力不足



游戏内容很简单也很有趣:给你20秒的时间和一个题目,在时间限制内画出来并让AI正确识别。


本灵魂画手的杰作。还没画完就已经被识别过关了于是变成了这样的半成品… 

似乎大家的水平看起来都差不多。



好了,言归正传,首先让我们来分析一下整个游戏的逻辑,然后分成小模块一个一个来攻破。



我们先从核心的部分开始:如何训练卷积神经网络来识别涂鸦。


获得图像数据和标签

之所以谷歌的这个小游戏可以神奇地正确识别各位在座大触们的作品,原因就是大家玩这个游戏时所提供的海量的数据。

猜猜现在已经有多少个了?

What do 50 million drawings look like?

Over 15 million players have contributed millions of drawings playing Quick, Draw! These doodles are a unique data set that can help developers train new neural networks, help researchers see patterns in how people around the world draw, and help artists create things we haven’t begun to think of. That’s why we’re open-sourcing them, for anyone to play with.       

1500万玩家提供了345类共5000万张图片!你无论怎么画,总是有那么几个人和你思路差不多,这就是大数据的力量。

可喜可贺的是良心的谷歌开源了这个数据库,并且提供了一个相比于图像识别更高端一些的识别方式教程,如果有兴趣的同学可以->(通过笔顺用RNN在Tensorflow上实现)。 

谷歌将数据存在了他们的云服务器上(Google Cloud),同样需要科学上网和谷歌账户才能下载,下载较为繁琐(如需下载全数据库请参考他们的Github)

于是我重新整理了一个轻量级(其实也有100万张)的数据库用于方便大家使用,包括(机翻的)中文标签。剩下的训练用网络结构、指令、模型也放在了里面。

链接: https://pan.baidu.com/s/1C5iENo6y8QijXMxOXDFIfw 密码: fgm9

安装OpenCV安装Caffe,这两步可以很简单也可能让人抓狂好几天… 

首先最好电脑上有支持Cuda的nvidia的显卡,没有也行,只是CPU训练远比GPU慢的多。具体安装过程就不赘述了,网上有成吨的教程。提供一下官方Caffe的Github链接

注意编译PyCaffe!


好了,一切准备工作就绪,可以开始训练了。

(注意:我使用的系统是Ubuntu 16.04,其他操作系统可能有略微不同,如果哪里有坑欢迎大家补充交流)

训练第一步:生成LMDB数据库

Caffe支持用txt, hdf5以及lmdb格式训练,生成难度依次从低到高,但效率也同样从低到高。因为我们的数据姑且也是百万级的,所以在这里选择用LMDB格式。好在Caffe自己提供了方便的工具可以直接生成LMDB格式文件,只需要调用编译好的二进制convert_imageset 即可。

以下为全部指令: 

[Caffe路径]/convert_imageset --resize_height=28 --resize_width=28 [数据根目录] ./label_list.txt ./train_lmdb
[Caffe路径]/convert_imageset --resize_height=28 --resize_width=28 [数据根目录] ./label_list_test.txt ./test_lmdb
在这里需要label_list.txt来指定图像数据的位置以及它的类别标签,比如说其中一行:
/images_test/0000/00046005.png 0

将0000文件夹的图片赋予标签0, 注意标签要从0开始依次往下排,不然Caffe会出错。

list我已经生成好了放在了网盘里,如果想用自己的数据训练类似问题可以参考这个结构在Python用os.walk来遍历生成。

训练第二步:Caffe指令

[Caffe路径]/build/tools/caffe train --solver=./solver.prototxt --gpu 0 2>&1 | tee ./log.log
这一步将开始训练,其中solver是用来设定配置文件以及其他训练时所需的参数。例如我使用的如下:
net: "./train.prototxt"
test_iter: 1500
test_interval: 500

base_lr: 0.01
lr_policy: "multistep"
gamma: 0.1

stepvalue: 20000
stepvalue: 45000
stepvalue: 65000
stepvalue: 300000
max_iter: 1000000

display: 200
momentum: 0.9
weight_decay: 0.0005
  • 18
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值