经典目标检测YOLOV1模型的训练及验证

1、前期准备

准备好目录结构、数据集和关于YOLOv1的基础认知

1.1  创建目录结构

        自己创建项目目录结构,结构目录如下:

network                    CNN Backbone 存放位置
weights                    权重存放的位置
test_images             测试用的图片
utils                          辅助功能的代码存放位置 

models                    保存模型位置

data                         训练的数据集

1.2  数据集介绍与下载

1.2.1 数据集介绍

       首先了解数据集,对数据集了解后方便对数据进行相应处理。数据集详细介绍直通车:https://blog.csdn.net/qq_41946216/article/details/137683750?spm=1001.2014.3001.5501

1.2.1 数据集下载

       本次采用数据集: VOC2012数据集。

       数据集下载方式一:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

       数据集下载方式二:

     下载并构建VOC2012数据集,从:https://gitee.com/ppov-nuc/pascal-vocdataset_-for_-yolo.git, 下载get_data文件generate_csv.py文件到本地,放到创建的目录结构中,修改get_data中下载的内容和相应路径,然后运行批处理文件get_data,在get_dat中会自动执行generate_csv.py,如下图所示。


2. 数据集处理

       在utils目录下创建工具类 generate_txt_file.py,主要用于数据集的划分和解析 Annotations/xxxxx.xml 文件中的类别bbox信息,并将信息存入voctrain.txt和voctest.txt文件,如下图所示:

具体代码:

# author: baiCai
# 1. 导包
from xml.etree import ElementTree as ET
import os
import random# 2. 定义一些基本的参数
# 定义所有的类名
VOC_CLASSES = ('aeroplane', 'bicycle', 'bird', 'boat','bottle', 'bus', 'car', 'cat', 'chair','cow', 'diningtable', 'dog', 'horse','motorbike', 'person', 'pottedplant','sheep', 'sofa', 'train', 'tvmonitor')'''
读取所有 xml 文件,存入列表
'''
# 要读取的xml文件路径,记得自己修改路径
Annotations = '../data/VOC2012/Annotations/'
# 列出所有的xml文件
xml_files = os.listdir(Annotations)
# 打乱数据集
random.shuffle(xml_files)
'''
定义训练集和测试比例
划分Annotations中的训练集和测试集文件列表
'''
# 训练集数量
train_num = int(len(xml_files) * 0.7)
# 训练列表
train_file_list = xml_files[:train_num]
# 测测试列表
test_file_list = xml_files[train_num:]'''
定义 xml 解析后的信息存储路径和写对象
'''
# 训练集和测试集文件名字
train_set_path = './voctrain.txt'
test_set_path = './voctest.txt'# 3. 定义解析xml文件的函数
'''
主要解析 xml 获取 类别名字和bbox,如 
{'name': 'person','bbox': [174, 101, 349, 351]}
'''
def parse_rec(filename):# 参数:输入xml文件名# 创建xml对象tree = ET.parse(filename)objects = []# 迭代读取xml文件中的object节点,即物体信息for obj in tree.findall('object'):obj_struct = {}# difficult属性,即这里不需要那些难判断的对象difficult = int(obj.find('difficult').text)if difficult == 1:  # 若为1则跳过本次循环continue# 开始收集信息obj_struct['name'] = obj.find('name').textbbox = obj.find('bndbox')obj_struct['bbox'] =\[int(float(bbox.find('xmin').text)),int(float(bbox.find('ymin').text)),int(float(bbox.find('xmax').text)),int(float(bbox.find('ymax').text))]objects.append(obj_struct)return objects# 4. 把信息保存入文件中
def write_txt(file_list,set_path):# # 生成训练集txtcount = 0with  open(set_path, 'w') as wt:for xml_file in file_list:count += 1# 获取图片名字image_name = xml_file.split('.')[0] + '.jpg'  # 图片文件名# 对xml_file进行解析results = parse_rec(Annotations + xml_file)# 如果返回的对象为空,表示张图片难以检测,因此直接跳过if len(results) == 0:print(xml_file)continue# 否则,则写入文件中# 先写入图片名字wt.write(image_name)# 接着指定下面写入的格式for result in results:class_name = result['name']bbox = result['bbox']class_name = VOC_CLASSES.index(class_name)  # 名字在类别中是下标位置wt.write(' ' + str(bbox[0]) +' ' + str(bbox[1]) +' ' + str(bbox[2]) +' ' + str(bbox[3]) +' ' + str(class_name))wt.write('\n')wt.close()# 5. 运行
if __name__ == '__main__':write_txt(train_file_list,train_set_path)write_txt(test_file_list,test_set_path)

