DAMOYOLO:基于DAMOYOLO训练数据集详细教程

news2024/11/27 0:42:49

前段时间yolov7的推出引起一篇热潮,接着rmyolo紧跟潮流,后面阿里的达摩院也推出了自己的yolo算法,怎么说呢,damoyolo推出依旧不少天了,现在才写博客,因为damoyolo给我的体验感不是很好。

先看下DAMOYOLO的文章:

这是DAMOYOLO文章里面速度与map的折线图,从图上看,damoyolo确实很猛

damoyolo的各个模型在COCO上的map.

 damoyolo的网络结构:

 DAMOYOLO的github网址:

https://github.com/tinyvision/DAMO-YOLO

下面介绍下如何使用DAMOYOLO训练自己的数据集:

1、YOLO2COCO

damoyolo的数据集格式是coco格式的,v5、v7都是yolo格式的所以我们需要及进行转换。

转换脚本:

import os
import json
import cv2
import random
import time
from PIL import Image

coco_format_save_path='COCO\\val\\'   #要生成的标准coco格式标签所在文件夹
yolo_format_classes_path='E:\\YoloV67\\YoloV6_P\\AiTodData\\name.txt'     #类别文件,一行一个类
yolo_format_annotation_path='E:\\YoloV67\\YoloV6_P\\AiTodData\\labels\\val\\'  #yolo格式标签所在文件夹
img_pathDir='E:\\YoloV67\\YoloV6_P\\AiTodData\\images\\val\\'    #图片所在文件夹

with open(yolo_format_classes_path,'r') as fr:                               #打开并读取类别文件
    lines1=fr.readlines()
# print(lines1)
categories=[]                                                                 #存储类别的列表
for j,label in enumerate(lines1):
    label=label.strip()
    categories.append({'id':j+1,'name':label,'supercategory':'None'})         #将类别信息添加到categories中
# print(categories)

write_json_context=dict()                                                      #写入.json文件的大字典
write_json_context['info']= {'description': '', 'url': '', 'version': '', 'year': 2022, 'contributor': 'xxx', 'date_created': '2022-07-8'}
write_json_context['licenses']=[{'id':1,'name':None,'url':None}]
write_json_context['categories']=categories
write_json_context['images']=[]
write_json_context['annotations']=[]

#接下来的代码主要添加'images'和'annotations'的key值
imageFileList=os.listdir(img_pathDir)                                           #遍历该文件夹下的所有文件,并将所有文件名添加到列表中
for i,imageFile in enumerate(imageFileList):
    imagePath = os.path.join(img_pathDir,imageFile)                             #获取图片的绝对路径
    image = Image.open(imagePath)                                               #读取图片,然后获取图片的宽和高
    W, H = image.size

    img_context={}                                                              #使用一个字典存储该图片信息
    #img_name=os.path.basename(imagePath)                                       #返回path最后的文件名。如果path以/或\结尾,那么就会返回空值
    img_context['file_name']=imageFile
    img_context['height']=H
    img_context['width']=W
    img_context['date_captured']='2022-07-8'
    img_context['id']=i                                                         #该图片的id
    img_context['license']=1
    img_context['color_url']=''
    img_context['flickr_url']=''
    write_json_context['images'].append(img_context)                            #将该图片信息添加到'image'列表中

    
    if len(imageFile.split('.')) == 2:
        txtFile = imageFile.split('.')[0]+'.txt'
    else:
        print("on")
        exit()
    # txtFile=imageFile[:5]+'.txt'                                               #获取该图片获取的txt文件
    with open(os.path.join(yolo_format_annotation_path,txtFile),'r') as fr:
        lines=fr.readlines()                                                   #读取txt文件的每一行数据,lines2是一个列表,包含了一个图片的所有标注信息
    for j,line in enumerate(lines):

        bbox_dict = {}                                                          #将每一个bounding box信息存储在该字典中
        # line = line.strip().split()
        # print(line.strip().split(' '))

        class_id,x,y,w,h=line.strip().split(' ')                                          #获取每一个标注框的详细信息
        class_id,x, y, w, h = int(class_id), float(x), float(y), float(w), float(h)       #将字符串类型转为可计算的int和float类型

        xmin=(x-w/2)*W                                                                    #坐标转换
        ymin=(y-h/2)*H
        xmax=(x+w/2)*W
        ymax=(y+h/2)*H
        w=w*W
        h=h*H

        bbox_dict['id']=i*10000+j                                                         #bounding box的坐标信息
        bbox_dict['image_id']=i
        bbox_dict['category_id']=class_id+1                                               #注意目标类别要加一
        bbox_dict['iscrowd']=0
        height,width=abs(ymax-ymin),abs(xmax-xmin)
        bbox_dict['area']=height*width
        bbox_dict['bbox']=[xmin,ymin,w,h]
        bbox_dict['segmentation']=[[xmin,ymin,xmax,ymin,xmax,ymax,xmin,ymax]]
        write_json_context['annotations'].append(bbox_dict)                               #将每一个由字典存储的bounding box信息添加到'annotations'列表中

