SSD-Pytorch环境搭建(二)

系列文章目录

SSD-Pytorch环境搭建(一)

SSD-Pytorch环境搭建(二)


文章目录

  • 系列文章目录
  • 前言
  • 一、训练步骤
    • 1、本文使用VOC格式进行训练。
      • 2、训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。
    • 3、训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。
    • 4、在训练前利用voc2ssd.py文件生成对应的txt。
    • 5、再运行根目录下的voc_annotation.py,运行前需要将classes改成你自己的classes。
    • 6、就会生成对应的2007_train.txt,每一行对应其图片位置及其真实框的位置。
    • 7、在训练前需要修改model_data里面的voc_classes.txt文件,需要将classes改成你自己的classes。
    • 8、修改utils/config.py里面的NUM_CLASSES与需要训练的种类的个数相同。运行train.py即可开始训练。
      • 训练
    • 1、将ssd.py中model_path改为训练好的模型
    • 2、在训练前利用voc2ssd.py文件生成对应的txt并替换在classes_path上(已改好)
    • 3、运行predict.py,输入要预测的照片的路径即可(可把照片直接放在根目录下,测试时直接输入图片名称)
    • mAP运行
    • 先依次运行get_gt_txt.py和get_dr_txt.py会生成input文件,里面会有三个文件
    • 问题类
    • 1.如果出现UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.warnings.warn(warning.format(ret))
    • 2.如果运行mAP的时候出现MatplotlibDeprecationWarning:The set_window_title function was deprecated in Matplotlib 3.4 and will be removed two minor releases later. Use manager.set_window_title or GUI-specific methods instead. fig.canvas.set_window_title(window_title)
  • 总结


前言

训练模型需要进行相关的数据集准备,对训练操作以及相关修改的事项需要进行熟悉了解,当然还有解决原项目在下载后存在运行BUG问题,添加连续预测,map数值、真实值等图表显示

【注:labelimg 是一个标注数据集软件】

一、训练步骤

1、本文使用VOC格式进行训练。

1.1.用labelme对图片进行标记,使用长方形框把需要识别部分框起来,对同一类的物体标记名统一命名保存,标记名称的要求是最好没有空格。

在这里插入图片描述图一

图二
(注:把同一标记.json文件和原图片保存在同一文件夹可以方便后续查看是否标记和更改标记内容);

