YOLOV1论文以及代码解读

前言

本人作为一名新手,已经学习了一个多月的yolov1,打算通过自己讲解yolo图像处理过程的方式来巩固学习成果,并且发现自己在学习中的不足。希望大家可以给我些学习上的建议,感谢大家的指点。

YOLOV1是2015目标检测算法领域的一项重大突破,这是由以Joseph Redmon为首的大佬们提出的一种新的目标检测算法。在yolov1之前,普遍使用的是RCNN,相较于RCNN的两阶段算法,yolov1是一种单阶段的端到端的算法,它将目标检测问题看作回归问题,他将图片输入网络,获得了获得了图片中包含物体的边界框和分类概率等的信息。


Github源码地址:mirrors / alexeyab / darknet · GitCode 


数据集介绍

VOC2012(Visual Object Classes 2012)是PASCAL VOC挑战赛的一部分,是一个广泛使用的计算机视觉数据集。

  • 发布年份: 2012年

  • 数据类型: 图像数据集

  • 主要任务: 图像分类、目标检测、语义分割、实例分割

数据集包含约11,530张图像。这些图像涵盖了20个不同的对象类别,包括人、动物、交通工具等。每张图像都被标注为包含或不包含某个类别的对象。每个对象实例都被标注了边界框(bounding box)。每个像素都被标注为属于某个对象类别或背景。 每个对象实例的像素都被单独标注。

SegmentationObject和SegmentationClass主要包含的是用于图像分割的数据

JPEGImages存储的是数据集的图片数据(.img),每一张图片所对应的名称如图

Imagesets存储了Action、Layout、Main、Segmentation四个文件夹,分别对应部分的相关信息,在我们目标检测的任务中,只需关注一下Main文件夹下的内容即可。

如图为Main文件夹下的部分内容,主要包含我们所需要检测的物体的在每一张的图片中是否存在。1表示存在,-1表不存在。

如图,为aeroplane_train文档的部份内容,表示在训练数据集内的2008_000008的图片中不存在飞机,在2008_000033中存在飞机。

如图,在Annotation文件夹中主要包含了图片的注释文件(.xml),该文件主要介绍了每张图片的信息,包括尺寸、人工标注的边界框的信息、数据的来源等等。

name:目标名称

pose:面对摄像头的部位。Unspecified表示未识别

truncated:表示该物体是否被图像的边缘所截断,0表示未被截断,1表示被截断

difficult:表示识别该物体的难度

bndbox:表示人工所标注的外接矩形的坐标信息


网络的介绍

原论文所使用的网络为Googlenet网络,本文所使用的网络为Resnet34网络,其有缺点如下:

  • GoogleNet

    • GoogleNet通过Inception模块实现了深而宽的结构,能够捕捉多尺度的特征。

    • 在YOLOv1中使用GoogleNet作为特征提取器,可能会提高网络的表达能力,尤其是在处理多尺度目标时。

    • 然而,GoogleNet的计算量较大,可能会影响实时性能。

  • ResNet

    • ResNet通过残差块的设计,可以构建非常深的网络,同时保持较高的训练效率和性能。

    • 在YOLOv1中使用ResNet作为特征提取器,可能会提高网络的深度和精度,同时减少梯度消失的问题。

    • ResNet的计算量相对较小,可能会更适合实时目标检测任务。

def __init__(self):
    super(MyNet, self).__init__()
    resnet = tvmodel.resnet34(pretrained=True)
    resnet_out_channel = resnet.fc.in_features
    self.resnet = nn.Sequential(*list(resnet.children())[:-2])
    self.Conv_layers = nn.Sequential(
                nn.Conv2d(resnet_out_channel, 1024, 3, padding=1),
                # 通道数为 resnet_out_channel 的特征图转换为输出通道数为 1024 的特征图,卷积核        大小为 3x3,填充(padding)为 1。
                nn.BatchNorm2d(1024),  # 为了加快训练,这里增加了BN层,原论文里YOLOv1是没有的
                nn.LeakyReLU(inplace=True),
                nn.Conv2d(1024, 1024, 3, stride=2, padding=1),
                nn.BatchNorm2d(1024),
                nn.LeakyReLU(inplace=True),
                nn.Conv2d(1024, 1024, 3, padding=1),
                nn.BatchNorm2d(1024),
                nn.LeakyReLU(inplace=True),
                nn.Conv2d(1024, 1024, 3, padding=1),
                nn.BatchNorm2d(1024),
                nn.LeakyReLU(inplace=True),
            )
    self.Conn_layers = nn.Sequential(
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值