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

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:breakimg_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 = bboxx_center = (x_min + x_max) / 2 / img_widthy_center = (y_min + y_max) / 2 / img_heightwidth = (x_max - x_min) / img_widthheight = (y_max - y_min) / img_heightif 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方案代码的学习,后面进阶方案会继续!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 SpanMetrics Connector 将 OpenTelemetry 跟踪转换为指标

原文:https://last9.io/blog/convert-opentelemetry-traces-to-metrics-using-spanconnector/如果您已经实施了跟踪但缺乏强大的指标功能怎么办? SpanConnector 是一个通过将跟踪数据转换为可操作指标来弥补这一差距的工具。这篇文章详细介绍了 SpanConnector 的工作原理,提…

001、安装thinkphp8

01、在目录右键打开powershell,输入composer,能正常显示 02、输入composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ ,切换到国内镜像 03、输入composer create-project topthink/think PHMTP8创建一个名字叫phmtp8的工程 04、在有composer…

【JS逆向百例】携某 testab 参数补环境详解

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术…

Zotero在我的文库中查看文献所在的分类子文件夹

在我的文库中查找到文献,ubuntu选中后按option+alt,win按ctrl,可以看到所属的分类会黄色高亮。

黎曼积分的轮换对称性

二积分的轮换对称性:积分区域中的变量具有轮换对称性,例如 \(x^2+y^2=1\),将被积函数中的所有变量进行轮换后的积分值相同。(\(\iint_D xyd\sigma \neq \iint_D x^2d\sigma\))例题:三重积分中,积分区域关于 \(x,y,z\) 都具有轮换对称性的例题:三重积分中,积分区域只关…

第十五期 03 Stable Diffusion模型

一:Transformer Transformer是来自 NLP 领域的非常著名的模型方法。Transformer在语言建模和构建对话式 AI 工具方面取得了巨大成功。 在视觉应用中,Transformer 表现出了泛化和自适应的优势,这使得它们非常适合通用学习。 它们比其他技术能够更好地捕捉文本甚至图像中的语义…

AI Agents有哪些风险?哪些措施可以减少风险?

引言 许多人工智能开发者正在创建具有更高自主性、能够访问外部工具或服务,并在可靠适应、规划和开放式长期行动以实现目标方面能力更强的系统。我们将这类系统视为具有相对较高程度的代理性,并将它们称为(人工智能)代理或具有代理性的系统。相对较低程度的代理性系统仅辅助…

Markdown学习(选做)

一.已掌握 1.基本语法 (1)标题: 使用#符号表示标题,#的数量表示标题的级别,最多支持六级标题。 (2)段落: Markdown使用空行来分隔段落。 (3)强调: 使用 * 或_符号表示强调,一个符号表示斜体,两个符号表示加粗。例如: 斜体 加粗 (4)列表:序号 姓名 年龄 职业1 张三 30…

算法与数据结构——内存与缓存

内存与缓存 数组和链表两种数据结构分别代表了“连续存储”和“分散存储”两种物理结构。实际上,物理结构在很大程度上决定了程序对内存和缓存的使用效率,进而影响算法程序的整体性能。 计算机存储设备 计算机中包括三种类型的存储设备:硬盘(hard disk)、内存(random-acc…

SpringBoot - [07] Web入门

题记部分 一、Web 入门SpringBoot将传统Web开发的mvc、json、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置。创建SpringBoot项目勾选SpringWeb选项后,会自动将spring-boot-starter-web组件加入到项目中。spring-boot-starter-web启动器主要包括w…

k8s~ServiceAccount_ClusterRole_ClusterRoleBinding

apisix的k8s服务发现配置 命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。Kubernetes RBAC API定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding,这四种类型之间的关系和简要说明…

国产化适配——银河麒麟V10(2)

续上文 三、nignx安装 ng版本是:nginx-1.20.2 链接:https://pan.baidu.com/s/1gVJ_YgD-_gyJ6JL2VxoFhA 提取码:bqf4 版本比较老了,大家可以自己去官网下载最新的版本使用。 官网地址:https://nginx.org/en/download.html 1.挂载镜像 mount -t iso9660 /mnt/tools/Kylin-Se…