Datawhale AI夏令营第五期 CV学习 Task2笔记

本次笔记主要内容为对上次笔记中未分析完的代码进行梳理解读,另外简单熟悉一下提高模型性能的不同可用方法。

Baseline代码解读(2)

!wget http://mirror.coggle.club/yolo/yolov8n-v8.2.0.pt -O yolov8n.pt
!mkdir -p ~/.config/Ultralytics/
!wget http://mirror.coggle.club/yolo/Arial.ttf -O ~/.config/Ultralytics/Arial.ttf

执行shell命令:使用 wget 命令下载yolov8模型, -O 指定保存的文件名及路径;使用 mkdir 命令创建指定多级目录;使用 wget 命令下载Arial字体文件至该目录中。

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

import warnings
warnings.filterwarnings('ignore')

!pip install ultralytics
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
results = model.train(data="yolo-dataset/yolo.yaml", epochs=2, imgsz=1080, batch=16)

通过设定环境变量os.environ["CUDA_VISIBLE_DEVICES"] = "0"指定使用的GPU;

通过filterwarning设定忽略警告;

使用ultralytics模块的YOLO方法将之前下载的yolov8模型实例化为初始模型,并进行训练。train方法中各参数含义如下:data:提供数据配置文件路径。epoch:训练轮次。imgsz:图片尺寸。batch:训练批次。

model = YOLO("runs/detect/train/weights/best.pt")

开始准备处理测试集。使用训练结果中效果最好的模型。

for path in glob.glob('测试集/*.mp4'):
    submit_json = []
    results = model(path, conf=0.05, imgsz=1080,  verbose=False)
    for idx, result in enumerate(results):
        boxes = result.boxes  # Boxes object for bounding box outputs
        masks = result.masks  # Masks object for segmentation masks outputs
        keypoints = result.keypoints  # Keypoints object for pose outputs
        probs = result.probs  # Probs object for classification outputs
        obb = result.obb  # Oriented boxes object for OBB outputs

        if len(boxes.cls) == 0:
            continue
        
        xywh = boxes.xyxy.data.cpu().numpy().round()
        cls = boxes.cls.data.cpu().numpy().round()
        conf = boxes.conf.data.cpu().numpy()
        for i, (ci, xy, confi) in enumerate(zip(cls, xywh, conf)):
            submit_json.append(
                {
                    'frame_id': idx,
                    'event_id': i+1,
                    'category': category_labels[int(ci)],
                    'bbox': list([int(x) for x in xy]),
                    "confidence": float(confi)
                }
            )

    with open('./result/' + path.split('/')[-1][:-4] + '.json', 'w', encoding='utf-8') as up:
        json.dump(submit_json, up, indent=4, ensure_ascii=False)

使用glob方法检索测试集中所有mp4文件,使用上面的模型检测出结果,并序列化为json文件格式。具体步骤如下:

指定置信度0.05,对由glob检索得到的视频路径使用模型进行检测,输出结果为results;

遍历results中的每一帧预测结果,获得边界框、分割掩码、关键点、分类概率和方向边界框信息;

如当前帧无检测结果,则跳过后续处理;

获取边框信息(xywh)、类别(clf)和置信度(conf),以要求的提交格式组合,添加到submit_json中;

使用json.dump将写入所有结果信息的submit_json序列化处理,写为json文件格式。

!\rm result/.ipynb_checkpoints/ -rf
!\rm result.zip
!zip -r result.zip result/

使用rm命令删除result文件夹中不需要的文件和原来的result.zip,重新打包新的result.zip


模型提升性能方法

1. 更改训练集大小

for anno_path, video_path in zip(train_annos[:5], train_videos[:5])

在原本的该行代码中使用train数据中的前五组作为训练用数据,可以适当增大。

2. 改换初始模型

!wget http://mirror.coggle.club/yolo/yolov8n-v8.2.0.pt -O yolov8n.pt

更改wget命令后的下载路径,可选择其他可用的YOLO模型版本。如果修改了-O后的保存路径,则后续调用该模型时的路径也需作相应修改。

3. 调整训练参数

results = model.train(data="yolo-dataset/yolo.yaml", epochs=2, imgsz=1080, batch=16)

修改训练语句中指定的轮次(epoch)和批次(batch),epoch过低则容易拟合程度不足,过高则可能过拟合。batch决定了将训练样本分为多少批,batchsize大小影响了模型优化程度和速度。

注意:重新训练后需修改该处路径,找到正确的train文件夹

model = YOLO("runs/detect/train/weights/best.pt")

初步调整后,得分即可由原始的0.005提升至0.014。在后续实验中,遇到了

RuntimeError: DataLoader worker (pid XXX) is killed by signal 的问题,尚待解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值