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

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

今天想带大家从零开始实现一个谷歌开发的小游戏 —— 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
snapshot: 20000
snapshot_prefix: "./models/sketch"

solver_mod
  • 18
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值