首页 > 其他分享 >Datawhale AI 夏令营 第五期 CV方向 01

Datawhale AI 夏令营 第五期 CV方向 01

时间:2024-08-26 11:47:36浏览次数:10  
标签:01 idx AI frame YOLO Datawhale anno path 标注

yolo方案baseline

step1:赛事报名

Datawhale (linklearner.com) 飞书文档

step2:跑通baseline

  1. 首先在服务器下载代码
apt install git-lfs
git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/AI_Camp5_baseline_CV.git
  1. 学习下baseline的代码
# 读取训练集视频
for anno_path, video_path in zip(train_annos[:5], train_videos[:5]):
    print(video_path)
    anno_df = pd.read_json(anno_path)
    cap = cv2.VideoCapture(video_path)
    frame_idx = 0 
    # 读取视频所有画面
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        img_height, img_width = frame.shape[:2]
        
        # 将画面写为图
        frame_anno = anno_df[anno_df['frame_id'] == frame_idx]
        cv2.imwrite('./yolo-dataset/train/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.jpg', frame)

        # 如果存在标注
        if len(frame_anno) != 0:
            with open('./yolo-dataset/train/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.txt', 'w') as up:
                for category, bbox in zip(frame_anno['category'].values, frame_anno['bbox'].values):
                    category_idx = category_labels.index(category)
                    
                    # 计算yolo标注格式
                    x_min, y_min, x_max, y_max = bbox
                    x_center = (x_min + x_max) / 2 / img_width
                    y_center = (y_min + y_max) / 2 / img_height
                    width = (x_max - x_min) / img_width
                    height = (y_max - y_min) / img_height

                    if x_center > 1:
                        print(bbox)
                    up.write(f'{category_idx} {x_center} {y_center} {width} {height}\n')
        
        frame_idx += 1

了解一下YOLO

这里用到了YOLO(You Only Look Once),这是一种流行的实时目标检测系统,YOLO模型的核心思想是将目标检测任务视为一个单一的回归问题,通过一个卷积神经网络(CNN)直接从图像像素到边界框坐标和类别概率的映射。YOLO模型经过了多次迭代,包括YOLOv2(YOLO9000)、YOLOv3和YOLOv4等版本,每个版本都在性能和速度上有所提升,同时也引入了一些新的技术,如更深的网络结构、更好的锚框机制、多尺度特征融合等。

理解代码

这段代码是用于处理视频数据并将其转换为YOLO格式的标注文件的Python脚本。YOLO需要特定的标注格式来训练模型。以下是代码的主要功能和步骤:

  1. 使用zip函数将训练集的标注文件路径(train_annos)和视频文件路径(train_videos)配对。

  2. 迭代前 5 对标注文件和视频文件路径。

  3. 读取每个标注文件(anno_path)为Pandas DataFrame(anno_df)。

  4. 使用OpenCV(cv2)打开视频文件(video_path)。

  5. 初始化frame_idx为0,用于记录当前处理的视频帧索引。

  6. 使用while循环读取视频中的所有帧。如果读取失败(retFalse),则跳出循环。

  7. 获取当前帧的高度和宽度。

  8. 将当前帧保存为图片文件,文件名基于标注文件名和帧索引。

  9. 检查当前帧是否有标注信息(frame_anno)。

  10. 如果有标注信息,打开一个文本文件用于写入YOLO格式的标注数据。

  11. 对于每个标注,计算类别索引(category_idx)和YOLO格式的坐标(x_center, y_center, width, height)。

  12. 检查x_center是否大于1,如果是,则打印出边界框(bbox)的值。这可能是一个错误检查,以确保坐标值在正确的范围内。

  13. 将YOLO格式的标注数据写入文本文件。

  14. 增加frame_idx以处理下一帧。

step3:如何训练YOLO模型

Ultraalytics 是一个提供多种计算机视觉模型的库,包括 YOLO 系列。这段代码是一个简单的训练启动示例

from ultralytics import YOLO

# 设置模型版本
model = YOLO("yolov8n.pt") 

