Windows系统C++版 YOLOv4船舶目标检测实战

2023-10-29

克隆或下载YOLOv4

YOLOv4网址:https://github.com/AlexeyAB/darknet
如果安装了Git软件,可直接克隆项目到本地:
nvcc -V
git clone https://github.com/AlexeyAB/darknet

解决方案生成

在C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet目录下使用vs2019打开sln文件
在这里插入图片描述
打开后如图
在这里插入图片描述

点击重新生成,然后就会在C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet\x64下生成darknet.exe文件

生成训练集和测试集文件

使用PASCAL VOC数据集的目录结构:
建立文件夹层次为 C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet\x64\VOCdevkit\VOC2007
VOC2007下面建立两个文件夹:Annotations和JPEGImages
JPEGImages放所有的训练和测试图片;Annotations放所有的xml标记文件
在这里插入图片描述
在C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet\x64目录下执行

	python genfiles.py

在VOCdevkit \ VOC2007目录下可以看到生成了文件夹labels ,同时在darknet下生成了两个文件2007_train.txt和2007_test.txt。

2007_train.txt和2007_test.txt分别给出了训练图片文件和测试图片文件的列表,含有每个图片的路径和文件名。
另外,在VOCdevkit\VOC2007\ImageSets\Main目录下生产了两个文件test.txt和train.txt,分别给出了训练图片文件和测试图片文件的列表,但只含有每个图片的文件名(不含路径和扩展名)。
labels下的文件是images文件夹下每一个图像的yolo格式的标注文件,这是由annotations的xml标注文件转换来的。
最终训练只需要:2007_train.txt,2007_test.txt,labels下的标注文件和 VOCdevkit\VOC2007\JPEGImages下的图像文件。

修改配置文件

1)新建data\voc.names文件
可以复制data\voc.names再根据自己情况的修改;可以重新命名如:data\voc_ship.names
2)新建 data\voc.data文件
可以复制data\voc.data再根据自己情况的修改;可以重新命名如:data\voc_ship.data
3)新建cfg\yolov4-voc.cfg
可以复制cfg\yolov4-custom.cfg再根据自己情况的修改;可以重新命名cfg\yolov4_ship.cfg:
batch=64 subdivisions=64 (如果显存溢出改为16)
max_batches = 2000(这里为2000乘以类别数)
steps=1600,1800(这里为max_batches的百分之80和90)

在Darknet中,batch和subdivisions是结合使用的,例如这儿的batch=64,subdivisions=16表示训练的过程中将一次性加载64张图片进内存,然后分16次完成前向传播,意思是每次4张,前向传播的循环过程中累加loss求平均,待64张图片都完成前向传播后,再一次性后传更新参数。

subdivisions一般设置16,根据尝试,通常设置为8的倍数,batch的值可以根据显存占用情况动态调整,一次性加减subdivisions大小即可,通常情况下batch越大越好,还需注意一点,在测试的时候修改batch和subdivisions参数为1,避免发生错误。
width也可以设置为不等于height,通常情况下,width和height的值越大,对于小目标的识别效果越好,但受到了显存的限制,读者可以自行尝试不同组合。一次为跑完一个batch,训练次数达到max_batches后停止学习。
在cfg\yolov4_ship.cfg文件中,三个yolo层和各自前面的convolutional层的参数需要修改:
三个yolo层都要改:yolo层中的classes为类别数,每一个yolo层前的convolutional层中的filters =(类别+5)* 3
例如:
yolo层 classes=1, convolutional层 filters=18

训练自己的数据集

1)下载预训练权重文件
yolov4.conv.137
放置在C:\Users\lindsay\Desktop\darknet_yolov4\darknet\build\darknet\x64目录下
这里的训练使用迁移学习,所以下载的yolov4在coco数据集上的预训练权重文件(不含全连接层)
2)训练网络

darknet.exe detector train data\voc_ship.data cfg\yolov4_ship.cfg  backup\yolov4.conv.137 -map

如需要显示训练过程的map变化,在命令末尾加-map
整个训练如下图所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由于我是中断后在训练的,所以前面的chart被更新了,只剩下后面的chart
断点训练命令如下:

darknet.exe detector train data\voc_ship.data cfg\yolov4_ship.cfg  backup\yolov4_ship_last.weights -map

以下为训练完的权重文件

在这里插入图片描述

创建测试cfg文件

训练好后可以在backup目录下看到权重文件。
尝试test前要修改cfg文件,切换到test模式。可以重新建立一个测试cfg文件, 如yolov4-ballship.cfg
设置:
batch=1 subdivisions=1

运行命令

 darknet.exe detector test data\voc_ship.data cfg\yolov4_ship_test.cfg backup\yolov4_ship_last.weights testfiles\000678.jpg

在这里插入图片描述

注意事项:

当报显存满的错误时,我调节batch并没有解决问题,我降低了网络的输入大小为320*320解决的这个问题,但是训练出来的模型明显对小目标不太鲁棒。

一起开启新世界的大门吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows系统C++版 YOLOv4船舶目标检测实战 的相关文章

  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft

随机推荐

  • Jetpack学习之Navigation

    Jetpack提供了一个名为Navigation的组件 用来管理页面 Actvity和Fragment 以Fragment为主 和App bar Navigation的优势 可视化的页面导航图 便于理清页面间的关系 通过destinatio
  • Java基础:Java的优点和缺点

    优点 1 跨平台 可移植性 是Java的核心优势之一 Java的运行是通过JVM来实现的 只需要在操作系统上安装对应的虚找机即可运行 节省代码重复编写时间 2 面向对象 Java是完全的面向对象语言 非常适合大型软件的设计和开发 3 简单性
  • 使用Vue调用后台接口

    最近在学习使用vue 看完调接口之后 立马使用springboot作为后台 跃跃欲试 很尴尬 刚刚写完一个后台 vue调用就出错了 1 跨域的问题 我还以为是需要的接口和我的接口不一致 后来知道并不是端口问题 解决办法 前台vue的调用地址
  • 利用script标签实现的跨域名AJAX请求(ExtJS)

    在AJAX应用环境中 由于安全的原因 浏览器不允许XMLHttpRequest组件请求跨域资源 在很多情况下 这个限制给我来带来的诸多不便 很多同行 研究了各种各样的解决方案 1 通过修改document domain和隐藏的IFrame来
  • Java中常见的异常总结,Exception如何捕获和处理

    什么是异常 异常机制 异常机制是指当程序出现错误后 程序如何处理 具体来说 异常机制提供了程序退出的安全通道 当出现错误后 程序执行的流程发生改变 程序的控制权转移到异常处理器 通俗一点来说 就是为了让程序不被中断 继续执行 程序错误 1
  • 13-2_Qt 5.9 C++开发指南_线程同步_QMutex+QMutexLocker(目前较为常用)

    文章目录 1 线程同步的概念 2 基于互斥量的线程同步 3 QMutex实现线程同步源代码 3 1 qdicethread h 3 2 qdicethread cpp 3 3 dialog h 3 4 dialog cpp 4 QMutex
  • AI资讯--2017年资讯汇总

    九个研究方向 持续学习 Continual learning 可解读的决策 Explainable decisions 安全飞地 Secure enclaves 对抗学习 Adversarial learning 在保密数据上共享学习 Sh
  • Beanutils.copyProperties

    BeanUtils提供对Java反射和自省API的包装 其主要目的是利用反射机制对JavaBean的属性进行处理 使用效果 使用前 UserInfo userInfo UserInfo form User user new User use
  • 搭建菜谱应用微信小程序-前后端

    搭建菜谱应用微信小程序 前后端 框架简析 后端使用TP6框架 mysql 前端使用uni app 代码 框架简析 后端使用TP6框架 mysql 使用了这个项目来修改精简 https gitee com jameson512 novelap
  • Spring Cloud学习笔记【消息总线-SpringCloud Bus】

    SpringCloud Bus概述 概述 Spring Cloud Bus是Spring Cloud生态系统中的一个组件 用于实现微服务架构中的消息总线 它利用了轻量级消息代理 如RabbitMQ或Kafka 作为通信中间件 实现了在分布式
  • EaseUS Data Recovery Wizard Technician数据恢复软件安装

    EaseUS Data Recovery Wizard Technician是最好的数据恢复软件 可以解决所有的数据丢失问题 支持从硬盘 外置硬盘 U盘 存储卡 数码相机 手机 音乐播放器等存储介质中恢复因删除 格式化 软件崩溃 硬盘损坏
  • 【达摩院OpenVI】图像MOS评价协助清理“垃圾”照片

    团队模型 论文 博文 直播合集 点击此处浏览 一 背景 MOS Mean Opinion Score 是一种常用的主观质量评价方法 常用于视频 图像等多媒体领域中的质量评价 MOS视觉评价通常是通过让受试者观看视频 图像 对视频的清晰度 锐
  • 数组指针 一维

    概念 我们把指向数组的指针叫做数组指针 后面还会学到指针数组 这两个是不一样的 根据中学语文偏正词组的知识可以知道 前者是指针 后者是数组 数组的指针其实就是数组在内存的起始地址 先看一个例子 int a 6 i 那么a i 和 a i 是
  • 目标检测常用评价指标及其计算方法

    目录 一 目标检测常用评价指标 二 速度指标 三 精度指标 1 混淆矩阵 2 Precision Recall F1 F 1 Precision 2 Recall 3 F1 4 F 3IoU Intersection over Union
  • C++字符串与转移字符

    先看以下代码 include
  • WCE下添加fliter及使用filter(二)

    转载请标明是引用于 http blog csdn net chenyujing1234 完成注册表cim capture reg START CIM Capture DShow filter HKEY CLASSES ROOT Filter
  • CSDN博客的文字颜色、字体和字号设置

    文章目录 一 文本颜色设置 字体颜色参考 二 文本字号设置 三 文本字体设置 四 实战演练 五 转载自 一 文本颜色设置 代码 font color red 1 我是文本 红色red font font color blue 2 我是文本
  • 倒计时小插件,懒人专用

    一 下载该插件 下载地址 https download csdn net download weixin 43684214 78400201 二 解压后 打开浏览器的开发者模式 三 安装后效果如图
  • 在openEuler平台构建带timescaledbV2时序数据库插件的PostgreSqlV14.5容器

    在openEuler平台部署特定版本的PostgreSql在安装包收集上存在较大难题 本次需求为制作zabbix系统所需的timescaledbV2插件的PostgreSqlV14 5数据库 在评估多种方案后 采用了基于CentOS底包制作
  • Windows系统C++版 YOLOv4船舶目标检测实战

    克隆或下载YOLOv4 YOLOv4网址 https github com AlexeyAB darknet 如果安装了Git软件 可直接克隆项目到本地 nvcc V git clone https github com AlexeyAB