树莓派与深度学习:环境配置及镜像分享

转载:https://zhuanlan.zhihu.com/p/110013867

简介:

疫情严峻,没法出门,家里的老电脑又没法跑深度学习,索性在某宝入手了一块树莓派4B,试一试在树莓派这样的移动端,深度学习模型能否跑的起来。本篇主要介绍一下树莓派断的深度学习环境搭建的过程,以及分享一下深度学习环境配置好的树莓派镜像。

镜像资源百度云链接:pan.baidu.com/s/1mCSvPP 提取码:inoa 。(不行就去安装maker毕的) 里面包含:配置好深度学习环境(tf+pytorch+keras+opencv)的树莓派镜像(压缩包),VNC Viewer客户端(windows版本),Win32diskimager,还有BerryConda的arm版本安装包。

树莓派与深度学习:环境配置及镜像分享_第1张图片 树莓派与深度学习:环境配置及镜像分享_第2张图片

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环境所需要的包绝大多数都要从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

下面是简要的安装步骤:

  1. 下载镜像资源以及相关软件(文章开头百度云链接),解压rpi_with_tf_keras_pytorch_opencv.rar得到系统镜像文件(.img)。
  2. 利用win32diskimager将系统烧录到microSD卡。
  3. 如果有显示器,连接显示器用树莓派默认用户名和密码(pi和raspberry)登录即可,然后手动连接wifi或路由器LAN口。
  4. 如果没有显示器,首先在烧录后的系统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”,如下(借的图):

树莓派与深度学习:环境配置及镜像分享_第3张图片 树莓派与深度学习:环境配置及镜像分享_第4张图片

这是由于桌面显示分辨率太小导致,可以先用ssh登录设置一个较大的分辨率。执行:sudo raspi-config,选择Advanced Options->Resolution->选择一个分辨率(1280x720)->Finish->系统重启,即可用VNCViewer登录桌面。

【3】路由器一般DHCP服务会在树莓派每次开机时自动分配一个ip地址,要是每次都需要登录路由器查看树莓派十分不便。所以建议设置树莓派固定ip:桌面右上角右击选择wifi图标->wireless&wired Network Settings->配置信息如下图->应用。下次开机ip地址即为指定地址。

树莓派与深度学习:环境配置及镜像分享_第5张图片 树莓派与深度学习:环境配置及镜像分享_第6张图片 配置1~5,其中2为wifi名,3为空位自动补全,4为树莓派ip,5为路由器ip(网关)

到这里基本配置已完成,桌面操作方式和Ubuntu基本相似。

【4】镜像是16G TF卡上提取的,所以如果你是32G的存储卡,安装完之后需要手动进行扩展以使用全部存储空间。非常简单:终端执行:sudo raspi-config->Advanced Options->Expand Filesystem Ensures...->选择完成并重启,再次用df -h命令查看存储空间配置信息

树莓派与深度学习:环境配置及镜像分享_第7张图片 树莓派与深度学习:环境配置及镜像分享_第8张图片

2. 深度学习环境测试

镜像系统的深度学习环境是安装在树莓派的默认python3环境下的,登录到树莓派桌面系统后(或ssh),打开终端执行:pip3 list ,查看python环境包列表。

树莓派与深度学习:环境配置及镜像分享_第9张图片 树莓派与深度学习:环境配置及镜像分享_第10张图片

在 /home/pi/Documents 下运行:python3 keras_minist.py ,测试keras和TensorFlow是否正常。

树莓派与深度学习:环境配置及镜像分享_第11张图片 树莓派与深度学习:环境配置及镜像分享_第12张图片

运行结果如下:

树莓派与深度学习:环境配置及镜像分享_第13张图片 树莓派与深度学习:环境配置及镜像分享_第14张图片

在 /home/pi/Documents/CNN-backbone下执行: python3 train.py ,测试pytorch是否正常。

树莓派与深度学习:环境配置及镜像分享_第15张图片 树莓派与深度学习:环境配置及镜像分享_第16张图片 这是一个CNN经典网络实现的小项目,还未完成

运行结果:

树莓派与深度学习:环境配置及镜像分享_第17张图片 树莓派与深度学习:环境配置及镜像分享_第18张图片

train.py中可以指定一下batch size、Epochs等参数,可以将网络模型选择一个较轻量的,比如LeNet,训练会快一些。

总结:

总体上来说,尽管树莓派4B硬件性能提升很多,但训练深度学习模型还是不太行,只做推理估计可以。下一步打算在上面跑一些轻量的目标检测或者分割模型,如MobileNet,还有GhostNet(论文中说可以在arm设备上运行,验证一下),利用500万(是像素,不是价值)的摄像头进行实时检测。

你可能感兴趣的:(树莓派)