Yolov2模型——pytorch实现

article/2025/8/22 15:19:08

论文传送门:YOLO9000: Better, Faster, Stronger

Yolov2的改进:

1.批标准化(Batch Normalization):在conv后加入BN(conv不再使用bias),改善模型的收敛性,同时去掉dropout;
2.高分辨率分类器(High Resolution Classifier):使用448x448的完整分辨率对分类网络(主干网络)进行10epoch的预训练;
3.锚框(Convolutional With Anchor Boxes):引入anchor的概念来预测bbox,每个anchor单独预测目标和类别,目标预测先验框(anchor)与真实框之间的IOU,类别预测存下目标的前提下,该类别的条件概率;
4.尺寸聚类(Dimension Clusters):使用k-means聚类的方法获得anchor的预设尺寸;
5.直接位置预测(Direct location prediction):将网络输出的中心坐标偏移参数 t x t_x tx t y t_y ty和置信度(IOU) t o t_o to通过sigmoid激活函数,将其值压缩在(0,1);
6.细粒的特征(Fine-Grained Features):在backbone中提取浅层特征,经过passthrough layer(focus)后与深层特征相接(concat);
7.多尺度训练(Multi-Scale Training):每10个batches,随机改变网络输入图像尺寸,从 [ 320 , 352 , . . . , 608 ] [320,352,...,608] [320,352,...,608]中选取(32的整数倍,因为图像经过网络缩减了32倍),增强模型的鲁棒性;

Yolov2的结构:

使用Darknet19(去掉分类部分)作为backbone提取特征,使用卷积和passthrough layer处理浅层特征,使用两层卷积处理深层特征,并对两层特征进行Concat,最后经过卷积变换得到通道数为125的输出。
图示Darknet19的输入图像尺寸为224,但在Yolov2中作backbone,输入图像尺寸为 [ 320 , 352 , . . . , 608 ] [320,352,...,608] [320,352,...,608]
Yolov2结构

Yolov2的输出:

对于VOC数据集,当输入图像尺寸为416时,网络输出为(125,13,13),其中13x13代表169个anchor位置; 125 = ( 4 + 1 + 20 ) ∗ 5 125=(4+1+20)*5 125=(4+1+20)5,4代表目标回归参数,1代表目标置信度,20代表20个类别的条件概率,最后一个5代表anchor的尺寸数,即每个位置存在5种尺寸的anchor。

Yolo9000的含义:

作者采用一种联合训练的方式,使得模型可以同时检测超过9000个类别,故取名为Yolo9000。
(代码仅实现模型结构部分)

import torch
import torch.nn as nn
import randomdef conv(in_channels, out_channels, kernel_size):  # conv+bn+leakyrelupadding = 1 if kernel_size == 3 else 0return nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size, 1, padding, bias=False),nn.BatchNorm2d(out_channels),nn.LeakyReLU(0.1))class Darknet19(nn.Module):  # darknet19def __init__(self):super(Darknet19, self).__init__()self.maxpool = nn.MaxPool2d(2, 2)self.conv1 = conv(3, 32, 3)self.conv2 = conv(32, 64, 3)self.bottleneck1 = nn.Sequential(conv(64, 128, 3),conv(128, 64, 1),conv(64, 128, 3))self.bottleneck2 = nn.Sequential(conv(128, 256, 3),conv(256, 128, 1),conv(128, 256, 3))self.bottleneck3 = nn.Sequential(conv(256, 512, 3),conv(512, 256, 1),conv(256, 512, 3),conv(512, 256, 1),conv(256, 512, 3))self.bottleneck4 = nn.Sequential(conv(512, 1024, 3),conv(1024, 512, 1),conv(512, 1024, 3),conv(1024, 512, 1),conv(512, 1024, 3))def forward(self, x):x = self.conv1(x)x = self.maxpool(x)x = self.conv2(x)x = self.maxpool(x)x = self.bottleneck1(x)x = self.maxpool(x)x = self.bottleneck2(x)x = self.maxpool(x)shallow_x = self.bottleneck3(x)  # 浅层特征deep_x = self.maxpool(shallow_x)deep_x = self.bottleneck4(deep_x)  # 深层特征return shallow_x, deep_xclass Yolov2(nn.Module):def __init__(self):super(Yolov2, self).__init__()self.backbone = Darknet19()self.deep_conv = nn.Sequential(conv(1024, 1024, 3),conv(1024, 1024, 3))self.shallow_conv = conv(512, 64, 1)self.final_conv = nn.Sequential(conv(1280, 1024, 3),nn.Conv2d(1024, 125, 1, 1, 0))def passthrough(self, x):  # passthrough layerreturn torch.cat([x[:, :, ::2, ::2], x[:, :, ::2, 1::2], x[:, :, 1::2, ::2], x[:, :, 1::2, 1::2]], dim=1)def forward(self, x):shallow_x, deep_x = self.backbone(x)  # (B,512,26,26)、(B,1024,13,13)shallow_x = self.shallow_conv(shallow_x)  # (B,512,26,26)-->(B,64,26,26)shallow_x = self.passthrough(shallow_x)  # (B,64,26,26)-->(B,256,13,13)deep_x = self.deep_conv(deep_x)  # (B,1024,13,13)-->(B,1024,13,13)feature = torch.cat([deep_x, shallow_x], dim=1)  # (B,1024,13,13)cat(B,256,13,13)-->(B,1280,13,13)return self.final_conv(feature)  # (B,1280,13,13)-->(B,1024,13,13)-->(B,125,13,13)if __name__ == "__main__":batch_size = 8image_channels = 3image_size = random.randrange(320, 608 + 32, 32)  # [320,352,...,608]images = torch.randn(batch_size, image_channels, image_size, image_size)print(images.shape)yolov2 = Yolov2()print(yolov2(images).shape)

