从零上手CV竞赛
Datawhale 2024 年 AI 第五期期 的学习活动( “CV”方向),基于“大运河杯”数据开发应用创新大赛——城市治理开展实践学习。
赛事内容
本赛题最终目标是开发一套智能识别系统,用于自动检测和分类城市管理中的违规行为。
初赛提供城管视频监控数据与对应违规行为标注。违规行为包括垃圾桶满溢、机动车违停、非机动车违停等。视频数据为mp4格式,标注文件为json格式,每个视频对应一个json文件。
-
frame_id:违规行为出现的帧编号
-
event_id:违规行为ID
-
category:违规行为类别
-
bbox:检测到的违规行为矩形框的坐标,[xmin,ymin,xmax,ymax]形式
标注示例如下:
[
{
"frame_id": 20,
"event_id": 1,
"category": "机动车违停",
"bbox": [200, 300, 280, 400]
},
{
"frame_id": 20,
"event_id": 2,
"category": "机动车违停",
"bbox": [600, 500, 720, 560]
},
{
"frame_id": 30,
"event_id": 3,
"category": "垃圾桶满溢",
"bbox": [400, 500, 600, 660]
}
]
使用F1score、MOTA指标来评估模型预测结果。
对每个json文件得到两个指标的加权求和,最终得分为所有文件得分取均值。
注1:若真实目标框与预测框IOU大于0.5,则判定目标正确识别。若MOTA指标为负,则该类别精度得分为0。
注2:若该视频中没有某个类别的目标,则此类别计算均值时,忽略该视频。
Task1:跑通YOLO方案baseline!
1、数据读取
读取json文件
pd.read_json('训练集(有标注第一批)/标注/45.json')
结果
frame_id | event_id | category | bbox | |
---|---|---|---|---|
0 | 0 | 1 | 非机动车违停 | [746, 494, 988, 786] |
1 | 0 | 2 | 非机动车违停 | [755, 606, 967, 843] |
2 | 0 | 3 | 非机动车违停 | [502, 33, 829, 365] |
3 | 0 | 4 | 机动车违停 | [549, 784, 1345, 1079] |
4 | 1 | 1 | 非机动车违停 | [746, 494, 988, 786] |
... | ... | ... | ... | ... |
1683 | 420 | 4 | 机动车违停 | [549, 784, 1345, 1079] |
1684 | 421 | 4 | 机动车违停 | [549, 784, 1345, 1079] |
1685 | 421 | 1 | 非机动车违停 | [746, 494, 988, 786] |
1686 | 421 | 2 | 非机动车违停 | [755, 606, 967, 843] |
1687 | 421 | 3 | 非机动车违停 | [502, 33, 829, 365] |
1688 rows × 4 columns
先查看json文件,每个文件是对一段视频每个帧进行违法行为分析,可以看到,一帧可以存在多个违法行为
读取视频文件
video_path = '训练集(有标注第一批)/视频/45.mp4'
cap = cv2.VideoCapture(video_path)
while True:
# 读取下一帧
ret, frame = cap.read()
if not ret:
break
break
frame.shape
(1080, 1920, 3)//视频一帧图片大小
使用json文件数据标注
bbox = [746, 494, 988, 786]
pt1 = (bbox[0], bbox[1])
pt2 = (bbox[2], bbox[3])
color = (0, 255, 0)
thickness = 2 # 线条粗细
cv2.rectangle(frame, pt1, pt2, color, thickness)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
plt.imshow(frame)
效果展示