项目实训(七)—场景视频切割

本文介绍了深度学习在场景视频切割中的实践,通过BNet网络和LSTM模型预测场景边界,再利用Bi-LSTM进行序列预测,最终结合ffmpeg进行视频切割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景边界预测:

二分类问题,即对每个镜头进行是否为场景边界的分类预测。

(1)首先采用一个边界网络(BNet)对镜头的差异与关系进行提取,BNet由两个分支网络构建,Bd捕捉镜头前后两幕的差异,Br用于捕捉镜头关系,由一个卷积加一个最大池化层构建。

class BNet(nn.Module):
    def __init__(self, cfg):
        super(BNet, self).__init__()
        self.shot_num = cfg.shot_num
        self.channel = cfg.model.sim_channel
        self.conv1 = nn.Conv2d(1, self.channel, kernel_size=(cfg.shot_num, 1))
        self.max3d = nn.MaxPool3d(kernel_size=(self.channel, 1, 1))
        self.cos = Cos(cfg)
        self.feat_extractor = feat_extractor(cfg)

    def forward(self, x):  # [batch_size, seq_len, shot_num, 3, 224, 224]
        feat = self.feat_extractor(x)
        # [batch_size, seq_len, shot_num, feat_dim] 
        context = feat.view(
            feat.shape[0]*feat.shape[1], 1, feat.shape[-2], feat.shape[-1])
        context = self.conv1(context)
        # batch_size*seq_len,sim_channel,1,feat_dim
        context = self.max3d(context)
        # batch_size*seq_len,1,1,feat_dim
        context = context.squeeze()
        sim = self.cos(feat)
        bound = torch.cat((context, sim), dim=1)
        return bound

(2)基于获得通过Bnet得到的镜头代表,构建一个LSTM模型获得镜头构成场景边界的概率,通过设定场景个数阈值得到结果。
请添加图片描述

class LGSSone(nn.Module):
    def __init__(self, cfg, mode="image"):
        super(LGSSone,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值