【yolofastest上手】

一、前言

yolofastest网上资料比较少,也没有视频教学,所以想要使用参考了很多资料,只能说各资料都不尽全,让刚接触的小白无从下手。
参考资料:
github地址
yolo-fastest 快速上手
修改参数遇到的问题
能在ARM-CPU上实时识别图像的深度学习算法之yolo-fastest
手把手教你在服务器上用YOLOv4训练和测试数据集(保姆级)最好的一集
VOC2007数据集详细分析
训练的时候遇到的问题

二、准备工作

环境首先要配置好,否则一行代码也运行不了,而且遇到各种错误还是那种无法解决的,忙活一天结果发现是环境的问题,全是无用功了是,我研一同学都这么说,明明忙乎一天,但实际没什么进度,真是要功劳有苦劳,但除你自己外都是唯结果论,还好师兄很耐心容忍我的菜。本人环境如下:
1.linux
2.cuda11.8+cudnn
3.opencv
4.vscode

三、测试

1、克隆代码

git clone https://github.com/dog-qiuqiu/Yolo-Fastest
然后你就获得到名为Yolo-Fastest的文件夹,文件目录结构如下在这里插入图片描述

2、编辑makefile文件并make

切换到Yolo-Fastest文件目录下,编辑makefile文件(重点)

GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
AVX=1
OPENMP=0
LIBSO=0
ZED_CAMERA=0
ZED_CAMERA_v2_8=0

# set GPU=1 and CUDNN=1 to speedup on GPU
# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)
# set ZED_CAMERA=1 to enable ZED SDK 3.0 and above
# set ZED_CAMERA_v2_8=1 to enable ZED SDK 2.X

USE_CPP=0
DEBUG=0

# ARCH= -gencode arch=compute_35,code=sm_35 \
#       -gencode arch=compute_50,code=[sm_50,compute_50] \
#       -gencode arch=compute_52,code=[sm_52,compute_52] \
# 	    -gencode arch=compute_61,code=[sm_61,compute_61]

OS := $(shell uname)

# GeForce RTX 3070, 3080, 3090
ARCH= -gencode arch=compute_86,code=[sm_86,compute_86]

#后面的内容我就不写了

我修改的地方如下,别的地方都没动
1、ARCH参数,makefile文件里都有自己显卡相对应的参数,找到自己显卡型号然后把相应的注释去掉就行,然后把上面的ARCH注释掉,只保留自己显卡对应的ARCH,比如我的RTX3090就是上面。
2、NVCC=/usr/local/cuda-11.8/bin/nvcc nvcc修改成自己的cuda相对应版本
3、全局搜索,makefile文件中的cuda修改成cuda-11.8,例如CFLAGS+= -DCUDNN -I/usr/local/cuda-11.8/include
修改完成之后,执行make -j,这时候可能会遇到一些错误,报什么错误就搜索一下,我之前遇到的错误就是显卡驱动未更新、ARCH未修改、opencv没安装之类的错误,总之就是环境错误,一定要把环境先配置好。执行完之后会出现darknet文件,这时候就可以进行测试了。

3、进行测试

官方文档上写bash image_yolov4.sh,那看一下这个文件里写了什么内容:

./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights data/dog.jpg -i 0 -thresh 0.25

在看一下啊,但是咱没有yolov4.weights这个权重文件呀,这个文件还是我之前上网搜索然后下载粘贴到文件下的,官方文档也不怎么靠谱。这个权重文件也放下面吧。
链接:https://pan.baidu.com/s/1xzsaSzV7jLoBTZA-JLXXfA
提取码:s5zw
测试没什么问题就可以训练自己的数据了,在这里只写图片。
在这里插入图片描述

训练数据

1、获取预训练权重文件

文档上是这么写的:
./darknet partial yolo-fastest.cfg yolo-fastest.weights yolo-fastest.conv.109 109
但是欸,看一下咱们的文件目录结构,这个什么yolo-fastest.cfg、yolo-fastest.weights,没有这俩文件啊!报错就是cant open file,你说说这怎么办,文档写的个啥,cfg文件里也没有这俩啊,我就找了挺久,以为这俩文件也能上网跟yolov4.weights一样能搜到下载呢,但是搜不到,寄。后来查看文件夹,找到了。
在这里插入图片描述
藏得挺深,在这个文件夹里,好了,咱们把上面的权重文件和cfg放到Yolo-Fastest的目录下并重命名在执行代码。
在这里插入图片描述
这样就获取到yolo-fastest.conv.109文件了,也不知道为啥一定要这样命名。
在这里插入图片描述

2、准备数据集

要准备哪些?步骤省略,我是师兄给我的,我也不知道怎么制作数据集。最终需要的文件如下(红色框框):
在这里插入图片描述

其中重要的是obj.data文件
在这里插入图片描述

准备好之后,把这些文件都放入data文件夹中。

3、修改cfg文件

