RRoy 发表于 2021-2-23 17:55:07

在Raspberry Pi Pico上也可以玩转机器学习!

本帖最后由 RRoy 于 2021-2-24 09:55 编辑




来自谷歌大脑团队中移动和嵌入式TensorFlow小组的技术负责人Pete Warden曾经说过这样一句话:
> The future of machine learning is tiny.   



机器学习,被看作是人工智能的一部分,是研究通过经验自动改进的计算机算法。

微小机器学习(tinyML)是机器学习和嵌入式物联网(IoT)设备的交叉点。这个领域的发展有可能彻底改变许多行业。

我们先来看看HarvardX对这个新兴领域的简单介绍。

【视频】






## Tensorflow Lite Micro (tflmicro)



(https://www.tensorflow.org/lite/microcontrollers "TensorFlow Lite for Microcontrollers")是专为在微控制器和其他只有几千字节内存的设备上运行机器学习模型而设计的。

它支持(https://create.arduino.cc/projecthub/little_lookout/person-detection-with-tensorflow-and-arduino-47ae01 "Arduino Nano 33 BLE Sense")、ESP32、STM32F746 Discovery套件等微控制器平台。

前阵子4美元的树莓派 Pico发布,获得了非常多创客的青睐,Arducam公司也在一直试图将其他微控制器平台上的可能带到Pico上。



## 使用 Pico 开始学习机器学习

下面正式开始介绍在Pico上使用机器学习框架Tensorflow Lite Micro进行人员检测。

【视频】


### 材料


- 1 × (https://www.amazon.com/Arducam-Module-Megapixels-Arduino-Mega2560/dp/B012UXNDOY "Arducam Mini 2MP Plus")
- 1 × Raspberry Pi Pico
- 1 × USB转TTL转换器
- N × 跳线
- 1 × Micro USB线



有关启动和运行的信息,可以参考(https://rptl.io/pico-get-started "Raspberry Pi Pico入门")和(https://github.com/raspberrypi/pico-sdk "pico-sdk")中的README。



### 设置Pico

如果你的开发环境是在Raspberry Pi 4B或Raspberry Pi 400上,本入门指南中的大部分安装步骤可以通过运行安装脚本跳过。

可以通过以下操作获得这个脚本。

```bash
git clone https://github.com/raspberrypi/pico-setup.git
```
然后运行:

```bash
pico-setup/pico_setup.sh
```
该脚本将:

- 创建一个叫pico的目录
- 安装所需的依赖
- 下载`pico-sdk`、`pico-examples`、`pico-extras`和`pico-playground`资源库。
- 在`~/.bashrc`中定义`PICO_SDK_PATH`、`PICO_EXAMPLES_PATH`、`PICO_EXTRAS_PATH`和`PICO_PLAYGROUND_PATH`。
- 在`pico-examples/build/blink`和`pico-examples/build/hello_world`中构建`blink`和`hello_world`的例子。
- 下载并构建`picotool`(见附录B)。复制到`/usr/local/bin`。
- 下载并构建`picoprobe`(见附录A)。
- 下载并编译 `OpenOCD` (用于调试支持)
- 下载并安装Visual Studio代码
- 安装所需的Visual Studio代码扩展(更多细节请参见第6章)。
- 配置Raspberry Pi UART与Raspberry Pi Pico一起使用。

一旦它运行,你将需要重新启动你的Raspberry Pi。

```bash
sudo reboot
```





### 人物检测


![人物检测图解](https://gitee.com/ralstonliu/mdnice/raw/master/2021-2-22/1613974518233-image.png)

- 下载RPI-Pico-Cam

```bash
git clone https://github.com/ArduCAM/RPI-Pico-Cam.git
```
- 编译

> 提示:如果你不想编译,可以使用下面预建的uf2文件,你只需要给硬件布好线,然后下载uf2到设备上。

```bash
cd RPI-Pico-Cam/tflmicro
mkdir build
cd build
cmake ..
```

![](https://gitee.com/ralstonliu/mdnice/raw/master/2021-2-22/1613974667936-image.png)


```bash
make
```

然后你会在`RPI-Pico-Cam/tflmicro/build/examples/person_detection`路径下创建一些文件。


| Bin    | Description   |
| --- | --- |
| (https://github.com/ArduCAM/RPI-Pico-Cam/blob/master/tflmicro/bin/person_detection_int8.uf2 "person_detection_int8.uf2")   |   这是person_detection的主程序,可以拖到RP2040 USB大容量存储设备上。|
|(https://github.com/ArduCAM/RPI-Pico-Cam/blob/master/tflmicro/bin/person_detection_benchmark.uf2 "person_detection_benchmark.uf2")   |这是person_detection的基准程序,你可以用它来测试pico上person_detection的性能。   |
|   (https://github.com/ArduCAM/RPI-Pico-Cam/blob/master/tflmicro/bin/image_provider_benchmark.uf2 "image_provider_benchmark.uf2")|这是image_provider的基准程序,你可以用它来测试图像数据采集的性能。   |


![](https://gitee.com/ralstonliu/mdnice/raw/master/2021-2-22/1613974893173-image.png)

### 测试人体检测



|App   |Description   |
| --- | --- |
|(https://github.com/ArduCAM/RPI-Pico-Cam/blob/master/tflmicro/examples/person_detection/main_functions.cpp "person_detection_int8")   |一个样例   |

- 硬件连接




加载和运行`person_detection`最简单的方法是将其作为USB大容量存储设备安装到基于RP2040的电路板上。

这样做可以让你拖动一个文件到板子上,对闪存进行编程。继续使用micro-USB将树莓派Pico连接到你的树莓派上,确保你按住BOOTSEL按钮强制进入USB大容量存储模式。

例如,如果你是通过ssh登录的,你可能必须手动挂载大容量存储设备。

```bash
$ dmesg | tail
[ 371.973555] sd 0:0:0:0: Attached SCSI removable disk
$ sudo mkdir -p /mnt/pico
$ sudo mount /dev/sda1 /mnt/pico
```
如果你能看到`/mnt/pico`中的文件,那么USB大容量存储设备已经正确安装好啦。

```bash
$ ls /mnt/pico/
INDEX.HTM INFO_UF2.TXT
```
将`person_detection_int8.uf2`复制到RP2040上。

```bash
sudo cp examples/person_detection/person_detection_int8.uf2 /mnt/pico
sudo sync
```
### 查看输出


人员检测实例通过usb输出一些信息,你可以用minicom来查看。

```bash
minicom -b 115200 -o -D /dev/ttyACM0
```


![](https://gitee.com/ralstonliu/mdnice/raw/master/2021-2-22/1613975408091-image.png)

这个人员检测实例还可以把图像数据和人员检测结果输出到UART中,原作者提供了一个[处理程序](https://github.com/ArduCAM/RPI-Pico-Cam/blob/master/tflmicro/person_detection_display/person_detection_display.pde "处理程序")来显示它们。

> 提示:你可以在这里[下载](https://processing.org/download/ "Processing")Processing或者(https://pi.processing.org/download/ "Processing for Pi")。


![](https://gitee.com/ralstonliu/mdnice/raw/master/2021-2-22/1613975945786-image.png)



![](https://gitee.com/ralstonliu/mdnice/raw/master/2021-2-22/1613975964127-image.png)


### 其他
- (https://www.tensorflow.org/lite/microcontrollers "TensorFlow网站")有关于培训、教程和其他资源的信息。
- (https://tinymlbook.com/ "TinyML书")是在各种不同系统中使用TensorFlow Lite Micro的指南。
- [《TensorFlowLite Micro:TinyML系统上的嵌入式机器学习》](https://arxiv.org/pdf/2010.08678.pdf "《TensorFlowLite Micro:TinyML系统上的嵌入式机器学习》")有更多关于框架设计和实现的细节。
- 访问、打星或fork (https://github.com/ArduCAM/RPI-Pico-Cam "Arducam Pico Cam GitHub Repo")的GitHub仓库。

大家有什么想法,或是对文章的指正,都欢迎在下方留言讨论!




译文首发于DF创客社区:https://mc.dfrobot.com.cn/thread-308443-1-1.html

原文链接:https://www.arducam.com/raspberry-pi-pico-tensorflow-lite-micro-person-detection-arducam/

转载请注明出处与作者信息

pATAq 发表于 2021-2-28 20:54:19

背靠树莓派社区,Pico 发展很快哇
页: [1]
查看完整版本: 在Raspberry Pi Pico上也可以玩转机器学习!