(pytorch)yolov3训练自己的模型
写博客仅仅是为了记录自己的实验过程,详细过程建议参见以下两位博主的博客。
参考博文:
YOLOV3训练自己的数据集(PyTorch版本)
Pytorch 版YOLOV3训练自己的数据集
1.环境配置
git clone https://github.com/ultralytics/yolov3.git
并根据 requirements.txt 下载需要的依赖文件。
2.yolo
使用pytorch框架,yolo代码在https://github.com/ultralytics/yolov3下载。
将Annotations和JPEGImages放到data目录下,新建ImageSets又来存放和labels。将JPEGImages复制重命名为images。
图片标注不会的可以看一下labelImg使用。
3.makeTxt.py
在根目录下新建makeTxt.py
import os
import randomtrainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'data/Annotations' # xml文件
txtsavepath = 'data/ImageSets' # 生成的训练集,测试集,验证集位置
total_xml = os.listdir(xmlfilepath)num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)ftrainval = open('data/ImageSets/trainval.txt', 'w')
ftest = open('data/ImageSets/test.txt', 'w') # 生成测试集
ftrain = open('data/ImageSets/train.txt', 'w') # 生成训练集
fval = open('data/ImageSets/val.txt', 'w') # 生成验证集for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftest.write(name)else:fval.write(name)else:ftrain.write(name)ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
4.voc_label.py
在根目录下新建voc_label.py,得到labels的具体内容以及data目录下的train.txt,test.txt,val.txt,这里的train.txt与之前的区别在于,不仅仅得到文件名,还有文件的具体路径。voc_label.py的代码如下
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import joinsets = ['train', 'test','val']classes = ['dog','person'] #填写类别的名字,与后面data/voc.names相同def convert(size, box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0y = (box[2] + box[3]) / 2.0w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def convert_annotation(image_id):in_file = open('data/Annotations/%s.xml' % (image_id))out_file = open('data/labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()
print(wd)
for image_set in sets:if not os.path.exists('data/labels/'):os.makedirs('data/labels/')image_ids = open('data/ImageSets/%s.txt' % (image_set)).read().strip().split()list_file = open('data/%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write('data/images/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()
有时会出现labels有××××××.txt,但里面没有内容,可以查看一下文件目录是否正确。
5.配置文件
在data目录下新建voc.data和voc.names
voc.data内容
classes=1train=data/train.txtvalid=data/test.txtnames=data/voc.namesbackup=backup/
voc.names内容
dog
person
网络参数配置
本次使用的是yolov3-tiny.cfg
需要修改两部分
- 将testing 的batch和subdivisions注释掉,并将training 的batch和subdivisions去掉注释
- yolo的类别个数和yolo上一层convolutional中filters的个数。一共有两处修改,从后向前找。
部分代码如下:
[net]
# Testing
# batch=1
# subdivisions=1
Training
batch=64
# subdivisions=2
...
[convolutional]
size=1
stride=1
pad=1
filters=21
activation=linear
[yolo]
mask = 3,4,5
anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319
classes=2
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1[route]
layers = -4[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky[upsample]
stride=2[route]
layers = -1, 8[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky[convolutional]
size=1
stride=1
pad=1
filters=21 #3*(class +5)
activation=linear[yolo]
mask = 0,1,2
anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319
classes=2
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
权重参数
使用 yolov3-tiny.weights,下载地址https://pjreddie.com/media/files/yolov3-tiny.weights,需要对yolov3-tiny.weights进行改造,因而需要下载官网的代码https://github.com/pjreddie/darknet,运行一下脚本,并将得到的yolov3-tiny.conv.15导入weights目录下,脚本如下
./darknet partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15
6.训练
打开终端
python train.py --data data/rbc.data --cfg cfg/yolov3-tiny.cfg --epochs 10
未完…
(pytorch)yolov3训练自己的模型相关推荐
- Pytorch——保存训练好的模型参数
文章目录 1.前言 2.torch.save(保存模型) 3.torch.load整个网络 4.torch.load网络参数(只提取参数) 5.调用三个函数 1.前言 训练好了一个模型, 我们当然想要 ...
- Tensorflow目标检测之yolov3训练自己的模型
0 背景 Tensorflow官方目标检测给出了SSD.Faster rcnn等预训练模型,但没有给yolov3的预训练模型,但有热心的人已经实现了基于tensorflow来复现yolov3的算法,本 ...
- pytorch: 在训练中保存模型,加载模型
文章目录 1. 保存整个模型 2.仅保存和加载模型参数(推荐使用) 3. 保存其他参数到模型中,比如optimizer,epoch 等 1. 保存整个模型 torch.save(model, 'mod ...
- pytorch 使用训练好的模型预测新数据
神经网络在进行完训练和测试后,如果达到了较高的正确率的话,我们可以尝试将模型用于预测新数据.总共需要两大部分:神经网络.预测函数(新图片的加载,传入模型.得出结果). 完整代码 import torc ...
- 基于DarkNet和 OpenCV的 YOLOv3 训练雪人检测模型
下载样例 opencv- yolo3代码雪人检测处理. GitHub git clone https://github.com/BillyLearn/opecv-yolo3-snowman.git 下 ...
- 【项目实战】pytorch载入训练好的模型并进行可视化模型预测绘图
main函数载入模型,加载图片,输出结果: if __name__ == '__main__':image = Image.open(r"C:\Users\pic\test\he_5.jpg ...
- 从零开始带你一步一步使用YOLOv3训练自己的数据
红色石头的个人网站:redstonewill.com 知乎:https://www.zhihu.com/people/red_stone_wl 公众号:AI有道(redstonewill) YOLOv ...
- WIN10 +pytorch版yolov3训练自己数据集
pytorch版yolov3训练自己数据集 目录 1. 环境搭建 2. 数据集构建 3. 训练模型 4. 测试模型 5. 评估模型 6. 可视化 7. 高级进阶-网络结构更改 1. 环境搭建 将git ...
- YOLOV3训练自己的数据集(PyTorch版本)
由于这一段时间从事目标检测相关工作,因而接触到yolov3,进行目标检测,具体原理大家可以参考大神的博客目标检测(九)--YOLO v1,v2,v3,我就不细讲了,直接进入正题,如何利用深度学习框架P ...
- yolov3模型识别不出训练图片_YOLOv3训练自己的模型
3.0 前言 本文是YOLOv3系列第3篇,记录YOLOv3如何训练自己的模型. YOLOv3系列第2篇:YOLOv3的应用 建议参考github上作者的说明,写的十分清楚. 参考的网页: 3.1 配 ...
最新文章
- 为什么重新new两个线程线程号相同_C++ 20中的新线程(jthread)功能
- exe4j打包jar成exe文件(将jdk打包在内)
- 走捷径修Bug却引起全球大宕机,Salesforce哭着处理了“肇事”工程师
- 小程序--计算正负数个数
- (74)信号发生器DDS三角波设计(二)(第15天)
- HTTP请求常见错误大全
- 车载语音最新黑科技 除了辨“音”还会识“相”
- Storm目录树、任务提交、消息容错、通信机制
- vue里面下载配置使用zepto vue中怎样使用zepto
- 大数据下的精准实时监控系统 | Promethus or Zabbix?
- 新浪邮箱接收服务器,新浪和雅虎的邮箱的接收服务器分别是什么?
- 怎么杀php源文件的木马,PHP一句话木马及查杀
- 小米手机qq不读取相册照片_【qq影像读取不了照片】qq影像读取不到相册_qq影像读取不了相册...
- python fun函数、求4x4整型数组的主对角线元素的和_C语言编程求一个4x4数组左下三角 包括主对角线元素的和...
- 生存分析——cox模型及相关参数求解
- matlab中的锐度测量,锐度(解析度)MTF定义及测试
- windows安装Cygwin教程
- 用友t3安装计算机名称不符合,「用友T3安装教程」简单三步安装T3,安装再也不求人!...
- OKR真正有效的的4个最佳实践 [OKR + CFR]
- 入侵思路WIFI和路由器密码破解
热门文章
- 一个房间里有4个小孩,2个戴黑帽,2个戴白帽
- cisco路由器IOS灾难恢复
- dubbo实现两个系统之间的通信
- [Material Design] MaterialButton 效果进阶 动画自动移动进行对齐效果
- ARC097F Monochrome Cat
- js基础-20-js对象赋值时的key值问题
- string对象的创建、截取和拼接_java基础面试题-String深入理解
- python定义一个字符串数组_python 变量,数组,字符串
- 马里兰大学calce电池循环测试数据集_锂电池极片:机械性能测试是门学问,要搞懂真不容易...
- 利用代码分别实现jdk动态代理和cglib动态代理_设计模式篇——代理模式详解(面试官再问你代理模式,这么回答他!)...