yolov3选取正负样本

告别Anchor Box!深入对比YOLOv8/v10的TAL与YOLOv5的ATSS分配策略 本文深入对比了YOLOv8/v10的Task-Aligned Assigner(TAL)与YOLOv5的ATSS分配策略,揭示了目标检测从Anchor-Based到Anchor-Free的范式转变。TAL通过结合分类得分和IoU的任务对齐度量(align_metric),显著提升了检测精度,特别适合小目标密集场景。文章详细分析了两种策略的训练动态性、收敛特性和计算效率,为开发者选择适合的检测算法提供了实践指导。 阅读详情
  • 负责预测目标网格中与ground truth的IOU最大的anchor为正样本(记住这里没有阈值的事情,否则会绕晕)
  • 剩下的anchor中,与全部ground truth的IOU都小于阈值的anchor为负样本
  • 其他是忽略样本
  • 代码未完待续
  • 获取正样本代码,参考这里
def calculate_iou(_box_a, _box_b):
		b1_x1, b1_x2 = _box_a[:, 0] - _box_a[:, 2] / 2, _box_a[:, 0] + _box_a[:, 2] / 2
        b1_y1, b1_y2 = _box_a[:, 1] - _box_a[:, 3] / 2, _box_a[:, 1] + _box_a[:, 3] / 2
        b2_x1, b2_x2 = _box_b[:, 0] - _box_b[:, 2] / 2, _box_b[:, 0] + _box_b[:, 2] / 2
        b2_y1, b2_y2 = _box_b[:, 1] - _box_b[:, 3] / 2, _box_b[:, 1] + _box_b[:, 3] / 2
        box_a = torch.zeros_like(_box_a)
        box_b = torch.zeros_like(_box_b)
        box_a[:, 0], box_a[:, 1], box_a[:, 2], box_a[:, 3] = b1_x1, b1_y1, b1_x2, b1_y2
        box_b[:, 0], box_b[:, 1], box_b[:, 2], box_b[:, 3] = b2_x1, b2_y1, b2_x2, b2_y2
        A = box_a.size(0)
        B = box_b.size(0)
        # intersection
        # expand to A*B*2 and compare
        max_xy  = torch.min(box_a[:, 2:].unsqueeze(1).expand(A, B, 2), box_b[:, 2:].unsqueeze(0).expand(A, B, 2))
        min_xy  = torch.max(box_a[:, :2].unsqueeze(1).expand(A, B, 2), box_b[:, :2].unsqueeze(0).expand(A, B, 2))
        # minus and set 0 if result less than 0
        inter   = torch.clamp((max_xy - min_xy), min=0)
        # size:A*B
        inter   = inter[:, :, 0] * inter[:, :, 1]
        area_a = ((box_a[:, 2]-box_a[:, 0]) * (box_a[:, 3]-box_a[:, 1])).unsqueeze(1).expand_as(inter) 
        area_b = ((box_b[:, 2]-box_b[:, 0]) * (box_b[:, 3]-box_b[:, 1])).unsqueeze(0).expand_as(inter)
        union = area_a + area_b - inter
        return inter / union
'''
targets是标签列表,长度是batch_size,元素的shape是(真实框个数*5)
anchors是[[116,90],[156,198],[373,326]]或[[30,61],[62,45],[59,119]]或[[10,13],[16,30],[33,23]]
in_h, in_w是13,13或26,26或52,52
num_classes是类别数,voc是20,COCO是80
'''
def get_target(targets, anchors, in_h, in_w, num_classes):
    bs=len(targets)
    positive=torch.zeros(bs,len(anchors),in_h, in_w, 5+num_classes,requires_grad = False)
    negtive=torch.ones(bs,len(anchors),in_h, in_w, requires_grad = False)
    for b in range(bs):
        batch_target = torch.zeros_like(targets[b])
        # 计算该特征图上标签的值
        batch_target[:, [0,2]] = targets[b][:, [0,2]] * in_w
        batch_target[:, [1,3]] = targets[b][:, [1,3]] * in_h
        batch_target[:, 4] = targets[b][:, 4]
        batch_target = batch_target.cpu()
        # 计算标签和anchor的IOU
        # 这里可以随便选一个共同中心(0,0),根据高宽计算IOU
        gt_box= torch.FloatTensor(torch.cat((torch.zeros((batch_target.size(0), 2)), batch_target[:, 2:4]), 1))
        anchor_shapes=torch.FloatTensor(torch.cat((torch.zeros((len(anchors), 2)), torch.FloatTensor(anchors)), 1))
        iou=calculate_iou(gt_box, anchor_shapes)
        # 获得与标签最匹配的anchor的索引
        best_ns = torch.argmax(iou, dim=-1)
        for t, best_n in enumerate(best_ns):
            # 第t个标签中心所在网格,种类
            i = torch.floor(batch_target[t, 0]).long()
            j = torch.floor(batch_target[t, 1]).long()
            c = batch_target[t, 4].long()
            positive[b,best_n,j,i,0]=batch_target[t, 0] - i.float()
            positive[b,best_n,j,i,1]=batch_target[t, 1] - j.float()
            positive[b,best_n,j,i,2]=math.log(batch_target[t, 2] / anchors[best_n][0])
            positive[b,best_n,j,i,3]=math.log(batch_target[t, 3] / anchors[best_n][1])
            positive[b,best_n,j,i,4]=1
            positive[b,best_n,j,i,c+5]=1
            negtive[b,best_n,j,i]=0
    return positive,negtive
