Datawhale第五期夏令营-CV竞赛

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 =1GTFN+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)
  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值