写博客仅仅是为了记录自己的实验过程,详细过程建议参见以下两位博主的博客。
参考博文:
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
需要修改两部分

  1. 将testing 的batch和subdivisions注释掉,并将training 的batch和subdivisions去掉注释
  2. 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训练自己的模型相关推荐

  1. Pytorch——保存训练好的模型参数

    文章目录 1.前言 2.torch.save(保存模型) 3.torch.load整个网络 4.torch.load网络参数(只提取参数) 5.调用三个函数 1.前言 训练好了一个模型, 我们当然想要 ...

  2. Tensorflow目标检测之yolov3训练自己的模型

    0 背景 Tensorflow官方目标检测给出了SSD.Faster rcnn等预训练模型,但没有给yolov3的预训练模型,但有热心的人已经实现了基于tensorflow来复现yolov3的算法,本 ...

  3. pytorch: 在训练中保存模型,加载模型

    文章目录 1. 保存整个模型 2.仅保存和加载模型参数(推荐使用) 3. 保存其他参数到模型中,比如optimizer,epoch 等 1. 保存整个模型 torch.save(model, 'mod ...

  4. pytorch 使用训练好的模型预测新数据

    神经网络在进行完训练和测试后,如果达到了较高的正确率的话,我们可以尝试将模型用于预测新数据.总共需要两大部分:神经网络.预测函数(新图片的加载,传入模型.得出结果). 完整代码 import torc ...

  5. 基于DarkNet和 OpenCV的 YOLOv3 训练雪人检测模型

    下载样例 opencv- yolo3代码雪人检测处理. GitHub git clone https://github.com/BillyLearn/opecv-yolo3-snowman.git 下 ...

  6. 【项目实战】pytorch载入训练好的模型并进行可视化模型预测绘图

    main函数载入模型,加载图片,输出结果: if __name__ == '__main__':image = Image.open(r"C:\Users\pic\test\he_5.jpg ...

  7. 从零开始带你一步一步使用YOLOv3训练自己的数据

    红色石头的个人网站:redstonewill.com 知乎:https://www.zhihu.com/people/red_stone_wl 公众号:AI有道(redstonewill) YOLOv ...

  8. WIN10 +pytorch版yolov3训练自己数据集

    pytorch版yolov3训练自己数据集 目录 1. 环境搭建 2. 数据集构建 3. 训练模型 4. 测试模型 5. 评估模型 6. 可视化 7. 高级进阶-网络结构更改 1. 环境搭建 将git ...

  9. YOLOV3训练自己的数据集(PyTorch版本)

    由于这一段时间从事目标检测相关工作,因而接触到yolov3,进行目标检测,具体原理大家可以参考大神的博客目标检测(九)--YOLO v1,v2,v3,我就不细讲了,直接进入正题,如何利用深度学习框架P ...

  10. yolov3模型识别不出训练图片_YOLOv3训练自己的模型

    3.0 前言 本文是YOLOv3系列第3篇,记录YOLOv3如何训练自己的模型. YOLOv3系列第2篇:YOLOv3的应用 建议参考github上作者的说明,写的十分清楚. 参考的网页: 3.1 配 ...

最新文章

  1. 为什么重新new两个线程线程号相同_C++ 20中的新线程(jthread)功能
  2. exe4j打包jar成exe文件(将jdk打包在内)
  3. 走捷径修Bug却引起全球大宕机,Salesforce哭着处理了“肇事”工程师
  4. 小程序--计算正负数个数
  5. (74)信号发生器DDS三角波设计(二)(第15天)
  6. HTTP请求常见错误大全
  7. 车载语音最新黑科技 除了辨“音”还会识“相”
  8. Storm目录树、任务提交、消息容错、通信机制
  9. vue里面下载配置使用zepto vue中怎样使用zepto
  10. 大数据下的精准实时监控系统 | Promethus or Zabbix?
  11. 新浪邮箱接收服务器,新浪和雅虎的邮箱的接收服务器分别是什么?
  12. 怎么杀php源文件的木马,PHP一句话木马及查杀
  13. 小米手机qq不读取相册照片_【qq影像读取不了照片】qq影像读取不到相册_qq影像读取不了相册...
  14. python fun函数、求4x4整型数组的主对角线元素的和_C语言编程求一个4x4数组左下三角 包括主对角线元素的和...
  15. 生存分析——cox模型及相关参数求解
  16. matlab中的锐度测量,锐度(解析度)MTF定义及测试
  17. windows安装Cygwin教程
  18. 用友t3安装计算机名称不符合,「用友T3安装教程」简单三步安装T3,安装再也不求人!...
  19. OKR真正有效的的4个最佳实践 [OKR + CFR]
  20. 入侵思路WIFI和路由器密码破解

热门文章

  1. 一个房间里有4个小孩,2个戴黑帽,2个戴白帽
  2. cisco路由器IOS灾难恢复
  3. dubbo实现两个系统之间的通信
  4. [Material Design] MaterialButton 效果进阶 动画自动移动进行对齐效果
  5. ARC097F Monochrome Cat
  6. js基础-20-js对象赋值时的key值问题
  7. string对象的创建、截取和拼接_java基础面试题-String深入理解
  8. python定义一个字符串数组_python 变量,数组,字符串
  9. 马里兰大学calce电池循环测试数据集_锂电池极片:机械性能测试是门学问,要搞懂真不容易...
  10. 利用代码分别实现jdk动态代理和cglib动态代理_设计模式篇——代理模式详解(面试官再问你代理模式,这么回答他!)...