模型训练测试之一:ScaledYOLOv4

2023-10-27

Scaled-YOLOv4:YOLOv4官方改进版!55.8% AP!

很新,我就测下

Github地址
Gitee 地址 推荐

新的改变

聚焦于针对 YOLOv4 的模型缩放(model scale)。
旗下有三款模型

  1. YOLOv4-CSP(面向普通GPU) .;
  2. YOLOv4-tiny(面向低端GPU)
  3. YOLOv4-large(面向高端GPU)
    在这里插入图片描述

1、下载

此处可以指定下载任意所需分支

git clone --branch [tags标签] [git地址]
git clone --branch yolov4-large https://gitee.com/guls/ScaledYOLOv4.git

在这里插入图片描述
文件夹内容如下:
在这里插入图片描述

  1. utils :模型重要组成元件代码;
  2. model :模型结构配置文件;
  3. data :模型数据路径、类别、标签配置文件;
  4. train.py test.py detect.py

2、环境配置

项目文档中,提到可以进行docker环境进行训练和测试,如下

# create the docker container, you can change the share memory size if you have more.
nvidia-docker run --name yolov4_csp -it -v your_coco_path/:/coco/ -v your_code_path/:/yolo --shm-size=64g nvcr.io/nvidia/pytorch:20.06-py3

本着最简单,就在本地机器上进行训练。

  1. Anaconda环境
    pytorch版本没有什么限制,我使用的是pytorch==1.7,其他版本没测试,不过估计没什么问题,因为代码没指定版本
    在这里插入图片描述
  2. install mish-cuda
install mish-cuda, if you use different pytorch version, you could try https://github.com/JunnYu/mish-cuda
代码
cd ScaledYOLOv4
git clone https://github.com/thomasbrandon/mish-cuda
或git clone https://gitee.com/lytlm1994/mish-cuda.git
cd mish-cuda
python setup.py build install

此处建议替换Gitee上的源码,你要说为什么?快就一个字
记住此处在进行编译之前,先将mish-cuda备份一次,后面会用到!
在这里插入图片描述
安装完成
在这里插入图片描述
3. 再次编译mish-cuda
文档中提到

For using pre-trained models:

所以,你要使用预训练模型,再安装一次叭!
可以尝试文档中介绍的下载方式

cd ScaledYOLOv4
git clone https://github.com/thomasbrandon/mish-cuda mc
cd mc

如果安装官方方式下载不下来,那就直接拷贝刚刚的备份文件叭
复制过去之后,就是接下来的步骤,简单重命名

# change all of name which is mish_cuda to mish_mish and build.
# 1. mc/src/mish_cuda -> mc/src/mish_mish

在这里插入图片描述

# 2. mc/csrc/mish_cuda.cpp -> mc/csrc/mish_mish.cpp

在这里插入图片描述

# 3. in mc/setup.py
#   3.1 line 5 -> 'csrc/mish_mish.cpp'
#   3.2 line 11 -> name='mish_mish'
#   3.3 line 20 -> 'mish_mish._C'

在这里插入图片描述
继续:

python setup.py build
# rename mc/build/lib.xxx folder to mc/build/lib

编译之后,你会发现,在mc >> build下面有如下样式文件夹
在这里插入图片描述
此时,将这两个文件夹中的 mish_mish 和 csrc文件夹剪切出来,粘贴在新建的lib文件夹下
在这里插入图片描述
好了,到此处为止,环境配置完全。


3、数据准备

安装data文件夹下各个yaml文件进行配置,常见的VOC数据集即可;
在这里插入图片描述

train: ../coco/train2017.txt         # 训练txt,三类txt的内容格式一致。
val: ../coco/val2017.txt             #
test: ../coco/testdev2017.txt        # 

在这里插入图片描述
每一行代表一张图片的路径
数据文件夹结构如下:

在这里插入图片描述
只需关注train和valid目录下的images 和 labels文件夹
images文件夹里面都是图片
labels文件夹里面是对应images图片同名的txt,如下