在进行训练之前,要修改cfg中的参数
cfg文件中的参数注释
我在这里修改了通道数以及classes,注意修改了classes之后还需要修改filters参数,我之前就没修改filters参数,就会报错Error: l.outputs == params.inputs filters= in the [convolutional]-layer doesn't correspond to classes= or mask= in [yolo]-layer
以下是解决方案,参考一下触类旁通举一反三。filters=(classes+5)×3。
吐槽一下, 还vip收费文章被恶心到了gdx
在这里插入图片描述
但是我在cfg文件里,看到有非常多的filters怎么办,另外classes有两处,都需要修改的,filters就是在两个classes上面,这两处。
在这里插入图片描述
在这里插入图片描述
好了准备工作都完成了。

4、训练

文档上是这么写的
./darknet detector train voc.data ./Yolo-fastest/VOC/yolo-fastest.cfg yolo-fastest.conv.109
但是,咱们的data和cfg文件不是上面写的,需要改成自己的。
./darknet detector train data/obj.data yolo-fastest.cfg yolo-fastest.conv.109
运行,结果报错了!
在这里插入图片描述
它说了,If error occurs- run training with flag: -dont show好,那么就加上这句
./darknet detector -dont_show train data/obj.data yolo-fastest.cfg yolo-fastest.conv.109
好了没有错误了,训练好的模型文件将会保存在backup文件夹下面。训练的差不多了,打开backup文件夹看一下。
在这里插入图片描述
感觉差不多了就ctrl+c停止训练,然后看一下成果。

5、检验成果

获取mAP指标
./darknet detector map data/obj.da ta ModelZoo/yolo-fastest-1.1_coco/yolo-fastest-1.1.cfg backup/yolo-fastest-1_10000.weights -points 11

./darknet detector map data/obj.data yolo-fastest.cfg backup/yolo-fastest_1000.weights -points 11
在这里插入图片描述
坏了,他这个怎么显示,mAP是0呢,中间肯定出错了。
从头梳理一遍,我生成darknet,进行小狗图片测试成功,darknet文件是没错的;
其次是获取预训练权重文件、准备数据集和修改cfg文件。好,我就直接说之前错误的原因吧:
1、没有准备test.txt(一开始只有train.txt),obj.data中没有valid这一行。
2、我先修改了cfg再获取的预训练权重文件。
这两个错误以后要避免!另外不一定要等到训练很久之后检验mAP的时候才发现错误。出现如下错误就要及时停止:
1、Yolo-Fastest/chart_yolo-fastest.png这个文件的图像不正常,正常的如下,否则停止修改错误再训练
在这里插入图片描述
2、控制台出现以下错误
在这里插入图片描述

重新修改好错误重新训练,获取mAP数据如下,效果不错。
./darknet detector map data/obj.data yolo-fastest.cfg backup/yolo-fastest_last.weights -points 11
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/280414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MES系统中的电子看板:真正实现数字化车间可视化

在生产制造过程中,看板管理扮演着至关重要的角色。通过看板,我们能够实时了解生产情况、物料需求、质量预警等信息,从而更好地控制生产过程。作为万界星空科技MES管理系统中的一个基本模块,看板管理为企业的生产管理提供了有力支持…

【Pytorch】学习记录分享10——PyTorchTextCNN用于文本分类处理

【Pytorch】学习记录分享10——PyTorchTextCNN用于文本分类处理 1. TextCNN用于文本分类2. 代码实现 1. TextCNN用于文本分类 具体流程: 2. 代码实现 # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as np…

嵌入式科普(8)ESP-IDF newlib相关介绍和对比分析

一、目的/概述 二、资料来源 三、ESP-IDF简介 3.1 ESP-IDF FreeRTOS 3.2 ESP-IDF heap_caps 3.3 ESP-IDF newlib 四、对比 嵌入式科普(8)ESP-IDF newlib相关介绍和对比分析 一、目的/概述 1、在我的嵌入式科普(6)你听说过FreeRTOS heap6吗?…

图文证明 牛顿-莱布尼茨公式

牛顿-莱布尼茨公式 牛顿-莱布尼茨公式是微积分中的基本定理之一,它描述了函数的导数和不定积分之间的关系。 该公式通常用来计算定积分。设函数f(x)在区间[a, b]上连续,且F(x)是f(x)在该区间上的一个原函数 即F’(x) f(x)。则牛顿-莱布尼茨公式表示为&…

一篇五分生信临床模型预测文章代码复现——Figure 10.机制及肿瘤免疫浸润(九)——ssGSEA——倒数第三节

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

143.【Nginx-02】

Nginx-02 (五)、Nginx负载均衡1.负载均衡概述2.负载均衡的原理及处理流程(1).负载均衡的作用 3.负载均衡常用的处理方式(1).用户手动选择(2).DNS轮询方式(3).四/七层负载均衡(4).Nginx七层负载均衡指令 ⭐(5).Nginx七层负载均衡的实现流程 ⭐ 4.负载均衡状态(1).down (停用)(2)…