3. 构建数据加载器 

3.1定义初始化方法

       读取xxxx.xml解析后的文件
       对每行数据(每个图片信息)的所有中心点信息以【x,y,w,h】和标签分别存入box列表和label列表。
       当前图片的边界框和标签信息即box列表和label列表,转换为LongTensor格式添加到对应的boxex列表和labels列表。

3.2 定义增强图片方法

增加方法名称定义的函数
随机翻转图片和边界框random_flip(img, boxes)
随机缩放图片和边界框randomScale(img, boxes)
随机模糊图片randomBlur(img)
随机调整图片亮度RandomBrightness(img)
随机调整图片色调RandomHue(img)
随机调整图片饱和度RandomSaturation(img)
随机移动图片和边界框randomShift(img, boxes, labels)        
随机裁剪图片和边界框randomCrop(img, boxes, labels)
用于从图像中减去均值subMean(self, bgr, mean)
将BGR图像转换为RGB图像BGR2RGB(self, img)
将BGR图像转换为HSV图像BGR2HSV(self, img)
将HSV图像转换为BGR图像HSV2BGR(self, img)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电视盒子哪个好?2024口碑网络电视盒子排行榜

多年来电视盒子始终占据重要地位,功能上并没有受到影响。在这么多品牌中哪些电视盒子的评价是最好的呢?小编根据各大电商平台的用户评价情况整理了口碑最好的网络电视盒子排行榜,跟着小编一起看看市面上的电视盒子哪个好吧。 TOP 1&#xff1…

【每日刷题】Day17

【每日刷题】Day17 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 2. 162. 寻找峰值 - 力扣…

Solana主网使用自定义的RPC进行转账

1、引言 如果用 browser 连接主网的 RPC server 会收到 error code 403 message 為 Access forbidden, contact your app developer or supportrpcpool.com. 错误,因为主网的 RPC server 会检查 HTTP Header 如果判断出來是 browser 就会报告 403 錯誤。 要解決这…

TRIZ理论下攀爬机器人的创新设计与研究

随着科技的飞速发展,机器人技术已广泛应用于各个领域。特别是在复杂环境下的作业,如灾难救援、太空探测等,对机器人的移动能力和适应性提出了更高要求。在这样的背景下,基于TRIZ理论的攀爬机器人设计与研究应运而生,它…

Dual-AMN论文阅读

Boosting the Speed of Entity Alignment 10: Dual Attention Matching Network with Normalized Hard Sample Mining 将实体对齐速度提高 10 倍:具有归一化硬样本挖掘的双重注意力匹配网络 ABSTRACT 寻找多源知识图谱(KG)中的等效实体是知识图谱集成的关键步骤&…

CentOS-Stream-9升级openssh9.7p

CentOS Stream 9 ssh -V需要的RPM包 openssh-9.7p1-1.el9.x86_64.rpm openssh-clients-9.7p1-1.el9.x86_64.rpm openssh-server-9.7p1-1.el9.x86_64.rpm 编译openssh openssh官方只提供源码包,我们选择自己将源码编译为rpm包来升级环境的openssh,需要…

HTML5+CSS3小实例:菜单按钮的三种切换动画

实例:菜单按钮的三种切换动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initia…

Word分节后,页码不连续、转PDF每节后多出空白页解决办法

1. 问题图例 废话少说&#xff0c;先上图&#xff1a; 2. 问题分析 问题分析&#xff1a;出现以上问题的原因可能有&#xff0c; 未链接到上一节页面布局中节的起始位置设置为[奇数页] 3. 解决问题 若为【1. 未链接到上一节】导致该问题出现&#xff0c;则我们需要选中页脚…

关于外网java后端服务访问内网minio中间件,因连接minio超时,启动失败问题