# 设定数据集和训练参数
results = model.train(data="yolo-dataset/yolo.yaml", epochs=2, imgsz=1080, batch=16)
  1. 加载模型:使用 YOLO("yolov8n.pt") 创建一个 YOLO 模型实例。这里的 "yolov8n.pt" 是预训练模型的文件路径,yolov8n 表示 YOLOv8 的一个较小的模型版本,.pt 是 PyTorch 模型文件的扩展名。

  2. 训练模型:通过调用模型实例的 train 方法来训练模型。方法的参数如下:

  • data:指定数据集配置文件的路径,这里是 "yolo-dataset/yolo.yaml"。这个 YAML 文件应该包含了训练和验证数据集的路径、类别名称、锚框尺寸等信息。
  • epochs:训练的轮数,这里设置为 2 轮。
  • imgsz:输入图像的尺寸,这里设置为 1080 像素。这个尺寸应该与你的标注数据匹配。
  • batch:每个批次的图像数量,这里设置为 16。
  1. 训练结果train 方法将返回一个包含训练结果的对象。这个对象可能包含训练过程中的各种统计信息,如损失值、精确度等。
    训练日志:
  • box_loss 是边界框回归损失,用于评估预测的边界框与真实边界框之间的差异。

  • cls_loss 是分类损失,用于评估类别预测的准确性。

  • dfl_loss 是防御性损失,用于提高模型的泛化能力。

这是baseline方案代码的学习,后面进阶方案会继续!

标签:01,idx,AI,frame,YOLO,Datawhale,anno,path,标注
From: https://www.cnblogs.com/zynevergiveup12/p/18380713

相关文章

  • 001、安装thinkphp8
    01、在目录右键打开powershell,输入composer,能正常显示 02、输入composerconfig-grepo.packagistcomposerhttps://mirrors.aliyun.com/composer/,切换到国内镜像 03、输入composercreate-projecttopthink/thinkPHMTP8创建一个名字叫phmtp8的工程 04、在有composer......
  • Python画笔案例-012 绘制空心T字
    1、绘制空心T字通过python的turtle库绘制一个空心T字的图案,如下图:2、实现代码 绘制以上空心T字的图案,代码如下:"""空心T字.py"""importturtle#导入海龟模块turtle.pensize(2)#设定海龟画笔粗细为2turtle.setheading(90)......
  • Python画笔案例-013 绘制水墨风格画
    1、绘制水墨风格画通过python的turtle库绘制一个水墨风格画的图案,如下图:2、实现代码 绘制以上水墨风格画图案,代码如下:"""水墨风格画.py"""importturtle#导入海龟模块turtle.penup()#抬笔turtle.goto(-200,-200)#坐......
  • C语言02 每日一练01
    C语言02每日一练01习题一对三个数进行从大到小的排序。习题二计算1到100的和(两种方法)。习题三判断100到200中的素数及其个数。习题一对三个数进行从大到小的排序。   对三个数进行从大到小的排序。 解题代码:#include<stdio.h>intmain(){int......
  • fail2ban: 使用firewalld的富规则rich rule
    一,fail2ban中的时间设置:m:分钟h:小时d:天w:周y:年 -1:永久二,安装:1,通过yum安装用yum安装:[root@blog~]#yuminstallfail2ban安装后查看状态:未启动[root@blog~]#systemctlstatusfail2ban.service○fail2ban.service-Fail2BanServiceLoaded:lo......
  • 2024 Datawhale X 李宏毅苹果书 AI 夏令营第5期——跟李宏毅学深度学习(入门)
    本方向学习目标本方向的核心学习目标是——通过《深度学习详解》和李宏毅老师21年的机器学习课程视频,入门机器学习,并尝试学习深度学习,展开代码实践(选修)。相关学习链接......
  • 第十五期 01 GAN发展
    一:GAN生成对抗网络(GenerativeAdversarialNetworks)在StableDiffusion诞生之前,计算机视觉和机器学习方面最重要的突破是GAN(GenerativeAdversarialNetworks生成对抗网络)。GAN让超越训练数据已有内容成为可能,从而打开了一个全新领域——现在称之为生成建模。(一)GAN的本质GAN......
  • 独特的倒计时容器uniqueCountdownContainer:修改了倒计时更好用好看了
    <!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>独特的倒计时容器uniqueCountdow......
  • 【K8s】专题十二(3):Kubernetes 存储之 PersistentVolumeClaim
    本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口Linux专栏 | Docker专栏 | Kubernetes专栏往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法【Docker】(全网首发)Kyli......
  • S4 供应商主数据扩建公司代码,采购组织数据(CVI_EI_INBOUND_MAIN)
    参考:https://blog.csdn.net/DeveloperMrMeng/article/details/131331147以模板数据为基础直接扩充对应的公司代码和采购组织数据: reportZED1_TEST1.tables:sscrfields.data:gt_uploadtypealsmex_tablineoccurs0withheaderline.field-symbols:<fs_upload>likeli......