树莓派运行yolo fastest优化

前言

yolo fastest的ncnn例子中,第一版默认启用bf16s加速,但是最近的版本并没有启用。
主要做了如下优化
1.更改树莓派系统为Raspbian-64位
2.启用ncnn的bf16s加速

第一部分—安装Raspbian-64位系统

一,下载镜像和工具

1.镜像下载
树莓派64位镜像文件
2.SD Card Formatter下载
SD Card Formatter
3.烧录工具下载
win32DiskImager

二,烧录系统

这一部分省略,和网上大部分操作一样。

三,增加wifi连接配置和ssh服务

SD卡插入电脑(暂时不要插入树莓派),打开boot盘,在根目录下新建两个文件,wpa_supplicant.conf和ssh。ssh文件为空文件,向wpa_supplicant.conf文件中写入接下来要连接的wifi信息,格式如下:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1network={ssid="wifi名称"
psk="WiFi密码"
key_mgmt=WPA-PSK
priority=1
}network={ssid="WiFi-B"
psk="12345678"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1
}

保存后,拔卡插入树莓派,通电等候连接wifi。然后通过路由器获得ip地址。

四,更改镜像源

利用putty等工具登录树莓派后,输入
备份原始镜像

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

查看

sudo vi /etc/apt/sources.list

将原始镜像全部删除,修改为:

deb http://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian-security/ buster/updates main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian buster-updates main contrib non-free
# Uncomment deb-src lines below then 'apt-get update' to enable 'apt-get source'
#deb-src http://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free
#deb-src http://mirrors.tuna.tsinghua.edu.cn/debian-security/ buster/updates main contrib non-free
#deb-src http://mirrors.tuna.tsinghua.edu.cn/debian buster-updates main contrib non-free

再将输入

sudo vi /etc/apt/sources.list.d/raspi.list

修改为

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

更新一下

sudo apt-get update
sudo apt-get upgrade

完成镜像修改!

五,下载桌面

sudo apt-get install xrdp

之后重启一下树莓派

sudo reboot

六,远程桌面连接

win10中搜索程序:远程桌面连接

输入ip地址后,进入登录界面。登录账号:pi ;密码:raspberry。
既可进入树莓派桌面系统。如图

第二部分—yolo-fastest优化

一,选用ncnn作为基础部署框架

这一部分参考:yolo-fastest ncnn部署

二,启用bf16s优化

1.参考
对于类似树莓派等小型设备,算力不强,需要减少计算量。这一部分主要参考:https://github.com/Tencent/ncnn
在faq.md文件中中有两句话介绍

net.opt.use_packing_layout = true;
net.opt.use_bf16_storage = true;

以及参考https://zhuanlan.zhihu.com/p/112564372
但是刚开始看有点懵逼!
2.实例参考
从上面两句中看到主要是找到这两句指令的具体操作位置,在ncnn库中,有一个examples文件夹,里面有很多ncnn实现的例子,在yolov5.cpp文件中存在:

ncnn::Net yolov5;yolov5.opt.use_vulkan_compute = true;// yolov5.opt.use_bf16_storage = true;

分析应该是在初始化网络处添加net.opt.use_bf16_storage = true;既可。
以及在yolov4.cpp的56行处

yolov4->opt.use_packing_layout = true;

也是在初始化网络处添加该指令。
3.yolo-fastest中启用bf16
兜兜转转,该说正事了。
打开sample/ncnn/src/YoloDet.cpp文件
网络初始化处添加上述指令,关键字YoloDet::init。

#include "YoloDet.h"ncnn::Net DNet;static ncnn::PoolAllocator g_blob_pool_allocator;
static ncnn::PoolAllocator g_workspace_pool_allocator;int YoloDet::init(const char* paramPath, const char* binPath)
{DNet.opt.use_packing_layout = true;DNet.opt.use_bf16_storage = true;printf("Ncnn mode init:\n %s \n %s\n", paramPath, binPath);g_blob_pool_allocator.clear();g_workspace_pool_allocator.clear();g_blob_pool_allocator.set_size_compare_ratio(0.0f);g_workspace_pool_allocator.set_size_compare_ratio(0.0f);DNet.load_param(paramPath);DNet.load_model(binPath);return 0;
}int YoloDet::detect(cv::Mat& srcImg, std::vector<TargetBox>& dstBoxes)
{//DNet.opt.use_packing_layout = true;//DNet.opt.use_bf16_storage = true;ncnn::Mat in = ncnn::Mat::from_pixels_resize(srcImg.data, ncnn::Mat::PIXEL_BGR2RGB,\srcImg.cols, srcImg.rows, IW, IH);//Normalization of input image dataconst float mean_vals[3] = {0.f, 0.f, 0.f};const float norm_vals[3] = {1/255.f, 1/255.f, 1/255.f};in.substract_mean_normalize(mean_vals, norm_vals);//Forwardncnn::Mat out;ncnn::Extractor ex = DNet.create_extractor();ex.set_num_threads(NUMTHREADS);ex.input("data", in);ex.extract("output", out);//doresultdstBoxes.resize(out.h);for (int i = 0; i < out.h; i++){const float* values = out.row(i);dstBoxes[i].cate = values[0];dstBoxes[i].score = values[1];dstBoxes[i].x1 = values[2] * srcImg.cols;dstBoxes[i].y1 = values[3] * srcImg.rows;dstBoxes[i].x2 = values[4] * srcImg.cols;dstBoxes[i].y2 = values[5] * srcImg.rows;}return 0;
}

修改后重新编译,运行一下

sh build.sh
./demo

可以看到速度有一定的提高,但是还存在问题,我没有开启bf16s时,每一帧用时大概是120ms;开启后100ms。

