YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(下)

YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上)
YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(中)
YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(下)

文章目录

  • 声明
  • 4 YOLO-Fastest
    • 4.1 工程编译
      • 4.1.1 Windows版本(基于Windows 10)
      • 4.1.2 Linux版本(基于Kubuntu20.04)
        • (1)CUDA的版本选择和安装
        • (2)OpenCV编译
        • (3)Darknet工程编译
    • 4.2 示例运行
    • 4.3 网络结构分析
      • 4.3.1 YOLO-Fastest1.0-XL网络结构
      • 4.3.2 网络对深度可分离卷积的使用
      • 4.3.3 网络对 1 × 1 1×1 1×1卷积的使用
      • 4.3.4 网络对短连接(Shortcut)的使用
    • 4.4 损失函数
    • 4.5 网络在VOC上的训练
      • 4.5.1 制作可用于YOLO网络训练的VOC数据集
      • 4.5.2 数据集和标注文件的存放位置
      • 4.5.3 配置&前期准备
        • (1)训练数据准备
        • (2)网络结构修改
        • (3)获取预训练权重
        • (4)网络训练
        • (5)网络测试
    • 4.6 YOLO-Fastest不同版本的网络结构
      • 4.6.1 YOLO-Fastest1.0网络结构
      • 4.6.2 YOLO-Fastest1.1网络结构
      • 4.6.3 YOLO-Fastest1.1-XL网络结构
  • 5 部署
    • 5.1 网络模型的转化
      • 5.1.1 从Darknet到Caffemodel
        • (1)编译CPU版PyCaffe
        • (2)搭建用于模型转换的Anaconda环境
        • (3)修改转换脚本使之支持Python3语法
        • (4)模型转换
      • 5.1.2 从Caffemodel到wk文件
    • 5.2 软件功能和结构设计
    • 5.3 部署事项
      • 5.3.1 将图片转为BGR格式
      • 5.3.2 RuyiStudio配置
  • 6 相关知识
    • 6.1 准确度/精确率(Precision)、召回率(Recall)和mAP
    • 6.2 PASCAL VOC
  • 7 文章之外
    • 7.1 本文编写过程中使用到的工具
  • 后记&祝愿
  • 本文资源共享

声明

本文由 凌然 编写。

当前版本R1.0(预发布)。

作者联系方式:E-mail: WindForest@yeah.net

本文仅为个人学习记录,其中难免存在客观事实的错谬或理解上的歪曲,因此望读者切勿“拿来主义”,由本文的错误造成的损失,作者概不负责。

因在发布期间可能对本文即时修改或校对,因此如非必要请勿转载本文,以免错误的内容在转载后无法得到更新从而对其他人造成误导或负面影响。

4 YOLO-Fastest

[注意]

本章 4.1~4.5 节内容基于YOLO-Fastest1.0-XL网络模型进行,因该版本网络为初代YOLO-Fastest且效果好于非XL版。

4.1 工程编译

4.1.1 Windows版本(基于Windows 10)

在Windows环境下编译YOLO-Fastest工程的步骤网上有很多可以参考的博文或者帖子,这里就不再赘述了。基本的思路是:使用CMake创建/更新VS工程,而后进行编译即可。仅在此记录一下编译过程中需要注意的方面:

  1. 关于CUDA

    • 当前使用CUDA10.2+cuDNN8.0.4.30,尝试使用低版本CUDA(如CUDA8.0)时,编译会出现错误如 未定义标识符 “cudaGraphExec_t”

      [说明]

      在较新的GPU上,低版本CUDA可能无法令Darknet正常工作。例如对于RTX3090,上述组合可能需替换为CUDA11.1+cuDNN8.0.5或更高。

    • 若CMake找不到CUDA环境,且相关的环境变量均已被设置,可以考虑重新安装CUDA。

    • 若使用CMake进行配置时 CUDNN_LIBRARY_DLL 变量显示未找到,需手动进行设置,默认安装位置为:

    • 需确保CMAKE变量的 CMAKE_CUDA_ARCHITECTURES 与本机显卡算力一致。(该项正常情况下应被自动检测)

    • 若开启 CUDNN_HALF 可能导致在某些平台上无法正常执行训练过程,若出现此情况可将此半精度开关关闭。

  2. 关于OpenCV

    • 当前使用的OpenCV版本为:OpenCV4.4.0:opencv-4.4.0-vc14_vc15.exe。其它的某些版本可能会导致编译或运行时错误。
  3. 关于VS工程配置

    • VS工程应生成为Release x64。
    • 在工程文件 darknet.vcxproj 中,需保证对CUDA目标版本设置的正确性。可使用记事本打开该文件,查找关键字 BuildCustomizations 以查看。当前默认使用CUDA11.1。
    • 在VS中,需确保darknet工程属性中OpenCV库路径依赖正确,检查以下:
      • C/C++ -> 所有选项 -> 附加包含目录
      • 链接器 -> 附加库目录
    • 若需同时支持不同算力的GPU,需修改以下位置的算力配置信息:
      • CUDA C/C++ -> Device -> Code Generation
  4. 关于darknet运行

    • 若运行时提示缺少 opencv_world440.dll 文件,可从 PATH_TO_OPENCV/build/x64/vc14/bin 目录下复制得到。
    • 修改训练时数据集和标注文件存放位置,参见 4.5.2 数据集和标注文件的存放位置 章节。

