Datawhale夏令营第五期——CV方向 TASK2

模型改进

对于task1中的模型,第一个改进的地方是增加训练集,将使用五个视频改为十个视频用于训练集。
要将task1中构建训练集的部分的代码改为下方所示。

for anno_path, video_path in zip(train_annos[:10], train_videos[:10]): #使用zip函数将train_annos和train_videos列表的前10个元素配对,这样每个anno_path将对应一个video_path
    print(video_path)
    anno_df = pd.read_json(anno_path)
    cap = cv2.VideoCapture(video_path) #使用cv2.VideoCapture创建一个视频捕捉对象cap,用于读取视频文件
    frame_idx = 0 #初始化帧索引frame_idx,用于跟踪当前处理的帧号
    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] #从anno_df中选择与当前帧索引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)
                    
                    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

模型的效果改进很有效,从0.004达到了0.19。请添加图片描述

第二个可以改进的地方是使用yolov8的其他版本。其中yolov8的不同版本(N、S、M、L、X)主要是在模型大小、推理速度、准确度以及计算复杂度等方面有所区别。

N(Nano)版本:
最小的模型,参数量最少,计算速度最快,但准确度相对较低。
适用于资源受限的设备,如移动设备或嵌入式设备。
S(Small)版本:
模型大小和参数量比Nano版本略大,推理速度较快,准确度有所提高。
适用于需要平衡速度和准确度的场景。
M(Medium)版本:
在模型大小、参数量和准确度方面都是中等水平。
适用于常见的桌面或服务器环境,是一个比较均衡的选择。
L(Large)版本:
模型更大,参数量更多,推理速度较慢,但准确度较高。
适用于对准确度有较高要求且计算资源较为充足的场景。
X(Extra Large)版本:
最大的模型,拥有最多的参数,推理速度最慢,但准确度最高。
适用于需要最高检测准确度的应用场景,通常在服务器端运行。

task1中使用的版本是yolov8n,也就是最小的模型。在云端计算资源充足的情况下可以尝试更大的模型。
首先在不改动任何参数的情况下尝试了yolov8m(中等版),取得了一个和n版完全一致的结果。请添加图片描述
随后尝试了yolov8l(大版),但是有些过大了,运行到epoch2就显示cuda out of memory了。
请添加图片描述
最后尝试了yolov8s(小版),最终的结果也是和最小版以及中等版完全一致。所以在目前的数据质量以及超参数下,模型大小影响不到训练结果。
由于当日的提交次数已用完,对于参数的调整会在后面进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值