三,查看cpu运行情况

cpu运行情况如下,可以看到没有使用多少。

继续查找原因,在sample/ncnn/src/include/YoloDet.h中,有一句代码,指定运行cpu线程数,原始值为8,但是树莓派4b是四核的,因此修改为4.测试发现修改小数值,速度还快了。并重新编译运行。结果达到qiuqiu大佬在树莓派4b上的效果。

树莓派运行yolo fastest启用bf16加速相关推荐

  1. 【精华】YOLO fastest/YOLOX/YOLO fastestv2/Nanodet/Nanodet Plus模型对比

    目录 YOLO fastest/YOLOX/YOLO fastestv2/Nanodet/Nanodet Plus模型对比 (1)网络结构 1> YOLO fastest 2> YOLOX ...

  2. 计算机硬件加速怎么开,启用硬件加速是什么 是如何进行的【详解】

    启用硬件加速 是什么?简而言之,硬件加速就是利用硬件模块来替代软件算法以充分利用硬件所固有的快速特性.计算机显示使用硬件加速会快些,但会在投影仪或截图时发现显示区是黑的,这时就要关闭硬件加速(硬件加速 ...

  3. linux如何关闭硬件加速,启用硬件加速是什么意思?如何关闭【详解】

    导语:小编相信,经常会使用到电脑的朋友们,对于启用硬件加速这个词一定都是不陌生的吧!可是呢,对于一些电脑小白们来说,往往会搞不清楚,这个启用硬件加速到底是个什么意思呢?启用之后,我们的电脑又会发生什么 ...

  4. 怎么关闭计算机硬件加速,启用硬件加速是什么意思?如何关闭[详细说明]

    引言:我相信经常使用计算机的朋友必须熟悉"硬件加速"一词!但是,对于某些计算机新手,他们常常感到困惑.启用硬件加速是什么意思?启用它之后,我们的计算机会发生什么?有些人不知道在启用 ...

  5. 如何在VirtualBox中启用3D加速和使用Windows Aero

    VirtualBox's experimental 3D acceleration allows you to use Windows 7's Aero interface in a virtual ...

  6. vmware linux 3d加速,Ubuntu虚拟机安装Virtualbox增强功能启用3D加速

    本文介绍如何为ubuntu虚拟机安装Virtualbox增强功能(英文名叫Guest Additions),很多同学都感觉ubuntu虚拟机非常卡,这是因为Unity桌面需要3D支持,而要在virtu ...

  7. linux虚拟机流畅,启用3D加速让Ubuntu 20.04虚拟机更快更流畅

    原标题:启用3D加速让Ubuntu 20.04虚拟机更快更流畅 在这个快速教程中,我将向你展示如何在VirtualBox上正确地启用3D加速,如果你想让你的Ubuntu 20.04 LTS虚拟机运行的 ...

  8. [转] 如何在VirtualBox中启用3D加速和使用Windows Aero

    VirtualBox's experimental 3D acceleration allows you to use Windows 7's Aero interface in a virtual ...

  9. Hadoop纠删码算法启用ISA-L加速库

    在前文HDFS纠删码(Erasure Coding)一文中提到,HDFS启用ISA-L存储加速库,有有助于提升HDFS纠删码的编码和解码效率. 版本说明如下: 软件 版本 Hadoop 3.1.0 i ...

  10. 【如何在 Debian、Ubuntu 或 Linux Mint 上的 Google Chrome、Brave、Vivaldi 和 Opera 浏览器中启用硬件加速视频解码】

    如何在 Debian.Ubuntu 或 Linux Mint 上的 Google Chrome.Brave.Vivaldi 和 Opera 浏览器中启用硬件加速视频解码   铬, 操作方法, 视频 G ...

最新文章

  1. python3 调用字符串对应的函数
  2. android c# websocket
  3. JAVA学习(七)__Spring的@Autowired注入规则
  4. Gartner:基础设施和运营领域10大技术趋势
  5. 汉诺塔问题深度剖析(python实现)
  6. LVS负载均衡-NET、DR模式配置
  7. 【渝粤教育】国家开放大学2018年秋季 2726T畜禽生产概论 参考试题
  8. setup2go制作安装程序
  9. g++是什么_飞度车主开奔驰G级的一天,会是什么样的体验?
  10. NodeJS基础2---1 Promise小球运动
  11. 一文详解三维重建中的立体匹配
  12. Codeforces 505 A Mr. Kitayuta's Gift【暴力】
  13. 20行Python代码爬取王者荣耀全皮肤
  14. CSMA/CD-CSMA/CA
  15. 虚拟服务器跟目录,如何找虚拟主机根目录?
  16. 云计算、云服务器、云数据库和云存储基本介绍
  17. Peewee的基本使用
  18. 我国开始研制电子计算机,我国从( )年开始研制电子计算机。
  19. 《为什么99%的人不适合做区块链投资》
  20. 官宣, CSDN 2018博客之星获奖名单!

热门文章

  1. GeoHash在空间道路密度计算中的应用-以mobike骑行轨迹为例
  2. FineBI 的登录锁定配置修改
  3. openssl编程-DH
  4. Google Docs 简介
  5. Utility工具类:
  6. 德勤中国持续深化与亚马逊云科技的合作,进一步扩充云技术人才储备
  7. Python源文件改写。编写一个程序,读取一个Python源程序文件source.py,将文件中所有除保留字外的小写字母换成大写字母。生成后的文件要能够被Python解释器正确执行。
  8. MySQL基础 - 连接查询
  9. C/C++编程:trivial和non-trivial
  10. 最大公约数和最小公倍数(深入理解)