在这里插入图片描述
在这里插入图片描述
这是其中一个txt内容格式:

标签 xmin ymin xmax ymax
5 0.4817708333333333 0.4550925925925926 0.13125 0.23425925925925928
注意:我这里是用的yolov5的数据集,需要进行归一化处理,这里我没有还原成标准,这样是可以训练的

在这里插入图片描述
一张图片对应一个txt,图片里包含多少目标,txt里就会有多少行目标信息


4、训练、测试

先附上代码

python train.py --batch-size 8 
				--img 896 896 
				--data coco.yaml 
				--cfg yolov4-p5.yaml 
				--weights 'weights/yolov4-p5.pt' 
				--sync-bn --device 1,3 
				--name yolov4-p5
  1. batch_size: 根据自己显存大小而定;

  2. device:指定GPU序号;

  3. img:图片大小,自己设定,建议先把自己的数据跑一遍;

  4. data:准备好的数据配置文件,里面可以替换类别,txt路径,数量信息;

  5. cfg: 模型配置文件,涉及到模型结构、优化器等训练参数,可以微调,最主要的是把nc参数给修改掉

  6. name:模型名称,要和cfg、预训练模型weights一一对应起来
    在这里插入图片描述
    好,到这里为止,即可开始美好的训练了,如下
    在这里插入图片描述
    这些警告,和使用的pytorch版本有相关,但不影响训练

    打印模型结构。。。
    在这里插入图片描述
    训练进程。。。
    在这里插入图片描述


  • 未完待续,等模型训练出来了,再测试下效果!

tips:docker操作

拉取目标镜像
docker pull nvcr.io/nvidia/pytorch:20.06-py3

在这里插入图片描述
此处,附上我常用的docker操作,方便查看

docker ps -a                                        # 列出所有容器(包括已停止的容器)
docker start <CONTAINER ID|NAME>                    # 启动容器
docker stop <CONTAINER ID|NAME>                     # 停止容器
docker stop $(docker ps -a -q)                      # 停止所有容器
docker rm <CONTAINER ID|NAME>                       # 删除容器(必须是停止的)
docker rm $(docker ps -a -q)                        # 删除所有容器
docker rmi <IMAGE ID>                               # 删除镜像
docker exec -it 775c7c9ee1e1 /bin/bash              # 使用docker exec进入Docker容器
docker search imagename                             # 查找镜像
docker pull imagename                               # 下载最新版
docker pull imagename:5.6                           # 下载指定版本
docker images                                       # 查看本地镜像
docker run imagename                                # 运行镜像
docker run -t -i ubuntu:15.10 /bin/bash             # 使用版本为15.10的ubuntu系统镜像来运行容器
# docker run -d --name mynginx nginx                #启动nginx镜像,没有会自动pull
# docker attach d20f3dc6cd92                        #进入一个正在运行的容器
# docker stop bfd094233f96                          #停止一个容器
docker stop $(docker ps -a -q)                      #停止所有的container,这样才能够删除其中的images:
docker rm bfd094233f96                              #删除一个容器,默认并不会删除运行中的容器。所以删除容器前,必须先停止容器
docker rmi training/sinatra                         #删除本地镜像
docker rmi <image id>                               #删除镜像  删除前必须先停止所有的容器。image id可以通过docker images查看
docker rmi $(docker images -q)                      #删除全部image
docker rm $(docker ps -a -q)                        #如果想要删除所有container的话再加一个指令:
docker rmi $(docker images -q -f "dangling=true")   #清理所有未打过标签的本地镜像,其中 -q 和 -f 是 quiet,–filter 的缩写
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")     # 删除所有id为<None>的镜像
docker logs [container ID or NAMES]                 # 获取容器的输出信息
docker cp container:path hostpath                   # 从容器内复制文件到指定的路径上
								    -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
								    -i 则让容器的标准输入保持打开。
								    –name 使用一个自定义的名字
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模型训练测试之一:ScaledYOLOv4 的相关文章

  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • 围绕 readline 构建的 python 批处理的触发器选项卡完成

    背景 我有一个 python 程序 它导入并使用 readline 模块来构建自制的命令行界面 我有第二个 python 程序 围绕 Bottle 一个 Web 微框架构建 充当该 CLI 的前端 第二个 python 程序向第一个程序打开
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • Django 模型在模板中不可迭代

    我试图迭代模型以获取列表中的第一个图像 但它给了我错误 即模型不可迭代 以下是我的模型和模板的代码 我只需要获取与单个产品相关的列表中的第一个图像 模型 py class Product models Model title models
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • Pandas 根据 diff 列形成簇

    我正在尝试使用 Pandas 根据表示时间 以秒为单位 的列中的差异来消除数据框中的一些接近重复项 例如 import pandas as pd numpy as np df pd DataFrame 1200 1201 1233 1555
  • 如何在 python 中没有 csv.reader 迭代器的情况下解析单行 csv 字符串?

    我有一个 CSV 文件 需要重新排列和重新编码 我想跑 line line decode windows 1250 encode utf 8 在由 CSV 读取器解析和分割之前的每一行 或者我想自己迭代行 运行重新编码 并仅使用单行解析表单
  • Python 将日志滚动到变量

    我有一个使用多线程并在服务器后台运行的应用程序 为了无需登录服务器即可监控应用程序 我决定包括Bottle http bottlepy org为了响应一些HTTP端点并报告状态 执行远程关闭等 我还想添加一种查阅日志文件的方法 我可以使用以
  • 当鼠标悬停在上面时,intellisense vscode 不显示参数或文档

    我正在尝试将整个工作流程从 Eclipse 和 Jupyter Notebook 迁移到 VS Code 我安装了 python 扩展 它应该带有 Intellisense 但它只是部分更糟糕 我在输入句点后收到建议 但当将鼠标悬停在其上方
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • 检查字典键是否有空值

    我有以下字典 dict1 city name yass region zipcode phone address tehsil planet mars 我正在尝试创建一个基于 dict1 的新字典 但是 它不会包含带有空字符串的键 它不会包
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f

