很高兴能够参加这一次的活动,也是比赛
起初是对机器学习有关方面比较感兴趣,看了一下基本要求,感觉并不是很难,于是就入坑了,但没想到,这个坑还是挺多的,最开始的搭建训练环境也折腾了比较久,真是一言难尽
一开始收到货还是挺快的,本来也想弄一个难度高的题目,关于视频识别之类,后来研究了一段时间,cnn的世界也确实复杂,目前水平不足,觉得换一个题目,思来想去,还是想搞一下神经网络,就选择了语音识别类,目前的想法是基于"用手势或语音命令完成人机交互"这个题目,搭配SD卡和显示屏,完成一个由语音控制的相册,能够通过对它说命令来控制屏幕上图片的显示。
一、首先来介绍一下这个MAX78000
它是由MAXIM公司出品的Arm® Cortex® M4F处理器,其特点是超低功耗、器件集成卷积神经网络加速器。本次使用的开发板为MAX78000FTHR,板载非常丰富的外设资源,例如CMOS VGA图像传感器、数字麦克风、低功耗立体声音频CODEC、1MB QSPI SRAM、micro SD存储卡连接器、RGB指示LED和按键。
当然板载的几个外设芯片也都是MAXIM的主力产品,性能也十分优秀,以下是主要的外设资源图以及它们与MAX78000的通信方式。
二、搭建Linux的训练环境
这个真是一开始找不到门路,由于之前没有相关方面的学习,所以一步一步的摸索着来
以下是我自己摸索着来的一个过程,真的是参考了好多内容,功夫不负有心人,最终也终于成功!
自己用的是Windows10电脑,搭配nvida显卡,装双系统的话切换比较麻烦,而且硬盘空间也不太够了,于是选择使用windows的WSL2功能来搭建环境
首先是官方的一个教程文档,以此为中心
GitHub - MaximIntegratedAI/ai8x-training: Model Training for ADI's MAX78000 and MAX78002 AI Devices
根据自己实际使用的环境参考教程搭建
直接安装 WSL2 在非 C 盘
参考微软官方文档
Manual installation steps for older versions of WSL | Microsoft Learn
启用 WSL 功能
首先需要启用 WSL 相关的 windows 功能,win+R 输入 appwiz.cpl 回车 -> 启用或关闭 Windows 功能,然后启用下列三个功能:
编辑
搜集到的一些问题和解决方法:
win11 是默认支持 WSL2 的,如果是 win10 请参考 检查运行 WSL2 的要求
设置默认安装 WSL2
为了安装 WSL2,需要先安装 WSL2 的内核更新包:适用于 x64 计算机的 WSL2 Linux 内核更新包。
下载这个 .msi 文件之后,双击安装可能会因为权限问题导致安装失败,参考 安装程序出现2502、2503错误解决方法:
打开“命令提示符(管理员)”
在“命令提示符(管理员)”中输入"msiexec /package " +“你将要安装的程序的完整路径及程序名”(注意空格)
然后按回车键,安装程序就会自动启动
此外,你可能还需要使用命令将 WSL2 设置为默认版本:
wsl --set-default-version 2
直接将Linux安装在非 C 盘
到此为止,准备工作都OK了,从官网页面可以下载想要安装的 Linux 发行版:下载Ubuntu20.04
以我下载的 Ubuntu 20.04 LTS 为例,把下载后得到的 .appx 文件放到 D 盘目录下,然后修改后缀名为 zip ,即 Ubuntu2004xxxx.appx -> Ubuntu2004xxxx.zip
然后把它解压,得到一个文件夹,如果文件夹中有 ubuntu****.exe ,那就可以了;但是 20.04 版本解压后应该是有若干个 appx ,这时候根据自己的平台把 Ubuntu_2004_x64.appx 或 Ubuntu_2004_ARM64.appx 修改后缀为 zip,然后再一次解压,这一次就可以得到 .exe 了。
我使用的是Inter处理器,所以选择x64的文件
双击 ubuntu2204.exe 开始安装,如果出现错误,那么大概率是没有更新 WSL2 的内核,回到前面一节 “设置默认安装 WSL2” 更新内核。
安装时根据向导进行相应的设置即可。不过注意在设置用户名时只能设置小写字母、数字和下划线(不能使用大写字母),如果不符合要求是无法选择 [done] 的。
编辑
至此我们已经安装好了 WSL2,在 CMD 中使用命令可以检查我们安装的版本:
wsl -l -v
PS C:\Users\25245> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
更换Ubuntu系统的软件源,由于众所周知的原因,不换源的话软件下载的非常慢/甚至无法下载
在wsl窗口中更换软件源
手动替换
直接编辑/etc/apt/sources.list文件(需要使用 sudo):
将原文件做备份:
sudo cp /etc/apt/sources.list /etc/apt/sources_copy.list
打开文件:
sudo vim /etc/apt/sources.list
将文件中的内容删除,将镜像源复制到里面。镜像源我使用的是清华的,当然也可以选择阿里的或者其他
ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
进去文件编辑器,后直接按d键删掉全部的,再按i键进入编辑模式,粘贴进去,按esc键退出,再输入英文冒号和wq :wq,再点击回车即可
执行命令
sudo apt-get update
sudo apt-get upgrade
如果报错,请参考
更新好后,在windows CMD中输入
更新到最新版本,我这里是内核版本: 5.10.102.1
wsl --update
关闭wsl2
wsl --shutdown
关于显卡的驱动问题,一开始以为需要安装NVIDIA驱动+CUDA驱动,但是后来发现,只需要安装Windows中的NVIDIA显卡驱动就可以,就已经包含了CUDA的驱动,然后在wsl2中只需要安装cudatoolkit就可以
当然现在没有人不装显卡驱动吧,这个步骤应该可以忽略。。我装了又卸了又重新安装上一个版本高一点的驱动
安装好重启电脑,在WindowsCMD中输入
nvidia-smi
编辑
可以看到CUDA驱动是11.7版本,显卡也正常运行
输入wsl,启动ubuntu
接下来,安装远程gui界面,用惯了windows,还没有太熟悉命令行操作哈哈,参考
Windows10/11上安装图形用户界面 (GUI)并在 WSL 2 中运行 Ubuntu 22.04_哔哩哔哩_bilibili
!安装GUI命令:
sudo apt update && sudo apt -y upgrade
sudo apt-get purge xrdp
sudo apt install -y xrdp
sudo apt install -y xfce4
sudo apt install -y xfce4-goodies
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
sudo sed -i 's/3389/3389/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
echo xfce4-session > ~/.xsession
sudo nano /etc/xrdp/startwm.sh
!以下这两行注释掉:
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
!添加这一行:
# xfce
startxfce4
启动gui界面
sudo /etc/init.d/xrdp start
输入命令ip addr
获取WSL2的IP地址
在windows中,打开远程桌面连接,输入IP地址,即可连接成功
安装的过程参考
wsl安装xrdp(可视化界面并远程),解决闪退、黑屏_daboluo520的博客-CSDN博客_xrdp闪退
解决WSL Ubuntu20.4+xfce4 图形界面一段时间后黑屏_惰性固体的博客-CSDN博客_xfce4黑屏
禁止xfce4黑屏
我在ubuntu server上安装了xfce,可是每隔十分钟电脑就会黑屏。安装了xfce自带的电源管理程序。貌似不起作用。后来从网上找到如下方法:
修改/etc/X11/xorg.conf配置文件,如果找不到此文件可自行建立。
增加一个 Section “ServerFlags”,包含的内容如下:
Section "ServerFlags"
Option "BlankTime" "0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
EndSection
注:你也可以将后面的0设置为你所希望的分钟数。
如果还是不起作用,还可以另外增加Section “Monitor”,反正我没做这一步已经起作用了。内容如下:
Section "Monitor"
Option "DPMS" "false"
EndSection
windows中的代理似乎并不能给wsl中的系统直接使用,
配置 WSL2 使用 Windows 网络代理
通过下面脚本可以便捷实现网络代理的设置:./proxyrc.sh set 设置代理,./proxyrc.sh unset 取消代理(以这种方式设置代理只是临时的,重新进入 WSL 需要再一次设置)。
#!/bin/sh
# 获取 windows 主机 IP
hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
wslip=$(hostname -I | awk '{print $1}')
# 代理端口一般是 7890,注意自己去代理软件确认
port="7890"
PROXY_HTTP="http://${hostip}:${port}"
set_proxy(){
export http_proxy="${PROXY_HTTP}"
export HTTP_PROXY="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"
export HTTPS_proxy="${PROXY_HTTP}"
export ALL_PROXY="${PROXY_SOCKS5}"
export all_proxy=${PROXY_SOCKS5}
}
unset_proxy(){
unset http_proxy
unset HTTP_PROXY
unset https_proxy
unset HTTPS_PROXY
unset ALL_PROXY
unset all_proxy
}
test_setting(){
echo "Host ip:" ${hostip}
echo "WSL ip:" ${wslip}
echo "Current proxy:" $https_proxy
}
if [ "$1" = "set" ]
then
set_proxy
elif [ "$1" = "unset" ]
then
unset_proxy
elif [ "$1" = "test" ]
then
test_setting
else
echo "Unsupported arguments."
fi
安装火狐浏览器,用来浏览一些界面
sudo apt-get install firefox
更新git版本
1、查看git版本
git --version
2、升级Git
sudo apt update # 更新源
sudo apt install software-properties-common # 安装 PPA 需要的依赖
sudo add-apt-repository ppa:git-core/ppa # 向 PPA 中添加 git 的软件源
sudo apt-get update
sudo apt-get install git
安装NVIDIA Toolkit,这是在wsl2中调用windowsGPU的关键,注意版本的匹配
CUDA Toolkit 11.8 Downloads | NVIDIA Developer
编辑
历史版本可以在网址下面找到,不需要安装跟自己windows上的cuda对应的版本,但是CUDA Toolkit
版本应该要与driver版本匹配Release Notes :: CUDA Toolkit Documentation
我这里安装的是11.3版本的
安装pyenv,这是控制python在哪些目录中生效,以便于管理python版本
Ubuntu中安装pyenv和pyenv-virtualenv
使用pyenv安装python
pyenv install 3.8.11
安装失败/下载不了,参考pyenv进行python版本本地安装_轮子学长的博客-CSDN博客
安装pyenv及利用pyevn安装python - 立体风 - 博客园
如果还不行,有可能是网络问题/换个网或者时间再试一下
配置git 环境
如果之前未配置本地 git 环境,请添加以下命令来配置电子邮件和名称。电子邮件必须与 GitHub 匹配(包括大写/小写):
$ git config --global user.email "first.last@example.com"
$ git config --global user.name "First Last"
接下来进入正题,开始正式安装训练环境
$ cd <your/project> $ git clone --recursive https://github.com/MaximIntegratedAI/ai8x-training.git $ git clone --recursive https://github.com/MaximIntegratedAI/ai8x-synthesis.git
创建虚拟环境,执行以下操作:
$ cd ai8x-training
如果使用 pyenv,请将本地目录设置为使用 Python 3.8.11。
$ pyenv local 3.8.11
在所有情况下,请验证是否使用了 Python 的 3.8.x 版本:
$ python --version Python 3.8.11
如果这没有返回版本 3.8.x,请安装并初始化pyenv。
然后继续执行以下操作:
$ python -m venv venv --prompt ai8x-training
如果此命令返回类似于“虚拟环境未成功创建,因为 ensurepip 不可用”的错误消息,请安装并初始化pyenv。
在 macOS 和 Linux(包括 WSL2)上,使用
$ source venv/bin/activate
然后继续
(ai8x-training) $ pip3 install -U pip wheel setuptools
下一步因系统是否使用 CUDA 11.x 而异。
对于 Linux 上的 CUDA 11.x,包括 WSL2:
(ai8x-training) $ pip3 install -r requirements-cu11.txt
//注意这条命令已经包含了Pytorch的环境,默认是1.8.1+cuda111版本的
pip下载不成功的时候试试开/关代理,加上换源
-i https://pypi.tuna.tsinghua.edu.cn/simple/
也可本地安装 参考pip安装本地whl文件(Linux平台)_Mavi2022的博客-CSDN博客_pip安装本地whl
wsl2安装cuda及pytorch_weixin_42187164的博客-CSDN博客_wsl安装pytorch
wsl2安装cuda及pytorch_weixin_42187164的博客-CSDN博客_wsl安装pytorch
ubuntu下安装多版本cuda及版本切换教程_zeeq_的博客-CSDN博客_ubuntu切换cuda版本
接下来就可以开始训练
使用官方demo里面的kws20_demo进行训练
激动人心的时刻,已经跑起来!
编辑
参考
win11 安装 WSL2 在非 C 盘及配置(图形界面+代理)_热带鱼啊的博客-CSDN博客_wsl2 图形界面
wsl2和 Windows 如何相互访问文件?_尼888888的博客-CSDN博客_wsl2访问windows的文件
win10/11下wsl2安装gpu版的pytorch(避坑指南)_Challow的博客-CSDN博客_wsl2 安装gpu驱动
win11 使用wsl2安装pytorch 梳理_皮仔--的博客-CSDN博客_wsl安装pytorch
三、在Windows中安装IDE编译下载程序
使用官方的IDE,安装好后用VS CODE配置环境,后续的编写下载程序就使用VS CODE来进行
四、正在探索中的内容以及准备探索的内容
目前是已经实现对TF卡中的图片转数组的bin文件读取并进行显示,当然这也费了一些功夫,主要还是以前也没有进行过相关方面的操作,特别是TF卡的
一开始是准备直接读取BMP文件,但是在读取的过程中总是不行,就索性先使用bin文件来试试,原理是一样的,估计还是某个操作出错了。除了bmp格式,后面也会尝试对jpg,png等格式的解码与显示,毕竟图片的格式还是挺多的,如果可以的话 还有gif可以试试。嗯。。还有视频,这个后续有机会可以试试,还可以使用板载的摄像头来拍照,再在相册中显示拍出来的内容,等等这好像是一个照相机啊哈哈,这应该都是可以尝试的,先挖个坑嘿嘿
展示一下显示的内容
关于CNN方面目前还没有研究太多,不过也清楚了一个基本的开发流程
后续就是关于命令词的选择以及收集数据,初步确定的有"打开相册、关闭相册、下一张、上一张、自动播放、暂停播放",还有就是不清楚中文是否能正常用,如果可行的话,就自己录几百遍来训练😭因为没有找到相关的中文词语的数据集
五、遇到的问题
现在有一个问题就是ili9341这个屏幕刷新率太低,现在刷新一整个屏幕需要半秒以上。。FPS甚至不到2,我想对于一款屏幕来说应该不至于此,可能是spi的速率不够吧,后面再研究一下源码,真是一言难尽
目前的问题还是在软件的代码编写上以及训练部署模型方面,关于训练方面,python之前也没怎么使用过,总的来说就是需要慢慢摸索的地方还有很多,学无止境,继续加油