name = os.path.join(coco_format_save_path,"val"+ '.json')
with open(name,'w') as fw:                                                                #将字典信息写入.json文件中
    json.dump(write_json_context,fw,indent=2)

最终的数据集格式如下所示:其中annotations为三个json文件(train、val、test),test、train、val为图片文件夹。

 数据集制作完成,接下来配置文件。

打开damo/config/paths_catalog.py  按照一下进行配置:

 再打开base.py  配置一下预训练模型:我使用的是s预训练模型

打开config/damoyolo_tinynasL25_S.py  进行参数微调,比如修改输入图像的尺寸,迭代次数。。。。

接下来,,,,大家按照官网创建一个新的虚拟环境,记住版本啥的都要和官网的对应上。(我之前试过用py3.9进行训练的结果卡在了第17轮就不动了)

下面就是damoyolo 的训练过程,,,说实话速度贼慢(s是真的慢,早上10点多开训的,距离此时此刻训练了300轮不到),而且同样的数据集v5表现比他好(收敛速度快)

v5训练:

 只能这么说damoyolo改动的地方很多,比如repfpn、zerohead、nas..........但是我还是选择v5!!!!!!!!!!!!!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安科瑞模拟信号隔离器BM-DIS/I 经2000V隔离输出DC4-20mA 二线制

安科瑞 王晶淼/刘芳 1.信号隔离器功能 BM系列模拟信号隔离器可以对电流、电压等电量参数或温度、电阻等非电量参数进行高速精确测量,经隔离转换成标准的模拟信号输出。既可直接与指针表、数显表相接,也可以与自控仪表(如PLC)、各…

nginx负载均衡实战练习

1、简介 nginx是一个web服务器,反向代理服务器、开源并且高性能,社区里面有很多工程师在维护这个项目。可以在官网(Index of /download/)下载组件。而且nginx可以用来做流量转发,也是是负载均衡功能,分散单…

160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后…

富而喜悦一年一渡专属于你的特别的礼物!快来收!

过去的一年,你过得怎么样?是否有过艰难的逆流时刻,是否拥有过快乐和满足,又是否得到了成长和收获?富而喜悦2023一年一渡财富流新年主题活动就要给你一个礼物多多!美美的“礼物”活动! 为此&…

虹科分享 | 虹科Dimetix激光测距传感器如何利用反射来测量?(上)

-01-测量原理 ● 反射调制激光 采用激光振幅的高频调制,并评估这些调制的高频信号(脉冲串)的相位和距离。激光束在短间隔内被放大调制,这使得它能够非常迅速地测量单个脉冲包的与距离有关的时间偏移,而且还能测量单个波在调制包内相互之间的…

[附源码]Nodejs计算机毕业设计基于Web学术会议投稿管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Ims开机注册流程

目录 概述Ims注册时序图PhoneApp的启动过程Ims注册主要代码总结概述 IMS(IP Multimedia Subsystem)是IP多媒体系统, 是一种新的多媒体业务形式,ims service 结构主要包括 ImsService、ImsManager、MmTelFeatureConnection、ImsCallSession。其中: ImsS…

关于java 操作word的几种方式

1.apose word <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-words</artifactId><version>22.4</version><type>pom</type> </dependency> 一般用来转换文件格式&#xff0c;对于读取创建段…

ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用

