# CanCollector

<img src="./resource/logo.jpg" alt="logo" style="zoom: 33%;" />

## 简介

嘉楠科技针对K230的开发的在线训练平台[嘉楠开发者社区 (canaan-creative.com)](https://developer.canaan-creative.com/model/training)和[AI CUBE](https://kendryte-download.canaan-creative.com/developer/common/AI_Cube_V1.0.tar.gz)是协助用户实现具体视觉场景从数据到部署的高效工具。用户只需要准备相关场景的数据，就可以实现端到端的全流程上板部署。用户数据质量和数据分布直接影响部署的效果，有时选择经过整理的公开数据集进行训练，导致在K230开发板部署效果难以达到预期效果，甚至差距很大。这一现象主要是因为开发板camera设备和公开数据集采集设备不同，因此部署时开发板采集的数据和训练数据分布不一致或者颜色、光照、视角、分辨率等存在差异。

为了解决上述问题，可以使用开发板手动采集数据，人工标注后进行训练，这样在部署时开发板推理数据和训练数据分布基本一致，差异性较小，部署效果能够得到提升。CanCollector是基于CANMV-K230开发板开发的视觉采集器。

## 快速上手

### 准备

在SD卡烧录CANMV-K230开发板镜像：[k230_canmv_sdcard_v1.1.0_nncase_v2.4.0.img.gz](https://kendryte-download.canaan-creative.com/developer/k230/k230_canmv_sdcard_V1.1_nncase_V2.4.0.img.gz) 。安装MobaXterm进行串口通信。

### 网络配置

#### PC端网络配置

控制面板->网络和共享中心->更改适配器设置->以太网网卡->右键属性->选中(TCP/IPv4)->属性

配置IP地址、掩码、网关，配置DNS服务器地址：

<img src="./resource/net_config_pc.png" alt="net_config_pc" style="zoom:67%;" />

#### 开发板网络配置

开发板上电，进入大小核通信串口。进入小核命令行，执行：

```Shell
# 查看是否有eth0
ifconfig
# 配置开发板IP，和PC在同一网段下
ifconfig eth0 192.168.1.22
# 查看IP配置
ifconfig
```

### 文件拷贝

解压工具包CanCollectorTool.zip，将cancollector_onboard2.4.zip拷贝到开发板的/sharefs下，拷贝使用tftpd64实现：

安装tftp通信工具，下载地址：<https://bitbucket.org/phjounin/tftpd64/downloads/>

启动tftpd64，配置待传输文件存放目录和服务网卡

<img src="./resource/tftpd64.png" alt="tftpd64" style="zoom:67%;" />

- sharefs说明

```Shell
# 进入小核根目录
cd /
# 查看目录
ls
# sharefs目录是大小核共用目录，因此从小核拷贝到sharefs目录下的文件对大核也可见
```

- 文件传输

```Shell
# 以下代码在小核串口执行
# 将PC上tftpd64配置文件存放目录中的传输collector_onboard2.4.zip至开发板的当前目录
tftp -g -r collector_onboard2.4.zip 192.168.1.2
```

解压：

```shell
unzip cancollector_onboard2.4.zip
```

### PC端启动

解压工具包CanCollectorTool.zip，进入CanCollector目录下：

```shell
# 命令行执行
start CanCollector.exe
# 或者双击CanCollector.exe启动PC端采集界面
```

启动界面后设置当前PC的IP和端口，设置采集图片存储路径：

<img src="./resource/ui.jpg" alt="ui" style="zoom: 50%;" />

### 板端启动

小核执行：

```shell
./connect.sh 192.168.1.2 8080
```

大核执行：

```shell
./main.elf
```

### 数据采集

在PC端配置采集参数，点击采集按钮，根据采集的质量确定是丢弃还是保存。采集的图片会保存在选择的目录下。

采集示例：

<img src="./resource/collect.jpg" alt="collect" style="zoom:67%;" />

保存结果：

<img src="./resource/result.jpg" alt="result" style="zoom:67%;" />

退出采集，点击断开按钮，大核命令行输入q并回车。

得到开发板camera的采集图像后可以自行标注并在在线平台或AI CUBE上完成训练得到部署包，完成在K230端部署过程。

### 效果对比

针对眼球病变分割任务，分别使用公开的数据集和使用CanCollector采集的数据进行训练得到的模型部署效果对比如下：

1. 使用公开数据集训练得到的模型的上板效果如下：

![example_1](./resource/example_1.png)

2. 使用CanCollector采集数据训练得到模型的上板效果如下：

![example_2](./resource/example_2.png)

通过上图的对比，我们可以明显看到，使用公开数据集进行训练得到的模型效果较差；而使用CanCollector采集数据标注后进行训练得到的模型在部署时可以比较精确的将中心病变区域分割出来。