简单视频分类模型

本文介绍了如何使用TensorFlow 2.0和Keras搭建一个简单的视频分类模型,通过2DCNN + LSTM的方法处理视频数据。首先,讲解了视频分类的基本概念,然后阐述了数据集的等间隔采样预处理方法。接着,详细说明了模型结构,包括TimeDistributed层的作用。最后,提供了完整代码的获取方式和训练、预测的流程。

视频可以简单看作一系列图片的集合

我的BiliBili视频教程(知道你不喜欢看文字)

1. 视频分类简介

视频分类通过有以下几种方法:

  1. 2DCNN + LSTM
  2. 3DCNN

本文介绍最简单的2DCNN + LSTM的方法,使用tensorflow 2.0+ 进行实现,保证代码尽可能简短,但性能将会一般。

2. 数据集准备

虽然视频是由很多帧构成的,但是如果我们选取所有帧会消耗大量的计算资源,并且不同视频帧数不同会导致LSTM的输入不确定。为了保证所有视频提取出的所有帧数量相同,本文使用最简单的方法进行预处理(等间隔采样法)。

等间隔采样方法示例:无论视频多长我们都想采样出4帧来。那么一个32帧的视频,我们就需要每8帧取一帧。最后我们的采样结果是第{1,9,17,25}帧。

具体代码实现为:

def read_video(video_path):
    # 等间隔采样法
    need_number = 8
    images = []
    cap = cv2.VideoCapture(video_path)
    frames_num = cap.get(7) - 1
    step = frames_num // need_number
    print("总帧数: ", frames_num, "步长:", step)
    i = 0
    frames = 0
    while cap.isOpened():
        ret, frame = cap.read()
        i = i+1
        if frames == need_number:
            cap.release()
            break
        if (i % step == 0):
            frames = frames + 1
            frame = transform.resize(frame, (150, 80))
            images.append(frame)
    return np.asarray(images, np.float32)

该方法具有帧浪费的现象,但是本文尽可能保证代码简单,如有优化兴趣,请见参考文献1。

3. 模型搭建

模型搭建,本文使用tensorflow中的keras进行快速搭建,几行代码就可以搞定。

model = Sequential([
    TimeDistributed(Conv2D(2, (2,2), activation= 'relu'), input_shape=(None,150,80,3)),
    TimeDistributed(MaxPooling2D(pool_size=(2, 2))),
    TimeDistributed(Flatten()),
    LSTM(256),
    Dense(1, activation='sigmoid'),
])

这里解释一下TimeDistributed层的意思,我们的输入是一个时间序列数据,就像这样[图片1,图片2,图片3,图片4],我们需要对每个图片都进行CNN特征提取,所以TimeDistributed层就是对每个时刻的数据进行函数内的操作。

最后我们将所有采样出的图片的特征,输入到LSTM中进行分类。

4. 全部代码

为了方便大家的使用,我将全部代码见 【Github

使用方法:

  1. 运行create_image.py文件,生成视频采样特征。
  2. 运行main.py文件,训练模型
  3. 运行predict.py文件,进行预测

公众号【自由小兵儿】,回复【数据集100】,可以得到数据集,并且通过公众号可第一时间联系到我呀!

5. 参考资料

  1. 优快云-2D卷积神经网络+LSTM实现视频动作分类
医学影像视频分类模型是医学影像分析领域的重要组成部分。医学影像分析利用计算机辅助诊断(CAD)来提高医生对医学影像的阅读速度和准确性,涵盖图像处理、特征提取、图像分类、目标检测和诊断预测等方面 [^2]。 医学影像视频分类模型主要实现将医学影像视频分类到不同类别,如不同的疾病类别或严重程度。在医疗影像分析中,图像分类本身就是重要任务之一 [^1]。 多模态学习在医学影像领域应用广泛,其在医疗影像分析中的应用提高了诊断准确性,为疾病的理解和治疗提供有价值的辅助信息,这对于医学影像视频分类模型也有一定的启示意义,可能会结合多模态影像数据来提升分类模型的性能 [^3]。 在临床实践中,多模态影像被用于提高诊断精度和效率,例如肺癌诊断中CT和PET结合、神经科学中MRI和fMRI结合,医学影像视频分类模型也可能会借鉴多模态影像的思路,综合不同模态的影像视频数据进行分类 [^4]。 ```python # 这里简单示例一个可能用于医学影像视频分类深度学习模型框架 import torch import torch.nn as nn class MedicalVideoClassificationModel(nn.Module): def __init__(self, num_classes): super(MedicalVideoClassificationModel, self).__init__() # 这里可以根据实际情况设计卷积层等结构 self.conv1 = nn.Conv3d(3, 16, kernel_size=3, padding=1) self.pool = nn.MaxPool3d(2, 2) self.fc1 = nn.Linear(16 * 16 * 16 * 16, 128) self.fc2 = nn.Linear(128, num_classes) def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) x = x.view(-1, 16 * 16 * 16 * 16) x = torch.relu(self.fc1(x)) x = self.fc2(x) return x # 示例使用 model = MedicalVideoClassificationModel(num_classes=5) input_tensor = torch.randn(1, 3, 32, 32, 32) output = model(input_tensor) print(output) ```
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自由小冰儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值