http://chatgpt.dhexx.cn/article/rdw9TXqn.shtml

相关文章

【YOLO系列】--YOLOv2超详细解读/总结

本章论文: YOLOv2论文(YOLO9000: Better, Faster, Stronger)(原文+解读/总结+翻译) YOLO系列解读直通车🚀: YOLO系列-【YOLOv1】🚀 YOLO系列-【YOLOv2】&a…

YOLOv1、YOLOv2和YOLOv3对比

YOLOv1、YOLOv2和YOLOv3对比 R-CNN系列YOLOv1结构目标输出网络训练YOLOv1的局限性和R-CNN系列的对比 YOLOv2结构目标输出网络训练关于YOLO9000 YOLOv3结构目标输出网络训练YOLOv3系统做过的不成功的尝试 未来 YOLO深度卷积神经网络已经经过原作者Joseph Redmon已经经过了3代4个…

YOLOv2 论文笔记

论文地址:YOLO9000: Better, Faster, Stronger 项目主页:YOLO: Real-Time Object Detection (最近博客下很多人请求Caffe 代码,受人所托,已经不再提供,且关闭本文评论,望请见谅) …

YOLO - v1

先理解预测阶段: 1)一个448*448*3的图像经过YOLO这个黑箱输出一个7*7*30矩阵; 2)7*7*30的矩阵中的30维是5520;5是预测的bbox的x,y,w,c;20是20个类别的条件概率; 解释c: 解释条件概率:它的意义是…

YOLOV2网络模型

目录 资料 网络模型原理 网络框架 相对于yoloV1的改进 Batch Norm High Resolution Classifier Convolutional With Anchor Boxes Dimension Clusters New Network:Darknet-19 Direct location prediction PassThrough Multi-Scale Training Loss YOLOV2的训…

YOLOv3

YOLOv3 论文信息论文标题:论文作者:收录期刊/会议及年份: 论文学习YOLOv3 网络架构:YOLO 输出特征图解码(前向过程):训练策略与损失函数(反向过程):精度与性能…

从YOLO到YOLO v2再到YOLO v3

配置相关博客链接: YOLO V3-GPU版本在Windows配置及注意事项 YOLO v3在Windows下的配置(无GPU)opencv3.2.0VS2015 前不久YOLO v3出来了,就迫不及待的想试一下。以前装过darknet所以我把整个darknet的文件夹全部删掉。 然后按照…

yolovx

1.输入端 (1)Strong augmentation Yolox主要采用了Mosaic、Mixup两种数据增强方法 有两点需要注意: (1)在训练的最后15个epoch,这两个数据增强会被关闭掉。 而在此之前,Mosaic和Mixup数据增…

史上最通俗易懂的YOLOv2讲解

博主本来想自己写一篇关于YOLOv2的论文笔记的,在找资料的过程中看到这篇天秀的博客,就“据为己用”了。不得不出,很多大佬写的都太深刻了,还是转载比较舒服点~~~~~~ 本文转自目标检测|YOLOv2原理与实现(附YOLOv3) 前 言 在前面的…