[补充]

如果对使用CMAKE生成工程不熟练或生成的工程不好用,不妨基于已有的工程配置做修改,修改的内容即为上述需要注意的方面。

4.1.2 Linux版本(基于Kubuntu20.04)

[说明]

本节仅用于记录在Kubuntu下编译Darknet工程的所需环境搭建和操作步骤以供训练参考,本章对YOLO-Fastest工程的学习依旧基于Windows环境。

(1)CUDA的版本选择和安装

本节选用CUDA11.1+cuDNN8.0.5版本组合。

在Kubuntu下使用 Ctrl+Alt+3 进入tty终端界面,使用以下命令安装CUDA Toolkit ,根据需要选择要安装的软件包。

整个安装过程需要一定时间,请耐心等待。而后解压 cudnn-11.1-linux-x64-v8.0.5.39.tgz 到CUDA Toolkit安装目录对应的文件夹下即可。

[补充]

直接使用CUDA Toolkit安装NVIDIA Driver可能出现错误,此时可使用:

安装NVIDIA驱动,若只安装CUDA和cuDNN,则编译出的应用程序无法找到 libcuda.so.1 动态库。

最后,将必要的路径添加到 ~/.bashrc

在文件末尾增加:

保存并退出,使用source命令使修改立即生效。

[注意]

使用cp命令进行拷贝时需要使用 -P 参数保持软链接,否则cp命令会以原内容替换软链接导致链接丢失。

(2)OpenCV编译

首先需要为Kubuntu升级apt并安装以下工具:

而后从https://github.com/opencv/opencv/releases/tag/4.4.0下载OpenCV4.4.0源码并解压,在目录下执行:

即可在 ./build/_install 目录下得到编译完成后的OpenCV。

[补充]

如果按照上述步骤自定义安装位置,则需要将运行动态库所在路径添加到环境变量防止编译的应用程序无法找到动态库。

~/.bashrc 文件中增加以下语句:

保存并退出,使用source命令使修改立即生效即可。

(3)Darknet工程编译

下载YOLO-Fastest工程,拷贝到Ubuntu环境并解压。

打开并编辑 Makefile 文件:

  1. 开启 GPU=1CUDNN=1 编译开关,并配置对应的CUDNN安装路径(一般保持默认即可);
  2. 照例配置 ARCH 变量,使其包含所使用的GPU的计算能力设置。GPU算力表见:https://developer.nvidia.com/zh-cn/cuda-gpus
  3. 开启 OPENCV=1 编译开关以支持OpenCV接口。

编译之前,执行以下指令指定OpenCV4的pkg_config路径:

而后执行make编译即可。

[补充]查看程序运行需要的动态库的方法

以及

4.2 示例运行

在工程源码下的 ModelZoo/ 目录下为YOLO-Fastest网络结构配置和预训练权重,这里以 ModelZoo/yolo-fastest-1.0_coco/yolo-fastest-xl* 为例(它的精度会更高一些),可使用如下命令执行预测(命令中各部分路径记得替换):

其中, -i 命令用于分配执行预测任务的GPU,若只有一块GPU,则该值为0。该参数可以省略。

使用YOLO-Fastest1.0-XL检测的执行结果如下:

来源:燕卫博

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年5月18日
下一篇 2021年5月19日

相关推荐