YOLO的正负样本分配策略 在目标检测中,正负样本分配策略通常用于训练期间为每个样本分配一个权重,以便模型模型更加关注困难的样本和重要的样本。 阅读详情

相关推荐

【深度学习】YOLO系列(v1-v3+tinyv3)解析

yolov3是在训练的数据集上聚类产生prior boxes的一系列宽高(是在图像416x416的坐标系里),默认9种。YOLOV3思想理论是将输入图像分成SxS个格子(有三处进行检测,分别是在52x52, 26x26, 13x13的feature map上,即S会分别为52,26,13),若某个物体Ground truth的中心位置的坐标落入到某个格子,那么这个格子就负责检测中心落在该栅格中的物体。三次检测,每次对应的感受野不同,32倍降采样的感受野最大(13x13),适合检测大的目标。

热情、奔放、快乐编程! 396

YOLOv3目标检测:原理与源码解析

Linux创始人LinusTorvalds有一句名言:Talk is cheap, Show me the code.(冗谈不够,放码过来!)。 代码阅读是从入门到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。  YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。YOLOv3的实现Darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。  本课程将解析YOLOv3的实现原理和源码,具体内容包括: YOLO目标检测原理  神经网络及Darknet的C语言实现,尤其是反向传播的梯度求解和误差计算 代码阅读工具及方法 深度学习计算的利器:BLAS和GEMM GPU的CUDA编程方法及在Darknet的应用 YOLOv3的程序流程及各层的源码解析本课程将提供注释后的Darknet的源码程序文件。  除本课程《YOLOv3目标检测:原理与源码解析》外,本人推出了有关YOLOv3目标检测的系列课程,包括:   《YOLOv3目标检测实战:训练自己的数据集》  《YOLOv3目标检测实战:交通标志识别》  《YOLOv3目标检测:原理与源码解析》  《YOLOv3目标检测:网络模型改进方法》 建议先学习课程《YOLOv3目标检测实战:训练自己的数据集》或课程《YOLOv3目标检测实战:交通标志识别》,对YOLOv3的使用方法了解以后再学习本课程。

【TM1640】STM32 TM1640芯片驱动程序

以下为.h文件: #ifndef __TM1640_H__ #define __TM1640_H__ #include "stm32f10x.h" #define ADDR_START1640 0XC0 #define DSP1640_DIS 0 #define DSP1640_ENB 1 /* 控制显示 ...

cxw312864660的博客 1万+

目标检测——YOLOv3、YOLOv4、YOLOv5、YOLOv7正负样本匹配、YOLO3损失函数理解

学习小计。有什么不对的地方,还请大家指正。

Chaoy6565的博客 6162

华大HC32F460 TCP Server实验

华大HC32F460 TCP Server实验

ZhuoWuKeJi的博客 1270

避开地图定位偏差!手把手教你用Python实现火星坐标与WGS84精准转换

本文深入解析了国内地图服务中火星坐标(GCJ-02)与国际标准WGS84坐标系之间的偏差问题,并提供了基于Python的精准转换解决方案。文章详细阐述了坐标转换的核心原理,手把手教你构建可复用的转换工具包,并演示如何将其集成到实际应用(如Flask API)中,帮助开发者和数据分析师有效解决地图定位不准、多源数据无法对齐的痛点,提升地理信息处理能力。

