当前位置: 首页 > article >正文

代码讲解系列-CV(四)——目标检测初探

文章目录

  • 一、目标检测标注
    • 1.1 Lableme——标准工具
    • 1.2 json格式
  • 二、检测数据解析
    • 2.1 coco
    • 2.2 Pascal VOC
    • 2.3 YOLO
      • 2.3.1 VOC2YOLO
  • 三、网络搭建
    • 3.1 DETR
    • 3.1 dataset
    • 3.2 ViT添加检测头
    • 3.3 IOU
    • 3.4 损失函数
    • 3.5 推理处理
  • 四、Yolo-v8
    • 4.1 Ultralytics
    • 4.2 训练
    • 4.3 指标
  • 五、作业
  • 六、其他
    • 6.1 并行训练
      • DP
      • DDP
    • 6.2 DDP训练
    • 6.3 注意事项

一、目标检测标注

1.1 Lableme——标准工具

在这里插入图片描述
在这里插入图片描述
左上到右下的选择

1.2 json格式

在这里插入图片描述
在这里插入图片描述

二、检测数据解析

2.1 coco

检测数据集自带检测定义
在这里插入图片描述

2.2 Pascal VOC

是xml的后缀名
在这里插入图片描述

2.3 YOLO

在这里插入图片描述
今天是希望把标注出来的数据转换成yolo的数据格式

2.3.1 VOC2YOLO

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于labelme有转换到VOC和coco的数据格式转换
在这里插入图片描述

三、网络搭建

3.1 DETR

在这里插入图片描述

3.1 dataset

图像,标签;分类+box位置

在这里插入图片描述

3.2 ViT添加检测头

在这里插入图片描述

3.3 IOU

在这里插入图片描述

True Positive: 有预测的边界框与给定类的目标边界框的IOU大于阈值
False Positive: 有预测的边界框与给定类的目标边界框的IOU小于阈值
True Negative: 无目标
False Negative: 没有预测出任何边界框

在这里插入图片描述

3.4 损失函数

匈牙利算法
在这里插入图片描述

阈值过滤+NMS
在这里插入图片描述

3.5 推理处理

在这里插入图片描述

四、Yolo-v8

4.1 Ultralytics

https://yolov8.com/
安装库: pip install ultralytics
编写yolo配置文件data.yaml
在这里插入图片描述
定义训练和验证集路径、类别等信息

4.2 训练

编写yolo训练文件
在这里插入图片描述

4.3 指标

在这里插入图片描述
box_loss (定位损失)
•衡量边界框的位置和形状是否准确。
•直接影响检测框的位置和大小。
cls_loss (分类损失)
•衡量目标的类别预测是否准确。
•决定模型的分类性能。
dfl_loss (细粒度边界框损失)
•提高边界框预测的精度,使边界框更加贴合目标。

  1. mAP@50
    表示IoU(Intersection over Union)阈值固定为 0.5 时计算的平均精度
    AP (Average Precision): 对某个类别,按照模型输出的置信度排序,计算精度
    mAP: 将每个类别的 AP 平均,得到所有类别的平均值。

  2. mAP@50-95
    在IoU 阈值从 0.5 到 0.95 之间(每隔 0.05 递增), 对每个阈值分别计算 mAP,然后取所有
    阈值的平均值。

五、作业

一、基于本课内容,生成以下数据集的
yolo标签,并调用yolov8进行训练。
https://aistudio.baidu.com/datasetdetail/312444
二、参考上节课的
VIT模型和DETR,自己添加多目标检测分类头进行训练。

六、其他

6.1 并行训练

DP

torch.nn.DataParallel(module, device_ids=None, output_device=None)
网络在前向传播时会将model从主卡复制一份到所有的device上, input_data会在batch这个维度被分组后upload到不同的device上计算;反向传播时,每个卡上的梯度会汇总到主卡上,求得梯度的均值后,再用反向传播更新单个GPU上的模型参数,最后将更新后的模型参数复制到剩余指定的GPU中进行下一轮的前向传播。
缺点:负载不均衡,通信成本高

DDP

https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html#torch.nn.parallel.DistributedDataParallel

torch.nn.parallel.DistributedDataParallel(module, device_ids=None, output_device=None, dim=0, broadcast_buffers=True, process_group=None, bucket_cap_mb=25, find_unused_parameters=False, check_reduction=False)

6.2 DDP训练

  1. 初始化分布式环境
    def setup(rank, world_size):
    os.environ[“MASTER_ADDR”] = ‘localhost’
    os.environ[“MASTER_PORT”] = “12355”
    dist.init_process_group(“nccl”, rank=rank, world_size=world_size)
    torch.cuda.set_device(rank)
    def cleanup():
    dist.destroy_process_group()
  2. 模型 torch.nn.parallel.DistributedDataParallel
    ddp_model = DDP(model, device_ids=[rank])
  3. 数据 torch.utils.data.distributed.DistributedSampler
    sampler = DistributedSampler(dataset, num_replicas=world_size, rank=rank)
    dataloader = DataLoader(dataset, batch_size=64, sampler=sampler)
    sampler.set_epoch(epoch)
  4. 运行
    torchrun --nproc_per_nodes=2 --nnodes=1 example_script.py
    torch.multiprocessing.spawn

6.3 注意事项

  1. 使用rank=0的主进程进行日志记录和模型保存

  2. DP训练后的模型参数,进行单卡推理
    checkpoint = torch.load(“model.pth”)

    移除 “module.” 前缀
    state_dict = {key.replace(“module.”, “”): value for key, value in checkpoint[“state_dict”].items()}

    model.load_state_dict(state_dict)

在这里插入图片描述


http://www.kler.cn/a/553350.html

相关文章:

  • 【pytest】编写自动化测试用例命名规范README
  • 模拟与高精度
  • 在IDEA的Maven中(同步所有Maven项目)和(重新加载所有Maven项目)的区别
  • 【面试题】杭州士腾科技-面试题汇总
  • mac相关命令
  • 基于springboot 的旧物置换网站
  • 蓝桥杯 Java B 组 之树的基础(二叉树遍历)
  • 网络安全攻防演练——RT实战技巧篇
  • einops测试
  • 电商分布式场景中如何保证数据库与缓存的一致性?实战方案与Java代码详解
  • rust 安全性
  • springsecurity自定义认证
  • 公司电脑监控软件一般有哪些——软件的类型分析与 WorkWin 的特性探究
  • [含文档+PPT+源码等]精品基于springboot实现的原生Andriod汽车后市场服务系统
  • VictoriaLogs Syslog日志收集存储系统部署
  • R软件用潜在类别混合模型LCM分析老年人抑郁数据轨迹多变量建模研究
  • 01数据准备 抓取图片 通过爬虫方式获取bing的关键词搜索图片
  • uniapp基于JSSDK 开发微信支付(php后端)
  • 4.从零开始学会Vue--{{组件通信}}
  • LED灯闪烁实验:Simulink应用层开发