处理帧数不等的视频的批处理代码

本文介绍了一种处理帧数不等的视频批处理方法,适用于需要从每一帧获取信息的场景,如自动驾驶和动作识别。作者基于Yolov3的LoadStreams创建了LoadStreamsBatch类,该类在迭代时能处理不同长度的视频,通过固定间隔检索帧和动态调整视频大小来适应批处理。这种方法减少了数据预处理的时间,有助于模型与数据的匹配。
摘要由CSDN通过智能技术生成

作者|Rahul Varma 编译|VK 来源|Towards Data Science

训练和测试一个有效的机器学习模型最重要的一步是收集大量数据并使用这些数据对其进行有效训练。小批量(Mini-batches)有助于解决这个问题,在每次迭代中使用一小部分数据进行训练。

但是,随着大量的机器学习任务在视频数据集上执行,存在着对不等长视频进行有效批处理的问题。大多数方法依赖于将视频裁剪成相等的长度,以便在迭代期间提取相同数量的帧。但在我们需要从每一帧获取信息来有效地预测某些事情的场景中,这并不是特别有用,特别是在自动驾驶汽车和动作识别的情况下。

我们可以创建一个可以处理不同长度视频的处理方法。

在Glenn Jocher的Yolov3中(https://github.com/ultralytics/yolov3),我用**LoadStreams**作为基础,创建了LoadStreamsBatch类。

类初始化
def __init__(self, sources='streams.txt', img_size=416, batch_size=2, subdir_search=False):
        self.mode = 'images'
        self.img_size = img_size
        self.def_img_size = None

        videos = []
        if os.path.isdir(sources):
            if subdir_search:
                for subdir, dirs, files in os.walk(sources):
                    for file in files:
                        if 'video' in magic.from_file(subdir + os.sep + file, mime=True):
                            videos.append(subdir + os.sep + file)
            else:
                for elements in os.listdir(sources):
                    if not os.path.isdir(elements) and 'video' in magic.from_file(sources + os.sep + elements, mime=True):
                        videos.append(sources + os.sep + elements)
        else:
            with open(sources, 'r') as f:
                videos = [x.strip() for x in f.read().splitlines() if len(x.strip())]

        n = len(videos)
        curr_batch = 0
        self.data = [None] * batch_size
        self.cap = [None] * batch_size
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值