ResNet模型网络
前言
在上一次的测试中,咱们从头开始训练了一个三个卷积层串联一个全链接层的输出,做为猫狗分类的预测的模型,此次咱们本身训练一个ResNet模型,并在如下三个环境中进行性能的对比框架
训练模型工具
模型使用AIStudio 进行训练,训练和预测代码以下性能
RESNET:https://aistudio.baidu.com/aistudio/projectdetail/67775
MOBILE:https://aistudio.baidu.com/aistudio/projectdetail/67776
按照以前咱们的作法,导出model文件和param文件。测试
测试结果
咱们执行预测,忽略掉预处理的速度,仅仅计算模型前向传播的时间。fetch
对于AIstudio平台,咱们计算如下代码的运行时间设计
label = exe.run(inference_program, feed={feed_target_names[0]: tensor_img}, fetch_list=fetch_targets)
对于Edgeboard上面的PaddleMobile,咱们计算如下代码的运行时间调试
PaddleTensor tensor; tensor.shape = std::vector({1, input_channel, input_width, input_height}); tensor.data = PaddleBuf(data, sizeof(data)); tensor.dtype = PaddleDType::FLOAT32; std::vector paddle_tensor_feeds(1, tensor); PaddleTensor tensor_out; tensor_out.shape = std::vector({}); tensor_out.data = PaddleBuf(); tensor_out.dtype = PaddleDType::FLOAT32; std::vector outputs(1, tensor_out); predictor->Run(paddle_tensor_feeds, &outputs);
如下为两个模型的评测数据图片
ResNet开发
Edgeboard:
CPU:
GPU:
Mobile_Net
Edgeboard:
GPU:
CPU:
总结:
下表为两个模型预测速度的对比,从中来看,其速度相对于V100的GPU甚至还有必定的优点,让人难以相信。我的的分析是因为如下几个缘由
我在进行模型预测的时候,使用钳表对功率进行了大概的估计(条件有限),钳表的读数在0.6A-8A之间变化。结合使用的12V适配器,我大概估计Edgeboard的功耗为8W.
以8W的功耗,在单张图片的预测速度上面领先了几十倍功耗的GPU与CPU。Edgeboard的表现仍是令我比较惊喜。原本想继续移植一个前段时间的大尺度的分割网络Unet进行尝试,想继续试试他最大能够跑的模型大小,但彷佛Edgeboard目前还不支持分割,存在了必定遗憾。
另外我在进行调试的时候,发现过有几个发布版本的固件不是很稳定,有些op有些问题。还发现了Edgeboard在个人两台笔记本电脑上网络不是很稳定,常常出现相互没法ping通的状况,更换PC后正常,暂时还没发现为何。
Edgeboard是我第一款接触的嵌入式神经网络加速设备。Paddle-mobile也是我接触的第一个移动端神经网络框架,也是我接触的第一个基于FPGA实现的加速框架。从我了解这个框架到如今仅仅不到半年的时间,已经发布了多个模型转换工具,下降了开发难度,而且支持EasyDL这种方式。虽然目前仍然有一些不成熟的坑须要填,不过相信在软件的迭代下面,它能成为一个很好的嵌入式原型设计平台。
Mobile-SSD 模型
此次咱们本身训练一个 Mobilenet-SSD 模型,增长了不一样输入维度的状况下,模型运行效率的对比
AIStudio CPU: 2 Cores 8GB Memory
AIStudio GPU: V100 16GB VMem
Edgeboard
训练模型
模型使用AIStudio提供的官方工程 进行训练,训练和预测代码以下
Mobilenet-SSD:https://aistudio.baidu.com/aistudio/projectdetail/41752
按照以前咱们的作法,导出model文件和param文件。
运行预测
咱们执行预测,忽略掉预处理的速度,仅仅计算模型前向传播的时间。
对于AIstudio平台,咱们计算如下代码的运行时间
label = exe.run(inference_program, feed={feed_target_names[0]: tensor_img}, fetch_list=fetch_targets)
对于Edgeboard上面的PaddleMobile,咱们计算如下代码的运行时间
PaddleTensor tensor; tensor.shape = std::vector({1, input_channel, input_width, input_height}); tensor.data = PaddleBuf(data, sizeof(data)); tensor.dtype = PaddleDType::FLOAT32; std::vector paddle_tensor_feeds(1, tensor); PaddleTensor tensor_out; tensor_out.shape = std::vector({}); tensor_out.data = PaddleBuf(); tensor_out.dtype = PaddleDType::FLOAT32; std::vector outputs(1, tensor_out); predictor->Run(paddle_tensor_feeds, &outputs);
如下图片为预测结果,因为时间有限,没有很细致去训练模型,仅仅对比了模型运行的速度。
下表为模型在不一样维度下的预测速度的对比,从中来看,其速度相对于V100的GPU基本处于同一个数量级,远远领先与GPU
在以前的文章里咱们提到,原本想继续移植一个前段时间的大尺度的分割网络Unet进行尝试,想继续试试他最大能够跑的模型大小,但彷佛Edgeboard目前还不支持分割,因此咱们更换了目标检测网络进行尝试。在mobilenet-SSD这个模型上,Edgeboard最大能够跑到700*700的输入维度,而且能保持在16fps之上(不包含输入图像的语出过程),基本上具备实时性。
以前我提到的,在个人两台笔记本电脑上网络不是很稳定,常常出现相互没法ping通的状况,目前通过试验以后,发现问题为板子的网卡在与不支持千兆的网卡进行通讯时候,不能正确的协商,仍然使用千兆模式,使用如下命令固定为百兆便可正常链接
ethtool -s eth0 speed 100 duplex full
Edgeboard是我第一款接触的嵌入式神经网络加速设备。Paddle-mobile也是我接触的第一个移动端神经网络框架,也是我接触的第一个基于FPGA实现的加速框架。从我了解这个框架到如今仅仅不到半年的时间,已经发布了多个模型转换工具,下降了开发难度,而且支持EasyDL这种方式。虽然目前仍然有一些不成熟的坑须要填,不过相信在软件的迭代下面,它能成为一个很好的嵌入式原型设计平台。
做者:Litchll