CV竞赛
- 0.赛事报名
- 租用4090
- 1.开始运行
- 下载文件提交结果
- 2.内容解释
- 赛题背景
- 赛题目标
- 社会价值
- 评分规则
- baseline精读代码
- 什么是YOLO
- 主要代码内容精读
- 使用Ultraalytics运行代码
0.赛事报名
赛事官网:https://www.marsbigdata.com/competition/details?id=3839107548872
租用4090
使用到的平台为厚德云:https://portal.houdeyun.cn/console/apparatus/gpu/generic
选择新建
选择合适的进行下载
选择环境,然后立即下单:
1.开始运行
下面就可以进行正常的使用
打开终端,输入如下代码:
apt install git-lfs
git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/AI_Camp5_baseline_CV.git
这一步主要的作用就是为了下载数据集
然后选择task1.ipynb进行运行即可
下载文件提交结果
然后将result.zip进行下载然后上传到比赛官网的提交平台上即可,以下是我的运行结果:
2.内容解释
赛题背景
城市治理赛道——随着城市化进程的加快,城市管理面临着前所未有的挑战。占道经营、垃圾堆放和无照经营游商等问题对城市管理提出了更高的要求。本赛道聚焦城市违规行为的智能检测,要求选手研究开发高效可靠的计算机视觉算法,提升违规行为检测识别的准确度,降低对大量人工的依赖,提升检测效果和效率,从而推动城市治理向更高效、更智能、更文明的方向发展,为居民创造一个安全、和谐、可持续的居住环境。
赛题源自于生活当中的对城市违规的行为进行智能检测,要求要提出更加高效率的方法来保障人们的生活
赛题目标
利用图像处理和计算机视觉技术 开发一套智能识别系统,自动检测和分类摄像头捕获的视频中,城市管理中的违规行为
社会价值
通过对摄像头捕获的视频进行分析,自动准确识别违规行为,并及时向管理部门发出告警,以实现更高效的城市管理。
评分规则
主要使用到的评分方法如下:
F1score
=
2
Recall
∗
Precision
Recall
+
Precision
MOTA
=
1
−
∑
F
N
+
F
P
+
I
D
S
W
∑
G
T
score
=
0.8
5
∗
F1score
+
0.1
5
∗
MOTA
\begin{array}{c} \text { F1score }=2 \frac{\text { Recall } * \text { Precision }}{\text { Recall }+ \text { Precision }} \\ \text { MOTA }=1-\frac{\sum F N+F P+I D S W}{\sum G T} \\ \text { score }=0.85^{*} \text { F1score }+0.15^{*} \text { MOTA } \end{array}
F1score =2 Recall + Precision Recall ∗ Precision MOTA =1−∑GT∑FN+FP+IDSW score =0.85∗ F1score +0.15∗ MOTA
对每个json文件得到两个指标的加权求和,最终得分为所有文件得分取均值。
注1:若真实目标框与预测框IOU大于0.5,则判定目标正确识别。若MOTA指标为负,则该类别精度得分为0。
注2:若该视频中没有某个类别的目标,则此类别计算均值时,忽略该视频。
baseline精读代码
什么是YOLO
yolo是一种目标检测算法,全称为"You Only Look Once"表示你只需要看一次,这个也是给该系统起了一个非常顺口且好记的名字,也表明了作者对于他们所提出的模型有极高的自信,yolo也算是在工业界应用较为广泛的一个目标检测算法了,因为它的成本以及效率相对来说还是比较可观的
主要代码内容精读
主要是对如何将给到的视频分解成图片然后分析(内容写在了代码当中),如下:
# 读取训练集视频
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)
#利用cv2对视频当中的内容进行截断和读取
frame_idx = 0
#标注对应帧,表示读取从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
#提取x中心点
y_center = (y_min + y_max) / 2 / img_height
#提取y中心点
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
#每完成一次就加1,运行下一帧的内容
使用Ultraalytics运行代码
Ultraalytics提供多个计算机视觉的模型库,如下图所示:
from ultralytics import YOLO
# 设置模型版本
model = YOLO("yolov8n.pt")
# 设定数据集和训练参数
results = model.train(data="yolo-dataset/yolo.yaml", epochs=2, imgsz=1080, batch=16)