目录 01 说明 02 实验目的及要求 03 实验设备及软件平台 03 实验原理 04 实验内容与步骤 01 说明 由于这次的作业是从word上粘贴过来&#xff0c;所以有一些格式修改不了&#xff0c;也没有时间和精力修改&#xff0c;所以没有详细目录等等&#xff0c;浏览的时候应该非常难受.…

前端基础(六)_CSS单位

CSS单位 px px 相对于显示器屏幕分辨率而言&#xff0c;值固定&#xff0c;计算比较容易 em em 相对长度单位 和父元素的字号大小有关系 font-size属性值而言 浏览器默认字号为16像素&#xff0c;未经调整的浏览器都符合1em16px div p都设置了font-size 那em就是随p特点&am…

2022-12-10 Set类型

set类型 新的存储需求&#xff0c;存储大量的数据&#xff0c;在查询方面提供更高的效率。 需要的存储结构&#xff1a;能够保存大量的数据&#xff0c;高效的内部存储机制&#xff0c;便于查询。 set类型&#xff1a;与hash存储结构完全相同&#xff0c;仅存储键&#xff0c…

考研证件照要求?如何制作考研用的证件照?

考研报报名网上确认环节&#xff0c;网上确认的时候需要准备电子照片。疫情阶段今天教给大家不需要出门就可以方便&#xff0c;快捷的制作合格的证件照&#xff0c;免去出门办理和审核不过的麻烦&#xff01; 考研证件照要求&#xff1a; 1. 本人近三个月内正面、免冠、无妆、彩…

基于遗传算法优化的lssvm回归预测matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

华为云WeLink协作文档,助您开启职场高效办公

Word、PPT、Excel&#xff0c;是大家在日常工作中最常用的Office三件套&#xff0c;很多人都经历过&#xff0c;写一份Word或者PPT&#xff0c;从v1写到v10&#xff0c;不断接收、汇总、修改同事提供的素材&#xff0c;不断向领导或客户发送最新审核版本&#xff0c;最后可能还…

前端框架搭建(四)改造导入项目插件流程【vite】

1.改造为函数 默认模板创建的vite.config.ts文件是这样的 我们在上一节也提到过&#xff0c;这样将使得vite的一些配置十分杂乱&#xff0c;无法统一进行管理&#xff0c;因此我们可以将其函数化 export default defineConfig(configEnv > {const viteEnv loadEnv(config…

Python基础语法之注释、缩进、数字类型、一句多行和多行一句等的讲解及演示(超详细 附源码)

Python是实现了平台无关性的高级程序设计语言&#xff0c;它是在源代码程序与各平台的机器码之间插入了一个虚拟机&#xff0c;也就是说源代码程序不再直接翻译成机器码&#xff0c;而是先编译成虚拟机的字节码&#xff0c;再将字节码解释成各平台可执行的机器码。 Python源代…

传输层协议 —— TCP(图解2)

​ 目录 一、前言 二、重传机制 1. 超时重传 2. 快速重传 3. SACK 4. D-SACK 三、滑动窗口 1. 发送方的滑动窗口 2. 程序是如何表示发送方的四个部分 3. 接收方的滑动窗口 四、流量控制 五、拥塞控制 1. 慢启动 2. 拥塞避免 3. 拥塞发生 4. 快速恢复 六、TCP…

Moonbeam生态说|聊聊平行链Bifrost及其与Moonbeam集成最新动态

「Moonbeam生态说」是Moonbeam中文爱好者社区联合Moonbeam中文高级大使组织的社区AMA活动。 该活动为已部署Moonriver或Moonbeam的项目方提供了在主流Moonbeam非官方中文社区内介绍自己的项目信息&#xff0c;包括&#xff1a;项目介绍、团队介绍、技术优势等&#xff0c;帮助社…

[附源码]Node.js计算机毕业设计高校本科毕业及资料存档管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

基于Android的迷你桌球游戏设计与实现

目录 摘要11 关键词11 绪论11 1 游戏开发概述22 1.1 背景22 1.2 课题来源33 1.3 国内外研究现状33 1.4 Android应用程序构成44 1.4.1 应用程序55 1.4.2 应用程序框架55 1.4.3 库与运行环境55 1.4.4 内核55 2 游戏开发平台搭建55 2.1 SDK的下载与安装55 2.2 Ecli…