专栏算法工具链【入门课程】06-AI 开发实战演练 - MNIST

【入门课程】06-AI 开发实战演练 - MNIST

anming2020-04-13
1074
8
相关代码和文档共16M:
下载地址: https://pan.horizon.ai/index.php/s/mpm8deD2NBrKdYd
演示视屏157M,时长25分钟
下载地址: https://pan.horizon.ai/index.php/s/x8cAnjxpyCaz6Ae


1.1训练任务简介:

MNIST项目的目的是将0-9的手写数字图片正确分类.

项目总共包含60000张图片, 其中50000张为训练图片, 10000张为测试图片.

每张图片长28像素, 宽28像素, 单通道. 每张图包含

一个数字,每个数字被放在图片的中央.

它们长成这样:
1.2 工具包说明
此文档配套软件包为“工具链3.2.0版本”.
下载网址为:
https://pan.horizon.ai/index.php/s/7PjWC6iJmsiLJSC?path=/Tensorflow

密码: 密码请联系地平线获取

需要的安装包:
Docker/tensorflow-horizon-docker-v3.2.0.tar.gz
Embedded-System-SDK/embedded_release_sdk-v3.2.0.6.tar.gz
说明文档:

Doc/Tensorflow-Doc-v3.2.0.1_cn.zip

安装环境说明:
请参考文档: 2.0节硬件需求 和 3.3 节使用 Docker 镜像

启动docker包:

docker load < tensorflow-horizon-docker-v3.2.0.tar.gz

docker run -it --rm --shm-size="15g" -v /home:/data hub.hobot.cc/aitools/tf-toolkit:v3.2.0.3 /bin/bash

1.3 模型训练说明

运行方法:
直接将mnist_classification 工程放在docker中home目录下.
可直接运行 sh pipline.sh.
整个过程需要10分钟左右.
pipline.sh 是训练入口.

test_images 测试集指标, 该指标将用于检验模型部署一致性.:

mnist_classification 文件目录, 文件作用简介:

configs/mnistnet.py 配置训练参数

pack_mnist.py 打包训练集,验证集,测试集到

data/*.tfrecord.保存图片到目录data/images/.

validation.py 测试集评测.

inference.py 单张图片推理.

mnist_network.py 搭建网络结构.

sh pipline.sh.单机训练入口

sh pipline_distribute.sh.多机训练入口[待完善]

models 保存各阶段训练结果.

2.模型部署说明

2.1 初步认识perf_code

阅读工具链文档可知:

perf_code 基于hobot_framework workflow实现, 用于测试BPU硬件性能.
请阅读文档HBDK3.2.0 11.1. Hobot Framework SDK.
下载embedded_release_sdk-v3.2.0.6,解压到docker的/data目录下
cd /data/embedded_release_sdk-v3.2.0.6/embedded_release_sdk/example_code/analysis/perf_code

运行mobileNetV2 对imageNet预测:

2.2 基于perf_code实现mnist测试

目标:
1.对每张测试图片做出预测, 判断预测结果是否正确.
2.客户端显示图片和预测结果.
3.一致性验证: PC机上精度指标 与 96board上精度指标一致.
4.演示添加module以及相应的message

HBDK3.2.0 文档也提供相关开发示例: 参考文档11章 SDK

与2.1节workflow差异: 由于mnist图片尺寸为28*28,故在input模块中新增图片放大模块[512*512], 并将消息传递给post_process.
以下修改均基于工程perf_code, 修改过程如下:
需要修改以下文件:
src/modules/vo/message.h [规定消息格式]
src/modules/input/perf_input_module/perf_input_module.cc [定义输入模块]
src/modules/input/perf_input_module/perf_input_module.h
src/modules/post_process_modules/class_post_process_module.cc [定义后处理模块]
src/examples.cc [定义workflow]
  1. 定义消息数据结构:

在头文件src/modules/vo/message.h中 添加消息类型IntMessage

2. 添加数据预处理模块:
替换src/modules/input/perf_input_module : perf_input_module.cc perf_input_module.h
3. 后处理模块组装消息与输出预测日志

修改src/modules/post_process_modules/class_post_process_module.cc

判断预测是否正确:
重新组装消息 FORWARD_DEFINE(ClassPostProcessModule, 0):
auto frame0 = dynamic_cast< ParsingMessage *>( (*input[1])[0].get() );
auto frame = frame0->get_frame_msg();
Init函数添加触发条件,即两条消息同时存在时启动模块:
auto condition = hobot::Expression::Require(0, 1, false)->And(hobot::Expression::Require(1, 1, false));

修改标签文件:

std::ifstream fi("mnist_test.list");

4. 搭建workflow和添加触发条件:
src/examples.cc 添加消息头文件: #include "modules/vo/message.h"
src/examples.cc


添加lenet模型选项: || _main_name == "lenet"
修改workflow

读取mnist测试图片数量, 传递index 消息

2.3 编译运行以及结果展示

  • 编译生成可执行文件 perf_mnist

  • mkdir build && cd build && cmake .. && make

  • 拷贝文件到开发板:
    将测试图片, perf_mnist, lenet.hbm, start_mnist.sh, mnist_test.list 拷贝到开发板目录example_prebuilt/analysis/perf
    测试图片: 训练文件夹下的mnist_classification/data/images/test_images
    模型文件: mnist_classification/models/lenet.hbm
  • 打开日志开关:
    修改config.json 中 "vlog_level": 3
  • 生成测试图片文件列表:
    find test_images -name "*.png" > mnist_test.lst

  • 打开客户端工具client, 选择Record模式

  • 运行测试脚本: sh start_mnist.sh

  • 查看预测正确的图片总数: 9927
    grep -c "is_correct=1" log/INFO_*
    查看预测错误的图片总数: 73
    grep -c "is_correct=0" log/INFO_*

  • 计算正确率: 9927/10000.0 = 99.27 % 真机测评与PC端预测结果一致,指标一致性验证成功

  • 客户端效果

算法工具链
官方教程
+3
评论4
0/1000
  • zdi
    Lv.1

    你好,麻烦问一下密码是?

    2020-05-09
    0
    3
    • anming回复zdi:
      可以先看看 在线资源:https://developer.horizon.ai/resource。 相当的丰富哦, 训练,部署,还有免费的各类模型可以试试。
      需要试用工具链和开发板, 可以联系forum-bd@horizon.ai, 会提供开发工具包以及各类文档
      2020-05-15
      0
    • zdi回复anming:

      你好,请问这个docker是部署在GPU服务器而不是地平线的板子上的对吧?

      然后地平线是提供了这样的一个docker方便GPU服务器训练完成后直接部署在BPU上的对吧?

      谢谢!

      2020-05-15
      0
    • anming回复zdi:
      是的, GPU服务器上需要安装docker环境, 然后启动地平线工具包里面的docker镜像,就可以开始训练了。
      dock里面的基础软件包都是安装完备的,省去了安装环境的时间。训练结束,模型编译后就可以放到BPU上运行。
      具体流程可以看一看,跑一跑这个mnist 示例代码和文档。

      具体部署需要和 AiExpress 配合起来,基于AiExpress 开发也可以在 这个docker里面进行。
      2020-05-15
      0
  • andymacool
    Lv.1

    ? 感谢分享!

    2020-04-12
    0
    1
    • zdi回复andymacool:

      你好,请问你们知道密码吗?还是要发邮件?

      2020-05-11
      0
  • dsc
    Lv.1

    腻害腻害

    2020-04-08
    0
    0
  • mrpeng
    Lv.1

    这个很Nice

    2020-04-14
    0
    0