Yolov1原理详细解读及实战(二)实战篇

这篇具有很好参考价值的文章主要介绍了Yolov1原理详细解读及实战(二)实战篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Yolov1原理详细解读及实战(一)理论篇 中,我们对Yolov1网络结构、算法流程、训练及推理原理进行了详细剖析,本章进入实战环节,话不多说,马上开始!

环境

vscode+WSL:Ubuntu 18.04+python 3.9.7

Darknet安装

YOLOv1是Darknet深度学习框架进行训练和推理,首先安装Darknet。

步骤1:安装Darknet

git clone https://github.com/pjreddie/darknet
cd darknet
make -j8

Yolov1原理详细解读及实战(二)实战篇,Yolo系列模型原理详细解读及实战,yolov1
步骤2:下载Yolov1预训练模型

wget http://pjreddie.com/media/files/yolov1.weights

步骤3:验证是否安装成功

./darknet yolo test cfg/yolov1.cfg yolov1.weights data/kite.jpg

Yolov1原理详细解读及实战(二)实战篇,Yolo系列模型原理详细解读及实战,yolov1

运行结束后,在darknet目录下打开predictions.jpg即可查看结果。

Yolov1原理详细解读及实战(二)实战篇,Yolo系列模型原理详细解读及实战,yolov1

模型训练

数据集准备

步骤1:下载VOC数据集。

wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar

解压后的文件结构如下:

└── VOCdevkit     #根目录
    └── VOC2007   #不同年份的数据集,这里只下载了2007
        ├── Annotations        #存放xml文件,与JPEGImages中的图片一一对应,解释图片的内容等等
        ├── ImageSets          #该目录下存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上±1表示正负样本
        │   ├── Action
        │   ├── Layout
        │   ├── Main           #存放的是分类和检测的数据集分割文件
        │   │   ├── train.txt  #用于训练的图片名称
        │   │   ├── val.txt    #用于验证的图片名称
        │   │   ├── test.txt       #用于测试的图片名称
        │   │   ├── trainval.txt   #train与val的合集
        │   └── Segmentation
        ├── JPEGImages         #存放源图片
        ├── SegmentationClass  #存放的是图片,语义(class)分割相关
        └── SegmentationObject #存放的是图片,实例(object)分割相关

步骤2:将VOC2007格式数据转换为Yolo训练的格式。

Darknet需要的label不是xml格式,而是一张图片对应一个txt的形式,即每个标注框占一行。因此需要将xml格式转为txt格式。代码如下:

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

sets=[('2007', 'train'), ('2007', 'val')]

classes = ["bicycle", "boat", "dog", "cat","person"]


def convert(size, box):
    dw = 1./(size[0])
    dh = 1./(size[1])
    x = (box[0] + box[1])/2.0 - 1
    y = (box[2] + box[3])/2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

def convert_annotation(year, image_id):
    in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))
    out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(year, 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').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult)==1:
            continue
        cls_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 year, image_set in sets:
    if not os.path.exists('VOCdevkit/VOC%s/labels/'%(year)):
        os.makedirs('VOCdevkit/VOC%s/labels/'%(year))
    image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()
    list_file = open('%s_%s.txt'%(year, image_set), 'w')
    for image_id in image_ids:
        list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id))
        convert_annotation(year, image_id)
    list_file.close()

os.system("cat 2007_train.txt 2007_val.txt> train.txt")

运行结束之后,可以看到,生成了labels文件夹和2007_train.txt、2007_val.txt、train.txt。

Yolov1原理详细解读及实战(二)实战篇,Yolo系列模型原理详细解读及实战,yolov1

labels文件夹中存放了每张图片的标注文件。例如:8 0.585 0.7306666666666667 0.122 0.3413333333333333 。含义如下:

<object-class> <x> <y> <width> <height>

其中,x,y,width和height是指标注框的左上角点坐标及宽高信息。

