YOLOv1代码复现(论文复现)

news2024/10/1 15:26:19

YOLOv1代码复现(论文复现)

本文所涉及所有资源均在传知代码平台可获取

文章目录

    • YOLOv1代码复现(论文复现)
        • 论文介绍
        • 主要内容
        • 实验部分
          • 卷积网络结构
          • 计算损失
          • 核心代码
        • 缺点

论文介绍

该论文就是YOLOv1,YOLOv1是YOLO系列目标检测算法的第一个版本,由Joseph Redmon等人于2015年提出。它是一种端到端的卷积神经网络,以极高的速度实现目标检测,尤其在实时应用中表现出色

主要内容

YOLO系列都包括:输入端、Backbone、Neck,Head
其中输入端:含有输入数据(图片or视频)、数据增强算法以及预处理操作部分Backbone结构:核心特征提取器Neck结构:V3版本才有,参考了FPN的特征融合思想,明显提升小物体的检测效果Head结构:包含Head检测头、损失函数以及Head结构的优化策略

实验部分
卷积网络结构

在数据集上进行训练卷积层。预训练使用下图的前20个卷积层,再跟上后边的平均池化层以及一个全连接层

在这里插入图片描述

计算损失

在这里插入图片描述

背景概率损失 坐标损失 类别预测损失,只有前景概率(三四行)达到一定值,判断为真的存在检测目标的时候,才会接着计算坐标损失(第一二行)和类别预测损失(第五行)。因此预测损失不是对每一个gird cell都做的。在该文章中是用一周时间达到在ImageNet 2012数据集上88%的精度,整了一个预训练权重方便计算

核心代码

原代码是c语言,这里代码是参考了C语言的pytorch代码,用的ResNet网络,省事

class ResNet(nn.Module):
    def __init__(self, block, layers):
        
        super(ResNet, self).__init__()
        # 通道数64
        self.inplanes = 64
        # 卷积层和池化层
        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,bias=False)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
        # block块
        self.layer1 = self._make_layer(block, 64, layers[0])
        self.layer2 = self._make_layer(block, 128, layers[1], stride=2)
        self.layer3 = self._make_layer(block, 256, layers[2], stride=2)
        self.layer4 = self._make_layer(block, 512, layers[3], stride=2)
        # output_block
        self.layer5 = self._make_out_layer(in_channels=2048)
        # 将输出变为30个通道数 7*7*30
        self.avgpool = nn.AvgPool2d(2)  # kernel_size = 2  , stride = 2
        self.conv_end = nn.Conv2d(256, 30, kernel_size=3, stride=1, padding=1, bias=False)
        self.bn_end = nn.BatchNorm2d(30)
        # 参数初始化
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                m.weight.data.normal_(0, math.sqrt(2. / n))
            elif isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()

   
    def _make_layer(self, block, planes, blocks, stride=1):

    def _make_out_layer(self, in_channels):

    def forward(self, x):
        # 网络就长这样
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.maxpool(x)
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.layer4(x)
        x = self.layer5(x)
        x = self.avgpool(x)
        x = self.conv_end(x)
        x = self.bn_end(x)
        x = F.sigmoid(x)  # sigmoid归一化到0-1
        # 改代码只要保证最后是7,7,30就行
        x = x.permute(0, 2, 3, 1)  # (-1,7,7,30)
        return x

关于7x7x30的张量:
7x7是把整张图像分成7x7个
30=(2x4+2x1+20)
其中4代表4个边框坐标信息 x y w h
1代表是否包含需要检测的目标
2代表每个格子上有两个候选框(会拿概率是否包含检测目标概率高的候选框出来用)
20是因为测试的voc2012数据集由20个类别
当1这个概率有大于一个阈值的时候,就会调用20个类别概率中概率最高的那个作为目标检测概率
得到一张图片的7x7x30的张量之后,需要生成目标数据的7x7x30的张量
生成目标数据由于类别概率是确定的,所以1的部分概率均是P概率=1,20部分只有在对应类别概率是P=1,其余都是P=0

缺点

一个图片只能有98个检测框(7x7x2),在经过非极大值抑制后剩下的框更少,就容易有漏检。没有更好平衡小目标和大目标损失

文章代码资源点击附件获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2182611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型部署——NVIDIA NIM 和 LangChain 如何彻底改变 AI 集成和性能

DigiOps与人工智能 人工智能已经从一个未来主义的想法变成了改变全球行业的强大力量。人工智能驱动的解决方案正在改变医疗保健、金融、制造和零售等行业的企业运营方式。它们不仅提高了效率和准确性,还增强了决策能力。人工智能的价值不断增长,这从它处…

Ubuntu网卡配置

一、低阶版本配置网卡步骤:(如Ubuntu 16.04.2 LTS) 编辑配置文件interfaces,添加网卡配置信息 我这边以root用户登录进服务器,就不需要普通用户每次在命令前添加sudo vim /etc/network/interfaces 1.动态获取ip设置: auto ens3 # 网卡设备名称ens3 iface ens3 ine…

Tdesign TreeSelect 树形选择 多选

这里写自定义目录标题 小程序原生开发 Tdesign TreeSelect 树形选择 多选可以选择不同一级分类下的数据 小程序原生开发 Tdesign TreeSelect 树形选择 多选可以选择不同一级分类下的数据 TreeSelect 树形选择 在原demo基础上修改 const chineseNumber 一二三四五六七八九十.…

音视频入门基础:FLV专题(9)——Script Tag简介

一、SCRIPTDATA 根据《video_file_format_spec_v10_1.pdf》第75页到76页,如果某个Tag的Tag header中的TagType值为18,表示该Tag为Script Tag(脚本Tag,又称Data Tag、SCRIPTDATA tag)。这时如果Filter的值不为1表示未加…