weixin_29250403的博客 124

YOLO系列正负样本分配策略

学习记录之YOLO系列的正负样本分配策略(YOLOv3、YOLOv4、YOLOv5、YOLOX、YOLOv7

chen_znn的博客 2939

保姆级教程:用Python spatialdata框架搞定10x Xenium空间转录组数据(从下机到高级分析)

本教程详细介绍了如何使用Python spatialdata框架处理10x Xenium空间转录组数据,从数据获取到高级分析的全流程。涵盖环境配置、数据读取、质量控制、降维聚类、细胞注释及空间共定位分析等关键步骤,特别适合生物信息学研究者快速掌握Xenium数据分析技术。

weixin_30300225的博客 482

目标检测yolov3的损失计算中的正负样本(锚框)选择代码解析(只供参考)

目标检测yolov3的损失计算中的正负样本(锚框)选择代码解析(只供参考)

互相学习的小博客 1867

使用Termux在Android设备上编译运行SpecCPU2006

SPEC2006搭配Termux,竟然还能这么玩?!

菜菜的菜园子 2960

代谢组数据分析(二十六):LC-MS/MS代谢组学和脂质组学数据的分析流程

本教程概述了LC-MS/MS在代谢组学和脂质组学数据分析中的应用流程。首先介绍了样本的采集、提取和LC-MS/MS分析,随后详细阐述了质谱数据的预处理、峰值识别、特征注释,以及数据标准化和统计分析的重要性。特别强调了使用XCMS和CAMERA进行数据对齐和加合物识别,以及利用MultiABLER和LipidFinder进行数据过滤、插补和标准化处理。此外,还介绍了如何应用EigenMS算法进行数据标准化,以及如何使用Limma包进行差异分析。整个流程旨在提高数据质量,确保分析结果的准确性和可靠性,为后续的生

专注生信领域 1954

YOLOv3/v5/v4/x中正负样本的定义

YOLO目标检测系列正负样本的定义方式

weixin_43850171的博客 9729

Python爬虫实战:使用最新技术爬取GitHub Trending项目

本文将详细介绍如何使用Python最新技术栈构建一个高效的GitHub Trending爬虫。我们将使用异步请求库httpx、HTML解析库parsel、数据存储方案以及反反爬技术,完整实现一个能够稳定获取GitHub Trending数据的爬虫系统。文章包含5000余字详细教程,从环境搭建到代码实现,再到数据处理和存储,最后部署运行,提供全方位指导。GitHub Trending页面展示了GitHub上当前最受欢迎的项目,对于开发者了解技术趋势、发现优秀项目非常有价值。

2201_76125261的博客 737

【 YOLOv3中Loss部分计算】

YOLOv1是一个anchor-free的,从YOLOv2开始引入了Anchor,在VOC2007数据集上将mAP提升了10个百分点。YOLOv3也继续使用了Anchor,本文主要讲ultralytics版YOLOv3的Loss部分的计算, 实际上这部分loss和原版差距非常大,并且可以通过arc指定loss的构建方式, 如果想看原版的loss可以在下方release的v6中下载源码。Github地址: https://github.com/ultralytics/yolov3Github release:

2d3d图像算法 halcon\opencv\c++\pcl\vtk\coluldcompare工具 程序员 学习者 2006

华为OD机试真题 新系统2026-04-01 C++ 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 381

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

triplet loss后面不收敛_【从零开始学习YOLOv3】8. YOLOv3中Loss部分计算

YOLOv1是一个anchor-free的,从YOLOv2开始引入了Anchor,在VOC2007数据集上将mAP提升了10个百分点。YOLOv3也继续使用了Anchor,本文主要讲ultralytics版YOLOv3的Loss部分的计算, 实际上这部分loss和原版差距非常大,并且可以通过arc指定loss的构建方式, 如果想看原版的loss可以在下方release的v6中下载源码。G...

weixin_39827585的博客 640

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

目标检测算法之YOLOV3

YOLO系列V3

weixin_43650802的博客 4539

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

YOLOv3算法

当我学完CNN以后再来看YOLOv3的整体架构图的时候,我突然发现自己已经能看懂了,这让我坚信自己选择的积累式学习是没有问题的。但为了毕设进度,我跳过了目标检测其他算法的学习,这可能导致我对YOLOv3部分细节的不理解,但后面应该有时间能补回来。 待解决区: 1、CNN正则化 2、CNN反向传播 3、除YOLOv3之外的目标检测算法 【精读AI论文】YOLO V3目标检测(附YOLOV3代码复现)_哔哩哔哩_bilibili yolov3之后的都是小修小补。 https://githu

Jormungand123的博客 3317

【YOLOV3】需要了解的点(二)

论文重点 采取的有效方式 (1)confidence小于0.5的都参与到loss的计算; (2)classification如果不存在男人和女人这种情况的话,可以对每个输出使用sigmoid函数,假设有80类,那么输出就是80个数,对80个数的每个值都参与loss的计算,正确的与1比较(希望为1),不正确的与0比较(希望为0); (3)输出多个尺度的,13*13,26*26,52*52的特征图,然后对每个特征图都使用anchor的操作; (4)卷积层数变深了。 这几种方式无效 Anchor b

mjiansun的专栏 391

Faster RCNN学习笔记

Faster RCNN学习笔记 参考: 1 https://blog.youkuaiyun.com/lanyuelvyun/article/details/77720260 2 https://blog.youkuaiyun.com/Gerwels_JI/article/details/84556783 Q1:输入图像尺寸? 答:对于一幅任意大小的图片PxQ,缩放至固定大小,短边长度固定至600,然后按照相同比例缩放长边...

Deicide-PiLi的博客 365

YOLOV3目标检测

YOLOv3使用的是Darknet-53网络,是作者自己写的。

Datalhy的博客 531

Yolo系列 | Yolov4v5的模型结构与正负样本匹配

如有错误,恳请指出。 以下内容是学习了参考资料作的笔记,仅供参考,详细内容见参考资料。这里我主要是对yolov4和v5的模型结构记录,及其了解其正负样本匹配的方式。 另外的就是介绍一下Albumentations工具包,这是专门用于计算机视觉中数据增强的一个工具包,提高的数据增强方式比较多,使用也比较方便。 文章目录1. Yolov41.1 Yolov4结构1.2 训练策略1.3 正负样本匹配2. Yolov52.1 Yolov5结构2.2 训练策略2.3 正负样本匹配 1. Yolov4 1.1 Yo.

Clichong 1万+

Yolov3-v5正负样本匹配机制

本文来自公众号“AI大道理”。​什么是正负样本?正负样本是在训练过程中计算损失用的,而在预测过程和验证过程是没有这个概念的。正样本并不是手动标注的GT。正负样本都是针对于算法经过处理生成的框而言,而非原始的GT数据。正例是用来使预测结果更靠近真实值的,负例是用来使预测结果更远离除了真实值之外的值的。训练的时候为什么需要进行正负样本筛选?在目标检测中不能将所有的预测框都进入损失函数进行计算,主要原因是框太多,参数量太大,因此需要先将正负样本选择出来,再进行损失函数的计算。

aibigtruth的博客 4413

YOLOv8-训练流程-正负样本分配

本文主要介绍yolov8在训练过程中的两个阶段:1.Task-Aligned Assigner 正负样本动态分配策略2.损失函数计算由于个人感觉官方代码读起来比较困难,故按照自己的思路重新写了一遍,下面将按照自己的代码进行讲解。假设:网络输入大小为:images = b x 3 x 640 x 640类别数目 cls_num = 2 (person + car )超参数 reg_max = 16输出通道为: 4 * reg_max + cls_num则。

weixin_40723264的博客 3万+

YOLOv3 正负样本匹配逻辑详解:Anchor 与标签如何对应?

条件是否为正样本anchor 与 GT 的 IoU 最大✅ 强制标记为正样本anchor 与 GT 的 IoU > iou_threshold(如 0.5)✅ 可选标记为正样本无任何 GT 与其重叠❌ 负样本仅部分重叠但不是最大匹配❌ 忽略(不参与位置损失)⚠️ 注意:只有负责预测真实框的 bounding box 才会参与位置回归(tx, ty, tw, th)和类别概率(class probs)的损失计算。该 bounding box不负责预测任何真实框;

guoguozgw的博客 1042

yolov5的正负样本的定义和匹配

虽然yolov5没有正式的论文发布,但是其整个检测框架已经越来越成熟了。版本yolov5 v6.1。

weixin_41311686的博客 6225
上一篇: python中让人惊叹的命令
下一篇: python统计文件夹及所有子文件夹下的文件大小并排序输出
刀么克瑟拉莫
博客等级 码龄14年 68粉丝 268原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀么克瑟拉莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值