2024 Datawhale AI夏令营 第五期 Task1:视频处理方法与物体检测模型

#Datawhale AI夏令营 #CV赛道 #目标检测 #视频处理方法 #物体检测模型

优快云社区的各位朋友们好久不见了,本次AI夏令营笔记将专注于违规问题智能检测的解决方案,希望能给你一些启示和参考,以作为官方讲解的有益补充

在这里插入图片描述
由于datawhale更改了笔记发布政策,本次笔记分享将分为三个部分发布,我将逐步介绍违规问题智能检测任务的实现过程。在本次分享中,我将对赛题进行简单解读,并着重介绍视频文件的处理方法以及物体检测模型,而第二次和第三次分享我将着重介绍YOLO检测框架的原理、调参方法以及上分经验与技巧。

研究背景与意义

研究意义

本次赛题求选手研究开发高效可靠的计算机视觉算法,提升违规行为检测识别的准确度,降低对大量人工的依赖,提升检测效果和效率,从而推动城市治理向更高效、更智能、更文明的方向发展,为居民创造一个安全、和谐、可持续的居住环境。

在这里插入图片描述

初赛任务则是根据给定的城管视频监控数据集,进行城市违规行为的检测。选手需要能够从视频中分析并标记出违规行为,提供违规行为发生的时间和位置信息。违规行为包括垃圾桶满溢、机动车违停、非机动车违停等。

数据格式

视频数据为mp4格式,标注文件为json格式,每个视频对应一个json文件。

json文件的内容是每帧检测到的违规行为,包括以下字段:

frame_id 违规行为出现的帧编号
event_id 违规行为ID
category 违规行为类别
bbox 检测到的违规行为矩形框的坐标,[xmin,ymin,xmax,ymax]形式

评估指标

【初赛】

使用F1score、MOTA指标来评估模型预测结果。

img

对每个json文件得到两个指标的加权求和,最终得分为所有文件得分取均值。

注1:若真实目标框与预测框IOU大于0.5,则判定目标正确识别。若MOTA指标为负,则该类别精度得分为0。

注2:若该视频中没有某个类别的目标,则此类别计算均值时,忽略该视频。

【复赛】

复赛需同时评估模型的准确度与效率。

模型准确率评估指标与初赛一致,使用F1score、MOTA进行评估。

模型效率使用FPS(每秒钟能够处理的帧数)等进行评估。

违法标准

这个其实是在数据标注阶段的时候起作用;
就我所知,与专家系统不同,真正进行模型训练时,深度学习模型构建的系统并不太好将规则反映在模型参数中;
这也是进一步研究的一个重要方向;

【机动车违停】

在这里插入图片描述

机动车在设有禁止停车标志、标线的路段停车,或在非机动车道、人行横道、施工地段等禁止停车的地方停车。具体包含以下:

1、无论有无禁停标志,机动车道禁止车辆停放;

2、距路口、桥梁50米以内禁止车辆停放;

3、距公交车站、消防栓、消防队、医院30米以内禁止使用上述设施以外的车辆停放;

4、禁止车辆双排停放、靠左侧停放、横向停放、逆向停放;

5、人行道仅允许在已设置的停车泊位内停车,禁止在停车泊位外停车;

6、在设有禁停标志、标线的路段,人行横道、施工路段,不得停车。

【非机动车违停】

在这里插入图片描述

非机动车(如自行车、‌电动车等)‌未按照规定停放在指定的非机动车停车泊位或停车线内,‌而是在非机动车禁停区域或未划定的区域(消防通道、盲道、非机动车停车区线外、机动车停车区等)随意停放。

【垃圾满溢】

在这里插入图片描述

生活垃圾收集容器内垃圾超过三分之二以上即为满溢。垃圾桶无法封闭、脏污且周边有纸屑、污渍、塑料、生活垃圾及杂物堆放。

【占道经营】

在这里插入图片描述

经营者占用城市道路、桥梁、城市广场等公共场所进行盈利性买卖商品或服务的行为。

baseline代码详解

1.安装依赖

本次实验主要包含opencv-python、pandas 、matplotlib、ultralytics这四个依赖,其中OpenCV是一个功能强大的计算机视觉库,它提供了大量的图像和视频处理算法,包括但不限于对象检测、图像识别、图像处理等;而Ultralytics 是一个专注于计算机视觉领域的库,它提供了 YOLOv8 模型的一个最新版本,在速度和准确性上都有显著提升,非常适合实时应用。

!/opt/miniconda/bin/pip install opencv-python pandas matplotlib ultralytics
# 首先,导入库
import os, sys
import cv2, glob, json
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2.数据下载与读取

(1)数据下载

!apt install zip unzip -y
!apt install unar -y

!wget "https://comp-public-prod.obs.cn-east-3.myhuaweicloud.com/dataset/2024/%E8%AE%AD%E7%BB%83%E9%9B%86%28%E6%9C%89%E6%A0%87%E6%B3%A8%E7%AC%AC%E4%B8%80%E6%89%B9%29.zip?AccessKeyId=583AINLNMLDRFK7CC1YM&Expires=1739168844&Signature=9iONBSJORCS8UNr2m/VZnc7yYno%3D" -O 训练集\(有标注第一批\).zip
!unar -q 训练集\(有标注第一批\).zip

!wget "https://comp-public-prod.obs.cn-east-3.myhuaweicloud.com/dataset/2024/%E6%B5%8B%E8%AF%95%E9%9B%86.zip?AccessKeyId=583AINLNMLDRFK7CC1YM&Expires=1739168909&Signature=CRsB54VqOtrzIdUHC3ay0l2ZGNw%3D" -O 测试集.zip
!unar -q 测试集.zip

(2)数据读取的基本思路

在这里,有必要说明一下数据读取的基本思路:

官方给出的数据具有这样的结构,有多个批次,每个批次包含一段mp4格式的视频文件和一个json格式的标注文件;

而我们读取数据的基本思路就是,首先查看一个批次里面的数据,具体包括mp4格式的视频文件(也可以看做多个连续帧的图形集合(这个理解对不对,有没有数字媒体专业的大佬指点一下))和标注文件,查看标注是否与官方叙述格式一致,并尝试可视化前几个帧的图片和标注;

然后,我们对多个批次运用同样的处理方式进行处理;

最后,我们通过整合将文件整合为YOLO v8或其他框架可以识别的文件形式;这样,我们就可以认为是完成了数据读取的基本过程。

(3)尝试读取一个批次的数据

让我们尝试读取第45个批次的视频数据和标注数据

先读取标注文件
train_anno = json.load(open('训练集(有标注第一批)/标注/45.json', encoding='utf-8'))
train_anno[0], len(train_anno)
pd.read_json('训练集(有标注第一批)/标注/45.json')
再读取视频文件
video_path = '训练集(有标注第一批)/视频/45.mp4'
cap = cv2.VideoCapture(video_path)
while True:
    # 读取下一帧
    ret, frame = cap.read()
    if not ret:
        break
    break    

frame.shape
int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

cv2是我们之前导入的一个用于处理视频的第三方包,cv2.VideoCapture() 方法返回两个值:一个布尔值表示是否成功读取帧,和一个 ndarray 对象,该对象是读取的帧本身。

最后我们尝试对第45批次的视频和标注进行简单的可视化
bbox = [746, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虢子仪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值