Oracle 19c OCP 1z0 082考场真题解析第17题

考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为云贝教育郭一军guoyJoe原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 17. Which three …

将“渴望“乐谱写入AT24C02并读出播放

#include <reg51.h> // 包含51单片机寄存器定义的头文件 #include <intrins.h> //包含_nop_()函数定义的头文件 #define OP_READ 0xa1 // 器件地址以及读取操作,0xa1即为1010 0001B #define OP_WRITE 0xa0 // 器件地址以及写…

手拉手Springboot获取yml配置文件信息

环境介绍 技术栈 springboot3 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1.7 配置文件说明&#xff1a;启动配置文件优先级&#xff1a;properties高于yml 配置文件application.yml yml是 JSON 的超集&#xff0c;简洁而强大&#xf…

【网络安全 | XCTF】simple_transfer

考察kali基本工具的使用 方法一 打开文件如图&#xff1a; 存在较多协议&#xff0c;将协议分级&#xff1a; 可以看到DLEP协议占比最大&#xff1a; 将其作为过滤器应用&#xff1a; 搜索DLEP&#xff1a; 并没有有利信息&#xff0c;但观察到多数数据包损坏&#xff1a; 执行…

OCP NVME SSD规范解读-4.NVMe IO命令-2

NVMe-IO-3&#xff1a; 由于设备具有掉电保护功能&#xff08;如Power Loss Protection&#xff0c;PLP&#xff09;&#xff0c;因此在以下情况下&#xff0c;性能不应降低&#xff1a; FUA&#xff08;Force Unit Access&#xff09;&#xff1a;是计算机存储设备中的一种命…

【Proteus仿真】【Arduino单片机】汽车尾灯控制设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用按键、LED模块等。 主要功能&#xff1a; 系统运行后&#xff0c;系统运行后&#xff0c;系统开始运行&#xff0c;K1键控制左转向灯&#x…

Java 运算符

&&运算比||运算的优先级高 C与Java

跌倒识别摄像头

跌倒识别摄像头是一种利用人工智能技术识别和监测摔倒事件的系统&#xff0c;它可以在发生跌倒时及时发出警报&#xff0c;提高老年人和需要监护的人群的安全。该摄像头结合了图像识别和运动检测技术&#xff0c;能够准确地识别跌倒事件&#xff0c;大大减少了因跌倒而导致的风…

html文件Js写输入框和弹框调接口jQuery

业务场景&#xff1a;需要使用写一个html文件&#xff0c;实现输入数字&#xff0c;保存调接口。 1、使用 JS原生写法&#xff0c; fetchAPI调接口&#xff0c;使用 alert 方法弹框会阻塞线程&#xff0c;所以写了一个弹框。 <!DOCTYPE html> <html lang"en"…

电表通讯协议DLT645-2007编程

1、协议 电表有个电力行业推荐标准《DLT645-2007多功能电能表通信协议》&#xff0c;电表都支持&#xff0c;通过该协议读取数据&#xff0c;不同的电表不需要考虑编码格式、数据地址、高低位转换等复杂情况&#xff0c;统一采集。 不方便的地方在于这个协议定义得有点小复杂…

Unity坦克大战开发全流程——游戏场景——主玩家——可击毁箱子

游戏场景——主玩家——可击毁箱子 添加特效 CubeObj的代码如下 using System.Collections; using System.Collections.Generic; using UnityEngine;public class CubeObj : MonoBehaviour {//关联的奖励物品public GameObject[] rewardObjects;//关联的特效public GameObject …

【分布式配置中心】聊聊Apollo的安装与具体配置变更的原理

【管理设计篇】聊聊分布式配置中心 之前就写过一篇文章&#xff0c;介绍配置中心&#xff0c;但是也只是简单描述了下配置中心的设计点。本篇从apollo的安装到部署架构到核心原理进一步解读&#xff0c;大概看了下apollo的原理&#xff0c;感觉没有必要深究&#xff0c;所以就…

RHCE9学习指南 第12章 ssh远程登录系统和远程拷贝

很多时候服务器并没有显示器&#xff0c;我们也不可能每次都通过控制台去管理服务器&#xff0c;这时就需要远程登录。远程登录到服务器可以通过Telnet或ssh的方式。但是用Telnet登录&#xff0c;整个过程都是以明文的方式传输的&#xff0c;不安全。所以&#xff0c;建议使用s…

Cisco模拟器-交换机端口的隔离

设计要求将某台交换机的端口划分在不同的VLAN。以实现连接在相同VLAN端口上的计算机可以通信&#xff0c;而连接在不同VLAN端口上的计算机无法通信的目的。 通过设计&#xff0c;一方面可以加强计算机网络的安全&#xff0c;另一方面通过隔绝不同VLAN间的广播包也可以提高网络…