昇思MindSpore进阶教程--使能图算融合

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 正文开始 图算融合是MindSpore特有的网络…

十二生肖国庆姓氏专属头像

关注▲洋洋科创星球▲领取十二生肖国庆姓氏专属头像定制! 庆祝祖国75周年华诞,在这个举国欢庆的国庆节时刻,我们特别为您准备了一份独特的礼物——十二生肖国庆姓氏专属头像定制。 十二生肖,又称属相,是中国传统文化中…

Linux 安装redis主从模式+哨兵模式3台节点

下载 https://download.redis.io/releases/ 解压 tar -zxvf redis-7.2.4.tar.gz -C /opt chmod 777 -R /opt/redis-7.2.4/安装 # 编译 make # 安装, 一定是大写PREFIX make PREFIX/opt/redis-7.2.4/redis/ install配置为系统服务 cd /etc/systemd/system/主服务…

盒子是什么? -- 第四课

文章目录 前言一、盒子是什么?二、元素介绍1.边框 - border2.内边距 - padding3. 外边距属性 -- margin 三、拓展知识1.块元素垂直外边距的合并2. 嵌套块元素垂直外边距的合并 四、背景属性五、元素的浮动1.浮动2.清除浮动3.元素定位4. 特殊定位 -- 黏性定位5. z-in…

Python selenium库学习使用实操二

系列文章目录 Python selenium库学习使用实操 文章目录 系列文章目录前言一、模拟登录二、表单录入 前言 在上一篇文章中,我们完成Selenium环境的搭建,和简单的自动化。今天继续深入学习。今天的目标是完成模拟登录,和表单录入。 一、模拟登…

什么是网络准入控制系统?2024年有哪些好用的网络准入控制系统?

网络准入控制系统(Network Access Control, NAC)是一种网络安全解决方案,旨在确保只有符合特定安全策略的设备和用户才能访问网络资源。NAC系统通过在设备连接到网络之前对其进行身份验证、授权和健康状态检查,从而防止未经授权的…

YOLOv11改进 | 注意力篇 | YOLOv11引入GAM注意力机制

1.GAM介绍 摘要:为了提高各种计算机视觉任务的性能,人们研究了各种注意机制。然而,现有的方法忽略了保留通道和空间信息以增强跨维交互的重要性。因此,我们提出了一种通过减少信息减少和放大全球交互表示来提高深度神经网络性能的…

vue3 实现拖拽排序效果 sortablejs

效果图 依赖安装 npm i sortablejs -S <template><div class"warp"><div class"parent-box" v-for"pItem in sortData" :key"pItem.name"><h2 class"parent-name">{{ pItem.name }}</h2>&l…

程序计数器(学习笔记)

程序计数器是一块较小的内存空间&#xff0c;它的作用可以看做是当前线程所执行的字节码的信号指示器&#xff08;偏移地址&#xff09;&#xff0c;Java编译过程中产生的字节码有点类似编译原理的指令&#xff0c;程序计数器的内存空间存储的是当前执行的字节码的偏移地址 因为…

唱响红色志愿,赞歌献给祖国——杭州建德市庆祝中华人民共和国成立75周年联欢盛宴纪实

作者&#xff1a;华夏之音/李望 通讯员&#xff1a;王江平 9月30日上午&#xff0c;金桂的香气与红旗的鲜艳交相辉映&#xff0c;杭州建德市党群服务中心、建德市新时代文明实践中心内洋溢着一股浓厚的节日氛围。在这里&#xff0c;一场名为“唱响红色志愿、赞歌献给祖国”的联…

企业架构系列(15)ArchiMate第13节:战略视角

战略视角提供了对企业高层战略方向和构成的不同视角建模&#xff0c;使建模者能够专注于某些特定方面。 一、战略视角概览 战略视角主要包括&#xff1a; 战略视角&#xff1a;提供企业战略、能力、价值流和资源以及预期成果的高层概述。能力地图视角&#xff1a;提供企业能力…

MySQL基础篇 part1

为什么使用数据库和数据库基本概念 想在vscode用markdown了&#xff0c;为什么不直接拿pdf版本呢&#xff1f; DB:数据库(Database) 即存储数据的“仓库”&#xff0c;其本质是一个文件系统。它保存了一系列有组织的数据。 DBMS:数据库管理系统(Database Management System)…

Oracle控制文件全部丢失如何使用RMAN智能恢复?

1.手动删除所有控制文件模拟故障产生 2.此时启动数据库发现控制文件丢失 3.登录rman 4.列出故障 list failure; 5.让RMAN列举恢复建议 advise failure; 6.使用RMAN智能修复 repair failure;

当AI遇上金融科技,创新业务场景和案例涌现

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 在这个信息爆炸的时代&#xff0c;我们每天…

【路径规划】使用 RRT、RRT* 和 BIT* 进行网格图的路径规划

摘要 本文比较了三种路径规划算法&#xff1a;快速随机树&#xff08;RRT&#xff09;、快速随机树星&#xff08;RRT* &#xff09;和批量信息树&#xff08;BIT*&#xff09;&#xff0c;在网格图环境中进行路径规划的效果。通过仿真分析这些算法在路径质量、计算效率和收敛…

程序员哪里累了?

程序员是最不累的&#xff0c;最不辛苦的职业&#xff0c;非要说有什么门槛&#xff0c;那只需要你有点智力而已。 在这么多的职业中&#xff0c;比程序员轻松的职业可不多&#xff0c;跟程序员的比起来&#xff0c;大部分的职业更苦、更累。 这些问题经常在网上谈论来谈论去&…