注&#xff1a;服务器情况&#xff1a;2台服务器&#xff0c;内网服务器包含&#xff08;activemq、minio、nginx、redis、mysql、后端java服务&#xff09;。外网服务器只有后端java服务&#xff0c;访问内网的中间件&#xff08;内网服务器开放了部分指定端口&#xff09; 问…

前端文件word Excel pdf PPT预览

组件一 <template><j-modal:visible"visible":fullscreen"fileType!other&&fileType!word"ok"handleOk":width"1200"cancel"handleCancel"><vue-office-docxv-if"fileTypeword":src"…

Adobe将Sora、Runway、Pika,集成在PR中

4月15日晚&#xff0c;全球多媒体巨头Adobe在官网宣布&#xff0c;将OpenAI的Sora、Pika 、Runway等著名第三方文生视频模型&#xff0c;集成在视频剪辑软件Premiere Pro中&#xff08;简称“PR”&#xff09;。 同时&#xff0c;Adob也会将自身研发的Firefly系列模型包括视频…

【已开源】​基于stm32f103的爬墙小车

​基于stm32f103的遥控器无线控制爬墙小车&#xff0c;实现功能为可平衡在竖直墙面上&#xff0c;并进行移动和转向&#xff0c;具有超声波防撞功能。 直接上&#xff1a; 演示视频如&#xff1a;哔哩哔哩】 https://b23.tv/BzVTymO 项目说明&#xff1a; 在这个项目中&…

MySQL常用命令和函数的讲解以及表之间的联结

Mysql的中一些语句的用法&#xff1a; 有表&#xff1a; CREATE TABLE book (id int(20) NOT NULL,book_name varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 书名,press varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NUL…

【过程11】——教育被点燃的路上

这里写目录标题 一、背景二、过程1.两年四十万的认知改变2.三年打工仔的经历改变3.一年计算机的人生蜕变4.后面的展望 三、总结 一、背景 人生在世&#xff0c;对于一些事情的笃信笃行&#xff1b;背后真的会有莫大无以言表的波涛。 这个事情到现在已经五年半左右时间了&#…

高标准化及可扩展的产品能力,助力声通科技运营效率不断提升

高标准化及可扩展的产品能力对企业发展具有重要意义&#xff0c;有助于企业提高运营效率、增强市场竞争力&#xff0c;并推动企业实现规模化发展。上海声通信息科技股份有限公司&#xff08;下文称&#xff1a;声通科技或公司&#xff09;作为我国领先的企业级全栈交互式人工智…

PyTorch深度学习之旅:从入门到精通的十个关键步骤

在人工智能的浪潮中&#xff0c;深度学习框架扮演着至关重要的角色。PyTorch作为其中的佼佼者&#xff0c;以其简洁、直观和灵活的特性&#xff0c;吸引了众多开发者与研究者。本文将引导您逐步掌握PyTorch&#xff0c;从基础概念到高级应用&#xff0c;让您在深度学习的道路上…

Pr2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Premiere简称“Pr”&#xff0c;是一款超强大的视频编辑软件&#xff0c;它可以提升您的创作能力和创作自由度&#xff0c;它是易学、高效、精确的视频剪辑软件&#xff0c;提供了采集、剪辑、调色、美化音频、字幕添加、输出、D…

Redis中的订阅发布(一)

订阅发布 概述 Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。通过执行SUBSCRIBER命令&#xff0c;客户端可以订阅一个或多个频道&#xff0c;从而成为这些频道的订阅者(subscribe)&#xff1a; 每当有其他客户端向被订阅的频道发送消息(message)时&…

【Python】异常处理结构

文章目录 1.python异常2.try_except异常处理结构3.try... 多个except异常处理4.try_except_else异常处理结构5.try_except_finally异常处理结构6.常见报错类型 在运行代码时&#xff0c;总是遇到各种异常&#xff0c;且出现异常时&#xff0c;脚本就会自动的的停止运行&#xf…

信息系统项目管理师——第8章项目整合管理(二)

项目管理知识♥♥♥♥♥ 管理项目知识是做什么? 管理项目知识是使用现有知识并生成新知识&#xff0c;以实现项目目标并且帮助组织学习的过程。 管理项目知识的作用是什么? ①利用已有的组织知识来创造或改进项目成果;②使当前项目创造的知识可用于支持组织运营和未来的项目…