1.2.把.json文件转化为voc格式.xml的方法有许多种,如可以在labelme设置进行直接转换,可以在网上搜.json转voc格式网上转换(注:缺点是单一文件上传,复杂粘贴使用速度非常慢),可以下载相关的.json转换voc格式软件,也可以直接使用代码进行批量的转换(方便快捷).(这里使用的是代码转.json文件为.xml文件:,转https://blog.csdn.net/weixin_44671418/article/details/110975655)

2、训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。

2.1.把.json文件转换为.xml的文件复制到VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。.xml文件格式大致为:

在这里插入图片描述
图三

在这里插入图片描述
  图四                            图五
  
可能为(注:由于转换的形式不同,可能会出现标记文件命名不同的情况,需要注意目标D/difficult的大小写,需要找到voc_annotation.py文件更改相应的D/difficult大小写,而有些.josn转.xml会出现没有目标值的情况)

3、训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。

4、在训练前利用voc2ssd.py文件生成对应的txt。

4.1.运行voc2ssd.py会主动生成相应图片的索引

4.2.trainval_percent=0.9为随机选择测试值数量为总体训练值的10%,需要更多的测试值可以进行更改,如果有自己的测试值也可以直接改为1.0,不采用随机挑选测试指.

5、再运行根目录下的voc_annotation.py,运行前需要将classes改成你自己的classes。

5.1.如果进行多类训练可以改成类似图片这样的
在这里插入图片描述
图六

6、就会生成对应的2007_train.txt,每一行对应其图片位置及其真实框的位置。

6.1.图片的名字应该需要为全数字的形式才能够识别,最好的是以年月+其他数字的形式,这里采用的就是年月+类别+编号的形式

7、在训练前需要修改model_data里面的voc_classes.txt文件,需要将classes改成你自己的classes。

7.1.如果有新的类加入,这里也是要把新的类的名字加入进去.

8、修改utils/config.py里面的NUM_CLASSES与需要训练的种类的个数相同。运行train.py即可开始训练。

8.1.该类别个数要求为背景板+需要训练的种类的个数(即1+N)

训练

1、将ssd.py中model_path改为训练好的模型

在这里插入图片描述
图七

1.1.训练出来的模型会出现在logs/中,训练出来的模型会有两类

需要选择的模型是Epoch—这样的样式的模型才是有效果的,然后把模型放到model_data/中,模型名字修改为所需要的名字并在ssd.py中的"model_path":‘model_data/xxxxxx(修改为模型名字)’

1.2.confidence置信度,比如confidence:0.2就是指预测的时候把0.2以下的相似度的框框省略掉,留下0.2以上相似度的预测框

2、在训练前利用voc2ssd.py文件生成对应的txt并替换在classes_path上(已改好)

3、运行predict.py,输入要预测的照片的路径即可(可把照片直接放在根目录下,测试时直接输入图片名称)

3.1.由于程序中增加了批量预测的代码,所以如果使用批量预测的代码就只需要运行便会对上面随机选择的图片进行预测,在imgage_results中可以查看预测结果

3.2.模型ssd.py

mAP运行

先依次运行get_gt_txt.py和get_dr_txt.py会生成input文件,里面会有三个文件

在这里插入图片描述
图八

detection-results:指的是预测结果的txt.
ground-truth:指的是真实框的txt.
image-optional:指的是图片,有这个可以可视化,但是这个可以没有.
(依次运行主目录下的get_dr_txt.py和get_gt_txt.py获得预测框对应的txt和真实框对应的txt).然后运行get_map.py文件会生成mAP相应的数据存放在生成的result文件中

问题类

1.如果出现UserWarning: size_average and reduce args will be deprecated, please use reduction=‘sum’ instead.warnings.warn(warning.format(ret))

这大概是因为在新的pytorch版本中,size_average 和reduce 这两个参数,都将不再支持,需要在ssd_training.py中找到 loss_c = F.cross_entropy(conf_p, targets_weighted, size_average=False) 改为loss_c = F.cross_entropy(conf_p, targets_weighted, reduction=‘sum’),在这程序中,需要把程序改为图中横线所示的代码。
在这里插入图片描述
图九

2.如果运行mAP的时候出现MatplotlibDeprecationWarning:The set_window_title function was deprecated in Matplotlib 3.4 and will be removed two minor releases later. Use manager.set_window_title or GUI-specific methods instead. fig.canvas.set_window_title(window_title)

可以尝试在get_map.py中将fig.canvas.set_window_title(window_title)修改为fig.canvas.manager.set_window_title(window_title)

总结

进行了关于VOC格式的数据集的建立和训练步骤、还有相关问题类的总结讲述,希望对你们有所帮助。

如果有需要也可以对数据集的制作总结和修改后的项目上传

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

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

相关文章

自己掏耳朵怎么弄干净?清洁耳朵掏耳神器推荐!

耳屎是人体的分泌物之一,很多人选择用传统挖耳勺或者棉签进行掏耳,殊不知这种行为会将耳屎越捅越深,甚至还会捅穿鼓膜!那么缺少别人帮助的情况下,自己掏耳朵怎么弄干净呢?现在小编就给大家分享一款掏耳神器…

家庭事务管理系统|基于java和vue的家庭事务管理系统设计与实现(源码+数据库+文档)

家庭事务管理系统 目录 基于java和vue的家庭事务管理系统 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云…

React综合指南(三)

#1024程序员节|征文# 41、hooks的使用有什么注意事项 在使用Hooks的过程中,需要注意的两点是: 不要在循环,条件或嵌套函数中调用Hook,必须始终在React函数的顶层使用Hook。这是因为React需要利用调用顺序来正确更新…

配置nginx服务通过ip访问多网站

文章目录 第一种方法第二种方法 先关闭防火墙 # systemctl stop firewalld # setenforce 0第一种方法 #mntui 第二种方法 # vim /etc/nginx/conf.d/test_ip.conf # cat /etc/nginx/conf.d/test_ip.conf server {listen 192.168.234.100:80;#server_nameroot /test/100;loca…

基于neo4j的体育运动员问答问答系统

你是不是也为毕业项目伤透了脑筋?我们为你准备了一个创新且实用的技术项目——基于neo4j的体育运动员问答系统。无论你是对图数据库技术感兴趣,还是想在自然语言处理方面有所突破,这套系统都能让你在答辩时脱颖而出! &#x1f3a…

filebeat接入nginx和mysql获取日志

下载nginx (1) 直接下载 yum install nginx -y(2)查看状态启动 systemctl start nginx systemctl status nginx(3)配置文件检查 nginx -t(4)端口检查 netstat -tulpn | grep :80&am…

Mybatis 中<where>的用法注意事项(附Demo)

目录 前言1. 问题所示2. 基本知识 #1024程序员节 | 征文# 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 先从实战问…

uniapp使用html2canvas时,页面内的image元素模糊

不废话很简单只需要将image改成img就行 改之前 改之后 原因可能是因为uniapp里面的image标签做了某种处理

基于Java+Springboot+Vue开发的酒店客房预订管理系统

项目简介 该项目是基于JavaSpringbootVue开发的酒店客房预订管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java…

监控易监测对象及指标之:Kafka中间件JMX监控指标解读

监控易作为一款功能强大的监控软件,旨在为企业提供全方位的IT系统监控服务。其中,针对Kafka中间件的JMX监控是监控易的重要功能之一。本文将详细解读监控易中Kafka的JMX监控指标,帮助企业更好地理解并运用这些数据进行系统性能调优和故障排查…

开启RefCell debug_refcell feature查看借用冲突位置

文章目录 背景分析解决方法 本文解决两个问题: 开启rust源码库中的feature开启debug_refcell feature的方法查看 borrow 借用冲突的位置 背景 使用 RefCell 来实现内部可变性是在 Rust 开发中常用的方式,但是当逻辑复杂起来,常常会有可变借…

word建立目录以及修改页码

1、为word建立新的目录 (1)选中word中的标题设置为第几级标题,将所有的标题均设置完成。最后可以鼠标右击标题,对不同的标题字体大小等进行设置。右击-->修改-->格式-->段落 (2)在word中插入新的…

算法01----移动零(C++)

题目展示 算法原理 我们这里要用到的算法是双指针移动,和我们之前学的快排的核心思想是一样的。我们看看怎么做吧。我会以图片的形式将我的思路告知大家。 这就是整个题目的整体思想算法,大家理解一下,其实这道题目还是很简单的。 代码编写…

【C++ 11】移动构造函数

文章目录 【 1. 问题背景:深拷贝引起的内存开销问题 】【 2. 移动构造函数 】【 3. 左值的移动构造函数: move 实现 】 【 1. 问题背景:深拷贝引起的内存开销问题 】 拷贝构造函数 在 C 11 标准之前(C 98/03 标准中),…

Vue脚手架学习 vue脚手架配置代理、插槽、Vuex使用、路由、ElementUi插件库的使用

目录 1.vue脚手架配置代理 1.1 方法一 1.2 方法二 2.插槽 2.1 默认插槽 2.2 具名插槽 2.3 作用域插槽 3.Vuex 3.1 概念 3.2 何时使用? 3.3 搭建vuex环境 3.4 基本使用 3.5 getters的使用 3.6 四个map方法的使用 3.6.1 mapState方法 3.6.2 mapGetter…

LabVIEW中句柄与引用

在LabVIEW中,句柄(Handle) 是一种用于引用特定资源或对象的标识符。它类似于指针,允许程序在内存中管理和操作复杂的资源,而不需要直接访问资源本身。句柄用于管理动态分配的资源,如队列、文件、网络连接、…

[python flask 数据库ORM操作]

一、链接数据库 我们选择的框架是flask-sqlAlchemy 这个框架是对pymysql的封装。 连接数据库 #导入包 from flask_sqlalchemy import SQLAlchemy #创建flask app对象 app Flask(__name__) #设置配置信息 HOSTNAME "localhost" PORT 3306; USERNAME "root&…

在C++中比大小

关于min()函数和max()函数: min()、max()这两个函数如果需要使用&#xff0c;要在程序头文件中加上<algorithm>库就可以使用这个函数了 #include <algorithm>min()函数是比较数中哪一个数最小&#xff0c;就返回最小的数&#xff0c;而max()函数则是比较数中哪一个…

计算机毕业设计Flask+Vue.js空气质量预测 空气质量可视化 空气质量分析 空气质量爬虫 大数据毕业设计 Hadoop Spark

《FlaskVue.js空气质量预测与可视化系统》开题报告与任务书 一、研究背景与意义 随着工业化进程的加速和城市化水平的不断提高&#xff0c;空气质量问题日益成为全球关注的焦点。空气污染不仅严重影响着人们的身体健康&#xff0c;如增加呼吸系统疾病、心血管疾病等风险&…

商场楼宇室内导航系统

商场楼宇室内导航系统 本文所涉及所有资源均在传知代码平台可获取 文章目录 商场楼宇室内导航系统效果图导航效果图查看信息数据加载加载模型模型选型处理楼层模型绑定店铺创建店铺名称动态显示隐藏2d元素空气墙查看信息楼梯导航效果图 导航效果图 查看信息 数据加载 因为是一…