2007_train.txt、2007_val.txt表示训练集和验证集中图片的路径。代码最后执行 type 2007_train.txt 2007_val.txt > train.txt 将训练集和验证集放在了同一个txt中。

修改源代码并重新编译Darknet

步骤1:修改darknet/src/yolo.c

//改为自己的数据集类别
char *voc_names[] = {"bicycle", "boat", "dog", "cat","person"};
// train_images保存的是上述生成的train.txt
char *train_images = "VOCdevkit/VOC2007/train.txt";
//backup_directory是训练过程中生成的weights权重文件保存的路径
char *backup_directory = "darknet/backup/";

//修改数据集类别数为5(我的是5类)
draw_detections(im, l.side*l.side*l.n, thresh, boxes, probs, voc_names, alphabet, 5);
else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, cam_index, filename, voc_names, 5, frame_skip, prefix);

步骤2:修改darknet/src/yolo_kernels.cu

# 修改数据集类别数为5(我的是5类)
draw_detections(det, l.side*l.side*l.n, demo_thresh, boxes, probs, voc_names, voc_labels, 5);

步骤3:修改darknet/cfg/yolov1/yolo.cfg

output= 735  //最后一层的全连接层,output=(5×2+classnum(=5))×7×7)
activation=linear

[detection]
classes= 5  //数据集类别

步骤4:重新编译Darknet。

cd darknet
make -j8

Yolov1原理详细解读及实战(二)实战篇,Yolo系列模型原理详细解读及实战,yolov1

训练模型

步骤1:下载darknet.conv.weights。darknet.conv.weights是卷积网络在分类网络上预训练的权重,在此基础上训练。

wget http://pjreddie.com/media/files/darknet.conv.weights

步骤2:训练。

./darknet yolo train cfg/yolov1/yolo.cfg darknet.conv.weights

一切正常的话,就开始训练了。如图所示。

Yolov1原理详细解读及实战(二)实战篇,Yolo系列模型原理详细解读及实战,yolov1

测试

./darknet yolo test cfg/yolov1/yolo.cfg backup/yolo_final.weights

然后输入一张图片,测试结果如下:

Yolov1原理详细解读及实战(二)实战篇,Yolo系列模型原理详细解读及实战,yolov1文章来源地址https://www.toymoban.com/news/detail-680512.html