【目标检测】YOLOV2详解

前言 前面我们已经讲解过了YOLOV1,因此在这里我会接着前几天的讲解,进一步写一下YOLOV2的基本思想和改进。 YOLOv2的论文全名为YOLO9000: Better, Faster, Stronger,它斩获了CVPR 2017 Best Paper Honorable Mention。在这篇文章中&#xf…

YOLOv2目标检测算法——通俗易懂的解析

目录 YOLOv2目标检测算法前沿一.YOLOv2的改进1.1.BN1.2.High Resolution Classifier1.3.anchor1.4.Fine-Grained Features(细粒度特征)1.5.Multi-Scale Training 二.损失函数三.检测更多类别 YOLOv2目标检测算法 前沿 前面我们讲过了YOLOv1目标检测算法,不了解的小…

YOLOP v2

还是先道歉啊 就是自学求知 又一个自称更好的!! 网上找到的就发了 不知道 大伙用的怎么样啊 更好、更快、更强 ... YOLOv7结合YOLOP的多任务版本 论文链接:https://arxiv.org/pdf/2208.11434v1.pdf 代码链接:https://github.com/CAIC-AD/YOLOPv2 在…

YOLO系列(V1-V2-V3)

yolo系列整理 版本作者主页程序论文yoloV1点击打开点击打开点击打开yoloV2点击打开点击打开点击打开yoloV3点击打开点击打开点击打开 改进 V2 VS V1: 增加BN层: 解决问题:每层的输入分布一直在改变,训练难度增加;采取措施&am…

YOLO_v2讲解

文章目录 一:YOLO_v2的改进二:网络细节【BN层取代了Dropout】【高分辨率分类器】【Anchor思想】【K-means选定先验框】【预测坐标相对于Grid Cell的位置】【细粒度的特征】【多尺度训练】 三:损失函数四:YOLO_v2的不足 一&#xf…

YOLOV2原理理解

YOLOV2 一、YOLOV1的不足之处二、YOLOV2的改进论文精读AbstractIntroductionBetter(重点笔记)FasterStronger(非重点) 三、YOLOV2网络的输出输出结果解释输出图示 四、YOLOV2的LOSS函数五、Kmeans聚类——anchor box六、YOLOV2算法总结七、关于YOLOV2中a…

【目标检测】单阶段算法--YOLOv2详解

论文题目:《YOLO9000: Better, Faster, Stronger》 论文地址:https://arxiv.org/pdf/1612.08242.pdf 一文读懂YOLOv1:YOLOv1 一文读懂YOLOv3:YOLOv3 一文读懂YOLOv4:YOLOv4 1. 前言 在前面的一篇文章中,我…

yolov2详细讲解

yolov2详细讲解 概述 YOLO v1虽然检测速度快,但在定位方面不够准确,并且召回率较低。为了提升定位准确度,改善召回率,yolov2在yolov1的基础上提出了几种改进策略,如下图所示,一些改进方法能有效提高模型的…

YOLO V2解析

YOLO V2是YOLO系列的第二版,在YOLO V1的基础上加以改进,改善了YOLO V1定位不准的问题,又保证了检测的速度,可谓集准确性与速度于一身(YOLO V2获得了CVPR2017的最佳论文提名)。YOLO V2的原文提出了两个模型:YOLO V2和YOLO9000,本文主要着重YOLO V2,下面让我们一同走进Y…

YOLOV2详解

yolov2 YOLOv2论文中英文对照翻译_IT修炼家的博客-CSDN博客 YOLOv2 论文笔记Jesse_Mx的博客-CSDN博客yolov2论文 精读目标检测5——yolo2详解及其预测代码复现cv君的博客-CSDN博客yolo2 目标检测|YOLOv2原理与实现(附YOLOv3) - 知乎 (zhihu.com) YOLO v2 - ZhicongHou - 博客园…

YOLO 超详细入门02 v2 (含代码及原文)

文章目录 前言背景总结一、YOLOv2改进之框架1.1 网络架构1.2 Batch Normalization 二、YOLOv2改进方法之尺寸相关2.1 High Resolution Classifier(高分辨率的分类器)原因步骤 2.2 Fine-Grained Features(细粒度特征)原因步骤 2.3 …