YOLOV3代码分析

news/2024/7/10 23:33:23 标签: YOLO, pytorch, 深度学习

文件夹和文件的作用

  • config:文件的配置:
    1.coco.data:存放coco数据集的相关信息,如类别总数,数据集的路径等
    2.yolov3.cfg: yolov3的网络架构

  • data:存放训练集和测试集
    1.coco:存放coco训练集和测试集

    labels中存放每个照片的标签,分别放在一个txt文件中
    5k.txt存放验证集的每一个照片的路径
    coco.names存放各种分类的名称
    trainvalno5k.txt存放训练集和验证集每一个照片的路径

  • output:预测结果存放路径

  • utils:工具类存放
    1.augmentations.py:图片的反转
    2.datasets.py:

    • 导入模块:

    glob模块用来查找文件目录和文件,并将搜索的到的结果返回到一个列表中,

    torch.nn.functional与torch.nn的区别:torch.nn.functional.x 为函数,与torch.nn不同, torch.nn.x中包含了初始化需要的参数等 attributes 而torch.nn.functional.x则需要把相应的weights 作为输入参数传递,才能完成运算, 所以用torch.nn.functional创建模型时需要创建并初始化相应参数.
    torch.nn.x初始化要在__init__中,torch.nn.functional参数初始化在__init()__中,而使用的时候在forward(参数)中。torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)
    torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode=‘zeros’)

    torch.utils.data中的Dataset和DataLoader, Dataset是对数据进行封装,DataLoader是数据加载,从Dataset中取一个批次的数据。
    transforms主要实现对数据集的预处理、数据增强、转换成tensor等一系列操作

    • 函数:

    pad_to_square:如果图像不是正方形,则将其填充成正方形。h>=w,就将w填充成与h一样长,反之亦然。

    resize:将图像变成指定的size

    random_size:为了使模型适应各种size的输入,将图片随机变为一个size,但是这个size要是32的倍数,因为网络进行五次下采样。

    • 类:

    ImageFolder:

    ListDataset:对数据集进行封装,继承Dataset

    __init():找到训练集的所有照片的路径和对应的标签路径,初始化其他参数

    __getitem():取出index对应的训练集照片,将其填充为正方形。取出对应的标签,将标签转化为填充后的标签值。将标签和照片随机进行反转。

    collate_fn():

    len:返回数据集的长度

3.parse_config.py:

parse_model_config:path为网络配置的路径,如yolov3.cfg。从对应的网络配置中一层层读取网络信息,添加到module_defs中。如果是卷积层就不需要归一化

4.utils.py:

build_targets():根据预测结果的batch_size,anchor box,classes,gridsize初始化各种参数,然后计算所有3*anchor boxes,这里的anchor boxes是所有像素点对应的框。
用真实框与预测框计算iou值,并返回这三种框中那个框和真实框最接近以及相应的得分。然后将检测都最高得分的anchor 所在格子的相应参数置为1
真实标签值的xy是除以了整张图片的wh的,在01直接,而求出来的xy是相对于gridsize的偏移量,也是01之间。

  • weights:权重存放路径

  • detect.py:解析参数,配置模型,加载权重,然后预测出一个bounding box,计算每次预测的时间,最后画图并存放结果。

  • models.py:模型的配置
    1.函数:

    create_modules:nn.Sequential按顺序执行网络块,自定义了forward,而nn.ModuleList没有,需要循环来对每个网络模块forward,而且它的网络模块可以不按照顺序执行。
    根据module_defs中的每个模块去构建网络结构
    2.类:
    Darknet:
    forward用于一层一层前向module(x),如果是yolo层还有计算损失函数

    YOLOLayer:
    compute_grid_offsets计算每个格子的坐标,在前向传播中用来将bbox对于边界框的位置还原成绝对坐标
    forward 将预测结果整理成output,与真实标签计算损失函数,还有各种指标

  • train.py:训练模型


http://www.niftyadmin.cn/n/5057138.html

相关文章

XML-Based Configuration Beans for Ioc Container

XML-Based Configuration XML-based configuration is the traditional way of configuring beans in Spring. <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"h…

css画一条0.5px的直线

【css】画一条0.5px的直线_css画一条0.5px的直线_a堅強的泡沫的博客-CSDN博客 一些用来装饰的图形&#xff0c;比如字体的前面或者后面设置图标&#xff0c;画一条线 如果要画很细很细的线&#xff0c;0.5px ,怎么画 用到css3的transform的scaleY(0.5)函数&#xff0c;对象图…

Stm32_标准库_4_TIM中断_PWM波形_呼吸灯

基本原理 PWM相关物理量的求法 呼吸灯代码 #include "stm32f10x.h" // Device header #include "Delay.h"TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructuer;//结构体 GPIO_InitTypeDef GPIO_InitStructur…

麒麟系统开机设置默认分辨率

下方命令可以查看需设置分辨率的配置信息 gtf 1920 1080 60在/etc/X11/xorg.conf.d目录下创建一个xorg.conf文件&#xff0c;该文件决定系统启动后默认的分辨率 在xorg.conf内填入需要的分辨率信息 Section "Monitor"Identifier "Monitor0"VendorName…

AI能给百融云带来什么?

一大堆有关ChatGPT的利好消息出现之后&#xff0c;市场的反应难得的跟投资者预期站在了一起&#xff0c;AIGC也终于有了跑赢CPO的苗头。二级市场的逻辑不用重复&#xff0c;毕竟AI已经炒了大半年&#xff0c;但有没有发现一个问题&#xff1f;就是在不知不觉中&#xff0c;AI应…

前端架构师之01_JQuery

1 jQuery快速入门 1.1 什么是jQuery 它是一个开源的JavaScript类库 。 常见的JavaScript类库&#xff1a;jQuery、Prototype、ExtJS、Mootools和YUI等。 jQuery的核心理念&#xff1a;write less&#xff0c;do more&#xff08;写的更少&#xff0c;做的更多&#xff09;。…

什么是用户画像?

(1&#xff09;首先用户画像是个动词逻辑&#xff0c;不是名词&#xff0c;就是给用户绘制肖像。 (2&#xff09;在互联网这个平台上&#xff0c;绘制肖像就相当千给用户打标签 (3&#xff09;标签通常是人为规定的高度精炼的特征标识&#xff0c;如年龄、性别、地域、兴趣等…

Vue3 中使用provide和reject

1、provide 和reject 可以实现一条事件线上的 父传子&#xff0c;父传孙等&#xff1b;相比较 props emits 仅限与父子传参更方便&#xff0c;相较于pinia书写更简单&#xff0c;但是需要注意使用响应式&#xff0c;如果是非响应式的会导致页面更新不及时 父组件 <templat…