到了这里,关于Yolov1原理详细解读及实战(二)实战篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • YOLO系列概述(yolov1至yolov7)

    YOLO系列概述(yolov1至yolov7)

    参考: 睿智的目标检测53——Pytorch搭建YoloX目标检测平台 YoloV7 首先我们来看一下yolo系列的发展历史,yolo v1和yolox是anchor free的方法,yolov2,yolov3,一直到yolov7是anchor base的方法。首选我们来回顾下每个版本的yolo都做了些什么 yolo v1是将 416 ∗ 416 416*416 4 1 6 ∗ 4 1 6 的图片,分

    2024年02月05日
    浏览(15)
  • 【YOLO系列】YOLOv5超详细解读(网络详解)

    【YOLO系列】YOLOv5超详细解读(网络详解)

    吼吼!终于来到了YOLOv5啦! 首先,一个热知识:YOLOv5没有发表正式论文哦~ 为什么呢?可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧,hh 前言 一、YOLOv5的网络结构  二、输入端 (1)Mosaic数据增强 (2)自适应锚框计算 (3)自适应图片缩放 三、Backbone (1)Focus结构 (2)CSP结构

    2023年04月09日
    浏览(29)
  • 目标检测——YOLO系列学习(一)YOLOv1

    目标检测——YOLO系列学习(一)YOLOv1

    YOLO可以说是单阶段的目标检测方法的集大成之作,必学的经典论文,从准备面试的角度来学习一下yolo系列。 RCNN系列,无论哪种算法,核心思路都是 Region Proposal(定位)+ classifier(修正定位+分类) 。所以也被称为两阶段算法。但是难以达到实时检测的效果,因此yolov1将其修

    2024年04月25日
    浏览(12)
  • 【YOLO系列】YOLOv3论文超详细解读(翻译 +学习笔记)

    【YOLO系列】YOLOv3论文超详细解读(翻译 +学习笔记)

    YOLOv3(《Yolov3:An incremental improvement》)是Joseph Redmon大佬关于YOLO系列的最后一篇,由于他反对将YOLO用于军事和隐私窥探,2020年2月宣布停止更新YOLO。  YOLOv3在YOLOv2的基础上改良了网络的主干,利用多尺度特征图进行检测,改进了多个独立的Logistic regression分类器来取代softmax来

    2024年02月07日
    浏览(19)
  • 【YOLO系列】YOLOv4论文超详细解读2(网络详解)

    【YOLO系列】YOLOv4论文超详细解读2(网络详解)

     上一篇我们一起读了YOLOv4的论文《YOLOv4:Optimal Speed and Accuracy of Object Detection》(直通车→【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)),有了初步的印象,论文里面涉及到很多tricks,上一篇介绍的比较简略,我们这篇来详细介绍一下。 一、YOLOv4的简介  二、YO

    2024年02月02日
    浏览(9)
  • 【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)

    【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)

    时隔一年,YOLOv2隆重登场,新的YOLO版本论文叫《YOLO9000: Better, Faster, Stronger》,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基础上,进行了大量改进,提出了 YOLOv2 和 YOLO9000,重点解决YOLOv1召回率和定位精度方面的不足。 论文原文:[1612.08242] YOLO9000: Better, Faster, Stronger (arxiv.org) 项

    2023年04月08日
    浏览(11)
  • 【YOLO系列】YOLOv7论文超详细解读(翻译 +学习笔记)

    【YOLO系列】YOLOv7论文超详细解读(翻译 +学习笔记)

    终于读到传说中的YOLOv7了~≖‿≖✧ 这篇是在美团的v6出来不到一个月就高调登场,作者还是我们熟悉的AB大神(对,就是v4那个),读起来又是“熟悉”的感觉(贯穿了我的整个五一假期(╯-_-)╯╧╧)。 其实关于YOLOv7的网络结构还有很多细节值得深入研究,以及代码

    2024年02月02日
    浏览(13)
  • 【目标检测系列】YOLOV1解读

    【目标检测系列】YOLOV1解读

    从R-CNN到Fast-RCNN,之前的目标检测工作都是分成两阶段,先提供位置信息在进行目标分类,精度很高但无法满足实时检测的要求。 而YoLo将目标检测看作回归问题,输入为一张图片,输出为S*S*(5*B+C)的三维向量。该向量结果既包含位置信息,又包含类别信息。可通过损失函数,

    2024年02月13日
    浏览(13)
  • 【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

    【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

    吼吼!终于来到了YOLOv5啦! 首先,一个热知识:YOLOv5没有发表正式论文哦~ 为什么呢?可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧,hh 前言 一、YOLOv5的网络结构  二、输入端 (1)Mosaic数据增强 (2)自适应锚框计算 (3)自适应图片缩放 三、Backbone (1)Focus结构 (2)CSP结构

    2024年02月07日
    浏览(11)
  • 经典目标检测YOLO系列(一)YOLOV1的复现(1)总体架构

    经典目标检测YOLO系列(一)YOLOV1的复现(1)总体架构

    实现原版的YOLOv1并没有多大的意义,因此,根据 《YOLO目标检测》(ISBN:9787115627094) 一书,在不脱离YOLOv1的大部分核心理念的前提下,重构一款较新的YOLOv1检测器,来对YOLOV1有更加深刻的认识。 书中源码连接:GitHub - yjh0410/RT-ODLab: YOLO Tutorial 对比原始YOLOV1网络,主要改进点如下:

    2024年02月03日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包