2024“大运河杯”数据开发应用创新大赛——城市治理 [Datawhale AI 夏令营 II]


赛题

再来回顾一下赛题,赛题源自 2024“大运河杯”数据开发应用创新大赛——城市治理
简单而言,利用已有标注的违规(违规行为包括垃圾桶满溢、机动车违停、非机动车违停等)有效视频数据来对未标注视频标注,赛题提供了以下三个数据集:
训练集(有标注)、训练集(无标注)、测试集。

Baseline && yolov8

Baseline中最重要的部分为读取视频文件以及使用yolov8来训练部分。

读取文件

由于视频数据为mp4格式,标注文件为json格式,每个视频对应一个json文件,需要将mp4等视频有效文件转化为图片形式保存(在这里,需要使用python的cv2,json等重要的模块进行处理。下面代码中给出作为train数据具体的注释和注意事项,val数据也类似):

import os, sys
import cv2, glob, json
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

anno_df = pd.read_json(anno_path)
# 读取json文件
cap = cv2.VideoCapture(video_path)
# 同时读取视频文件

### 这里需要自定义读取多少内容作为trai样本
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('./dataset/train/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.jpg', frame)

    if len(frame_anno) != 0:
    with open('./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)
                    
               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

利用yolov8进行训练

配置模块等基础文件:

mkdir -p ~/.config/Ultralytics/
wget http://mirror.coggle.club/yolo/Arial.ttf -O ~/.config/Ultralytics/Arial.ttf

以yolov8n(其中,yolov8n.pt需要下载)为例,具体配置如下官方说明

import os

# 指定gpu
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

import warnings
warnings.filterwarnings('ignore')

from ultralytics import YOLO
model = YOLO("yolov8n.pt")

model=YOLO('yolov8n.pt')
results = model.train(data="dataset/yolo.yaml", epochs=5, imgsz=1080, batch=32,plots=True)

识别

训练完后即可测试结果。

model = YOLO("runs/detect/train/weights/best.pt")

for path in glob.glob('测试集/*.mp4'):
    submit_json = []
    results = model(path, conf=0.05, imgsz=1088,  verbose=False)
    for idx, result in enumerate(results):
        boxes = result.boxes  
        masks = result.masks 
        keypoints = result.keypoints 
        probs = result.probs  
        obb = result.obb  

        if len(boxes.cls) == 0:
            continue
        
        xywh = boxes.xyxy.data.cpu().numpy().round()
        cls = boxes.cls.data.cpu().numpy().round()
        conf = boxes.conf.data.cpu().numpy()
        for i, (ci, xy, confi) in enumerate(zip(cls, xywh, conf)):
            submit_json.append(
                {
                    'frame_id': idx,
                    'event_id': i+1,
                    'category': category_labels[int(ci)],
                    'bbox': list([int(x) for x in xy]),
                    "confidence": float(confi)
                }
            )

    with open('./result/' + path.split('/')[-1][:-4] + '.json', 'w', encoding='utf-8') as up:
        json.dump(submit_json, up, indent=4, ensure_ascii=False)

关于yolov8

YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,支持图像分类、物体检测和实例分割任务。
具体模型如下:

yolo

图1. YOLOv8架构

YOLOv8有以下几个版本:

YOLOv8版本

图2. YOLOv8版本及参数说明

同时,在训练时涉及众多参数,官网提供给的部分参数如下:

在这里插入图片描述

图3. YOLOv8参数说明

几个重要的参数部分介绍如下,详细介绍可以参考yolov8的部署,训练,测试(利用ultralytics)或者官方文件:
model: 模型文件的路径。这个参数指定了所使用的模型文件的位置,例如 yolov8n.pt 或 yolov8n.yaml。
data: 数据文件的路径。该参数指定了数据集文件的位置,例如 coco128.yaml。数据集文件包含了训练和验证所需的图像、标签。
epochs: 训练的轮数。这个参数确定了模型将会被训练多少次,每一轮都遍历整个训练数据集。训练的轮数越多,模型对数据的学习就越充分,但也增加了训练时间。
patience: 早停的等待轮数。在训练过程中,如果在一定的轮数内没有观察到模型性能的明显提升,就会停止训练。这个参数确定了等待的轮数,如果超过该轮数仍没有改进,则停止训练。
batch: 每个批次中的图像数量。在训练过程中,数据被分成多个批次进行处理,每个批次包含一定数量的图像。这个参数确定了每个批次中包含的图像数量。特殊的是,如果设置为-1,则会自动调整批次大小,至你的显卡能容纳的最多图像数量。
imgsz: 输入图像的尺寸。这个参数确定了输入图像的大小。可以指定一个整数值表示图像的边长,也可以指定宽度和高度的组合。例如1080表示图像的宽度和高度均为1080像素。
save: 是否保存训练的检查点和预测结果。当训练过程中保存检查点时,模型的权重和训练状态会被保存下来,以便在需要时进行恢复或继续训练。预测结果也可以被保存下来以供后续分析和评估。
save_period: 保存检查点的间隔。这个参数确定了保存检查点的频率,例如设置为10表示每隔10个训练轮数保存一次检查点。如果设置为负数(如-1),则禁用保存检查点功能。

参考文献

  1. 2024“大运河杯”数据开发应用创新大赛——城市治理
  2. https://github.com/ultralytics/ultralytics
  3. yYOLOv8训练参数详解(全面详细、重点突出、大白话阐述小白也能看懂)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值