树莓派与深度学习:环境配置及镜像分享
创建日期: 2020-03-02 17:05:47
2020.05.09更新:看到有些人无法连接到wifi网络,我重新制作了树莓派的镜像文件。将静态ip设定删除了。这样就可以直接用下面介绍的:在系统boot目录下新创建文件名为'ssh'和'wpa_supplicant.conf'的两个文件的方法,开机自动连接指定wifi并开启ssh服务,然后可用远程登录rpi。
"镜像下载链接见评论区置顶百度云盘链接"
分享的内容包含:1. 配置好深度学习环境(tensorflow+pytorch+keras+opencv)的树莓派镜像(压缩包)(里面的树莓派镜像文件夹下,有三个压缩文件,解压任意一个即可合并三个文件,生成完整的树莓派镜像)。2. VNC Viewer客户端(windows版本),Win32diskimager,还有BerryConda的arm版本安装包。
这个镜像是我在 李慕清:树莓派与深度学习:目标检测 这个任务完成后制作的(这也是导致镜像太大需要分包压缩的原因),桌面上会有一个.sh文件,在连接了树莓派的情况下,执行该文件即可调用摄像头进行实时目标检测。
--------------------------
简介:
疫情严峻,没法出门,家里的老电脑又没法跑深度学习,索性入手了一块树莓派4B,试一试在树莓派这样的移动端,深度学习模型能否跑的起来。本篇主要介绍一下树莓派断的深度学习环境搭建的过程,以及分享一下深度学习环境配置好的树莓派镜像。
2019年发布的树莓派4B,性能较之前的版本,性能提升明显。基本参数如下:
1.5GHz四核64位ARM Cortex-A72 CPU(~3 × 性能) 1GB,2GB或4GB的LPDDR4 SDRAM 全吞吐量千兆以太网 双频802.11ac无线网络 蓝牙5.0 两个USB 3.0和两个USB 2.0端口 双显示器支持,分辨率高达4K VideoCore VI显卡,支持OpenGL ES 3.x. HEVC视频的4Kp60硬件解码 与早期的Raspberry Pi产品完全兼容
我入手的配件包括:树莓派裸板4G版本,闪迪microSD卡32G(class10),500万像素摄像头,读卡器,外壳,电源线。当然配上Intel的Movidius神经计算棒,肯定更香。穷是原罪,下次一定。显示器没有必要买,性价比比不高,完全可以用电脑显示器(HDMI接口)或者用远程桌面软件连接,手机VNC软件也可以。
1. 树莓派系统镜像安装
树莓派的官方系统可以从官方下载地址下载安装,建议选择桌面版的Raspbian系统。但这样下载的系统很多内容都要自己去下载设置,比较麻烦。我第一次是这样安装的,但发现树莓派的默认python3环境所需要的包绝大多数都要从https://www.piwheels.org/simple下载,部分从Pypi下载,直接使用pip安装速度很慢而且大概率会出现Http错误(科学/n上网问题能解决的话,推荐直接使用BerryConda进行环境管理),而且换清华和阿里云源并不能解决问题,特别是深度学习相关的tensorflo和pytorch国内的源好像都没有。然后直接用了Maker毕:分享预装TensorFlow和OpenCV的树莓派系统镜像提供的树莓派镜像(感谢 @Maker毕 ),(这里再吐槽一下百度云盘,时不时1k的下载速度,下载了两天,今后有时间的话,想办法搭建一个树莓派云盘)。鉴于现在pytorch用的人比较多,所以在他的镜像基础上增加安装了Pytorch 1.3.0 和torchvision,然后又打包分享给大家。最终的python环境中,深度学习相关的包版本如下:
Package: Version :
Python 3.7.3
h5py 2.9.0
Keras 2.2.4
lxml 4.3.2
matplotlib 3.0.2
numpy 1.16.2
picamera 1.13
Pillow 5.4.1
OpenCV 4.1.0
torch 1.3.0
torchvision 0.2.2
tensorboard 1.13.1
tensorflow 1.13.1
下面是简要的安装步骤:
- 下载镜像资源以及相关软件(评论区置顶百度云链接),解压"树莓派镜像(深度学习环境)"文件夹下的rpi_with_tf_keras_pytorch_opencv**_ud.zip**得到系统镜像文件(.img)。
- 利用win32diskimager将系统烧录到microSD卡。
- 如果有显示器,连接显示器用树莓派默认用户名和密码(pi和raspberry)登录即可,然后手动连接wifi或路由器LAN口(更新提示:经评论区提醒,可能出现连不上网的情况,这是因为我配置了固定IP地址,需要把etc/dhcpcd.conf文件里面的配置信息删除或修改为自己的路由器信息,20200509更新的镜像已经没有这个问题了)。
连不上局域网需修改:etc/dhcpcd.conf
- 如果没有显示器,首先在烧录后的系统boot目录下新创建文件名为'ssh'和'wpa_supplicant.conf'的两个文件,用来让树莓派开机自动连接wifi网络,其中ssh文件无后缀,无内容;wpa_supplicant.conf文件的内容如下:
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WiFi-A"
psk="12345678"
key_mgmt=WPA-PSK
priority=1
}
其中ssid是wifi名,注意:wifi名不能包含中文。我踩过这个坑。psk是wifi密码。key_mgmt是wifi加密方式。priority是网络优先级(配置多个wifi时使用)。
\5. 树莓派开机(树莓派开关机用供/断电方式进行),不出意外的话树莓派会自动连接wifi,板子上的红灯旁边的小绿灯会隔几秒闪一次,表示网络连接成功。(开机后,添加到/boot目录下的'wpa_supplicant.conf'文件会自动转移到/etc/wpa_supplicant目录下,所以你如果第二次配置这个文件,需要重新新建这个文件。ssh文件会转化为开启ssh服务的指令,也会在开机后从/boot目录消失)。
\6. 登录路由器查看,新多出来的地址就是树莓派ip地址,windows安装VNC viewer客户端,新建连接即可登录。
PS:一些可能遇到的问题:
【1】如果路由器管理员密码未知,则很难获取树莓派的ip,可以用windows扫描处于同一wifi网络下的所有在线的ip地址,在树莓派开机前后分别扫描一次,新多出来的ip地址即为树莓派的地址。
【2】有可能登录桌面时出现“Cannot currently show the desktop”,如下(借的图):
这是由于桌面显示分辨率太小导致,可以先用ssh登录设置一个较大的分辨率。执行:sudo raspi-config,选择Advanced Options->Resolution->选择一个分辨率(1280x720)->Finish->系统重启,即可用VNCViewer登录桌面。
【3】路由器一般DHCP服务会在树莓派每次开机时自动分配一个ip地址,要是每次都需要登录路由器查看树莓派十分不便。所以建议设置树莓派固定ip:桌面右上角右击选择wifi图标->wireless&wired Network Settings->配置信息如下图->应用。下次开机ip地址即为指定地址。
配置1~5,其中2为wifi名,3为空位自动补全,4为树莓派ip,5为路由器ip(网关)
到这里基本配置已完成,桌面操作方式和Ubuntu基本相似。
【4】镜像是16G TF卡上提取的,所以如果你是32G的存储卡,安装完之后需要手动进行扩展以使用全部存储空间。非常简单:终端执行:sudo raspi-config->Advanced Options->Expand Filesystem Ensures...->选择完成并重启,再次用df -h命令查看存储空间配置信息
2. 深度学习环境测试
镜像系统的深度学习环境是安装在树莓派的默认python3环境下的,登录到树莓派桌面系统后(或ssh),打开终端执行:pip3 list ,查看python环境包列表。
在 /home/pi/Documents 下运行:python3 keras_minist.py ,测试keras和TensorFlow是否正常。
运行结果如下:
在 /home/pi/Documents/CNN-backbone下执行: python3 train.py ,测试pytorch是否正常。(在2020.05.09更新的镜像里面这个cnn-backbone文件夹被我删掉了,可以在https://github.com/lee-zq/CNN-Backbone 下载后再使用。)
这是一个CNN经典网络实现的小项目,还未完成
运行结果:
train.py中可以指定一下batch size、Epochs等参数,可以将网络模型选择一个较轻量的,比如LeNet,训练会快一些。
总结:
总体上来说,尽管树莓派4B硬件性能提升很多,但训练深度学习模型还是不太行,只做推理估计可以。下一步打算在上面跑一些轻量的目标检测或者分割模型,如MobileNet,还有GhostNet(论文中说可以在arm设备上运行,验证一下),利用500万(是像素,不是价值)的摄像头进行实时检测。