随机推荐

  • bottle.py 实现批量文件上传

    bottle py是python的一个Web框架 整个框架只有一个文件 几十K 却自带了路径映射 模板 简单的数据库访问等web框架组件 确实是个可用的框架 初学web开发可以拿来玩玩 其语法简单 部署也很方便 官方文档 http bott
  • 女程序员珍妮的故事

    我不想说出她的名字 这里就叫她珍妮吧 珍妮有5个最好的朋友 其中2个是 Google 的工程师 一个是 Eventbrite 的工程师 一个是架构师 另外一个是她的老爸 一个很可爱的人 是珍妮家乡的州足球队的主席 珍妮毕业时拿的是企业管理专
  • 梯度隐私泄露

    梯度隐私泄露 动机 梯度泄露推测方法 DLG 梯度泄露防御方法 梯度信息推测出数据集信息 三种预设 参考文献 动机 传统认为 在用户与用户 用户与中心之间传输梯度信息是安全的 本文打破了这种理所当然 已知学习模型 权重参数W和真实梯度 W
  • centos 运行.exe文件 storescu.exe 上传 DICOM文件

    由于不会使用DCMTK源码在centos中进行运行 所以使用windows下的exe进行上传 windows 下 DICOM文件上传命令 storescu exe aec LINKINGMED IP 104 v D DICOMSOURCE
  • linux开机自动挂载

    1 修改文件 vim etc fstab 在文件最后一行添加内容 dev cdrom mnt iso9660 defaults 0 0 2 验证是否挂载成功
  • mac打开ssh服务器文件,mac ssh 远程服务器文件

    mac ssh 远程服务器文件 内容精选 换一换 已成功登录Java性能分析 待安装Guardian的服务器已开启sshd 待安装Guardian的服务器已安装JRE JRE版本要求为Huawei JDK 8或者Open JDK 8 11
  • python s append_pandas中如何使用合并append函数?

    介绍了这么多关于pandas拼接的方法 那你知道如果想要拼接拼接一个或者多个 还可以追加serise到原来的dataframe里面如何操作吗 其实还是很简单的 使用append函数就可以解决 本文介绍pandas中使用合并append函数的
  • qq里面发送图片显示服务器被拒绝,如何解决qq无法发送图片的问题

    原因一 一般是网速比较慢 电信联通教育他们内部传图片大家都能收到 教育网给联通发就一般收不到了 清理下你的QQ图片文件夹 里面堆积的图片太多了 原因二 由于网络问题 查看手机移动数据流量或者wifi连接是否正常 QQ版本问题 将QQ版本升级
  • Python 中 pass的使用

    def sample n samples Generate random samples from the fitted Gaussian distribution pass 在python中有时候能看到定义一个def函数 函数内容部分填写
  • (一)人工智能大纲摘要:《人工智能发展白皮书-技术架构篇(2018年9月)》

    以下博客的主要内容 摘自白皮书 http www caict ac cn kxyj qwfb bps index 1 htm 人工智能发展白皮书 技术架构篇 2018年 人工智能安全白皮书 2018 2018世界人工智能产业发展蓝皮书 电信
  • 小米路由器4a千兆版刷固件_小米路由器4A千兆版恢复出厂设置的方法

    摘 要 说明 几乎所有品牌的家用无线路由器 都可以通过长按机身的复位按键 来进行恢复出厂设置 小米路由器4千兆版也不例外 同样可以通过长按复位按键的方式 来恢复出厂设置 具体的操作步骤和注意事项 下面 本文将给大家详细介绍 小米路由器4千兆
  • 【Python 3.7】三明治:编写一个函数,它接受顾客要在三明治中添加的一系列食材。这个 函数只有一个形参(它收集函数调用中提供的所有食材)……

    Python 3 7 三明治 编写一个函数 它接受顾客要在三明治中添加的一系列食材 这个函数只有一个形参 它收集函数调用中提供的所有食材 并打印一条消息 对顾客点的三明治进行概述 调用这个函数三次 每次都提供不同数量的实参 传递任意数量的实
  • C++11 noexcept

    C 11 引入了noexcept 它有两类作用 noexcept 指定符和noexcept 运算符 一 noexcept 指定符 1 含义 指定函数是否抛出异常 2 两类语法 noexcept 1 同noexcept true noexce
  • QT中 No such file or directory的解决办法

    报错具体情境 使用D Qt Qt5 8 0 5 8 mingw53 32 gt 终端进行编译程序 步骤如下 qmake project 生成CH01 pro 文件 qmake CH01 pro 生成 Makefile 总的makefile
  • 【Hadoop生态圈】8.Flink实时计算引擎入门教程

    文章目录 1 简介 2 执行流程 3 核心三大组件 4 应用场景 5 架构原理 6 常用的API 7 java编写flink程序 8 把flink程序部署到hadoop环境上面运行 8 1 安装flink程序 8 2 编译java开发的fl
  • QTcpSocket 及 TCP粘包分析

    http blog csdn net u011125673 article details 50474741
  • Maven实战(二)构建简单Maven项目

    上一节讲了maven的安装和配置 这一节我们来学习一下创建一个简单的Maven项目 1 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令 mvn archetype generate DgroupId com myco
  • obj生成到不同目录下

    2 down vote use Configuration Properties gt C C gt Ouptut Files gt IntDir RelativeDir Filename this will duplicate the s
  • 下载视频并保存至手机相册

    功能介绍 需要将转码后的视频 小于20MB 通过APP下载至手机相册 可以将小视频分享至微信传播 1 通过服务器转码视频 或者很多云服务商都会提供这个功能 2 通过APP下载至手机相册 这个是咱们需要做的事 主要技术 用到 URLSessi
  • 模型训练测试之一:ScaledYOLOv4

    Scaled YOLOv4 YOLOv4官方改进版 55 8 AP 很新 我就测下 Github地址 Gitee 地址 推荐 新的改变 聚焦于针对 YOLOv4 的模型缩放 model scale 旗下有三款模型 YOLOv4 CSP 面向