IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> yolo系列笔记 -> 正文阅读

[人工智能]yolo系列笔记

yolo v1

yolo v1的模型训练过程。

  1. 首先要做标签的变换,因为yolo v1生成的 embedding 是 b a t c h ? s i z e × S × S × 30 batch-size \times S \times S \times 30 batch?size×S×S×30的维度,所以首先要把每张图像的标签也转换成相同的 S × S × 30 S \times S \times 30 S×S×30的维度。标签转换的具体流程如下:
    def encoder(self, boxes, labels):   //这里的boxes是voc2007.txt中的bounding box
       """
       boxes (tensor) [[x1,y1,x2,y2],[]]
       labels (tensor) [...]
       return 14x14x30   //这里的 S = 14 B = 2
       """
       grid_num = 14
       target = torch.zeros((grid_num, grid_num, 30))    //每张图片都要根据voc2007.txt中的标签编码成[S, S, 30]的向量
       cell_size = 1./grid_num    # 归一化后每个网格的大小
       wh = boxes[:, 2:] - boxes[:, :2]    # 读出每个bounding box的宽高
       cxcy = (boxes[:, 2:] + boxes[:, :2]) / 2    # 读出每个bounding box的中心点
       for i in range(cxcy.size()[0]):  # 有几个obj就是[n, n]
           cxcy_sample = cxcy[i]   # 第 i 个obj的bounding box 的归一化中心点
           ij = (cxcy_sample/cell_size).ceil()-1  # 找到该obj的bounding box的中心的索引,也就是看它属于那个网格
           target[int(ij[1]), int(ij[0]), 4] = 1   # 将target中box设为1
           target[int(ij[1]), int(ij[0]), 9] = 1   # 将target中box设为1
           target[int(ij[1]), int(ij[0]), int(labels[i])+9] = 1    # 将target中class设为1
           xy = ij*cell_size  # 匹配到网格的左上角相对坐标
           delta_xy = (cxcy_sample - xy)/cell_size
           target[int(ij[1]), int(ij[0]), 2:4] = wh[i]    # 每个bounding box的归一化宽高
           target[int(ij[1]), int(ij[0]), :2] = delta_xy  # 相对中心点的偏移量
           target[int(ij[1]), int(ij[0]), 7:9] = wh[i]
           target[int(ij[1]), int(ij[0]), 5:7] = delta_xy
       return target

标签转换的过程就是将图片编码成一个[S,S,30]维的向量,也就是将 S × S S \times S S×S个patch每个都encode为30维的向量,如果这个patch 中存在object,则将该patch的30维的向量的第 5 个, 第 10 个位置(即是置信度,代表有 obj 的位置)置 1,另外将 20 个类别的相应类别位置置 1,注意前 4 个位置是经过转换后的,(x, y, w, h --> x y 代表相对中心点的偏移量,w h–>代表 每个bounding box的归一化宽高),因为该obj的框是唯一的,所以第1-4 个和 5-8个位置的数都相同。
2. yolo 的训练流程:先将整张图片分成 S × S S \times S S×S 个patch,然后每个 patch 负责预测两个 bounding box,如果 图片分成了 14 × 14 14 \times 14 14×14个patch,那么就将有 14 × 14 × 2 14 \times 14 \times 2 14×14×2个bounding box,然后通过计算 IoU来选择出最好的那个 bounding box作为最终的bounding box。

  • 损失的计算
    yolo v1的损失包括 5 个部分。
    在这里插入图片描述
  • IoU的计算
    注意:在训练过程中没有用到 NMS

模型的预测过程(指预测图片)
这个过程和训练过程不同的是采用了 NMS 方法来产生 预测窗口。
NMS方法原理

yolo v1的注意点
1、每个网格只预测一个类别(也即一个类别的边界框),而且最后只取置信度最大的那个边界框。这就导致如果多个不同物体(或者同类物体的不同实体)的中心落在同一个网格中,会造成漏检。
2、yolo对相互靠的很近的物体,还有很小的群体检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
3、位置精准性差,召回率低。由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是大小物体的处理上,还有待加强
4、对测试图像中,同一类物体出现的新的不常见的长宽比和其他情况时。泛化能力偏弱
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 21:33:29  更:2021-07-25 21:33:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 7:51:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码