上篇文章《super slomo介绍》已经对slomo进行大概的介绍。

本章对该源码进行一个简单分析,由于本人笔记本显存不够,因此对该源码进行部分修改,可以减少显存占用和训练速度的提升。并且后续使用C++来调用训练好的模型并实现双向光流和中间帧合成。

源码地址:https://github.com/avinashpaliwal/Super-SloMo,官方WIKI有具体的安装过程,不在做介绍。

源码通过torch来实现基于U-NET的神经网络结构和光流算法。其中Model.py提供了训练模型的U-NET体系的建立。

train.py提供了训练相关功能。通过dataloader.SuperSloMo()加载训练集和验证集。训练集和验证集通过create_dataset.py提前生成,说明文档有相关生成命令。

for epoch in range(dict1[‘epoch’] + 1,args.epochs)这里进行整个训练的循环控制。训练过程很简单,首先从训练集获取三帧图frame0、frameT和frame1,其中frame0和frame1用来训练,frameT用来验证。然后把frame0和frame1通过torch.cat进行合并。放入到flowComp网络得到输出。再把输出拆分成F_0_1和F_1_0,后续用来计算光流残差和中间帧合成。最后进行loss计算并反向传播。

为了快速看到训练结果减少训练时间和GPU显存的限制,就在源码基础上做了一些修改,首先把flowComp = model.UNet(6,4)改成flowComp = model.UNet(2,4)这里把24位真彩图改成8位灰度图,同理改ArbTimeFlowIntrp  = model.Unet(12, 5)。

MSE_LossFn调用vgg16对Ft_p和IFrame进行MSE计算loss,由于前面改动这里也不能使用,屏蔽掉,改loss=204*recnLoss+102*warpLoss+loss_smooth。

修改model.py中forward:直接跳过s3、s4、s5网络层,直接x=self.up5(s2,s1)。

构造中__init__():改self.conv1=nn.Conv2d(inChannels,4,7,stride=1,padding=3)

Self.conv2=nn.Conv2d(4,4,7,stride=1,padding=3)

Self.down1=down(4,8,5)

Self.up5=up(8,4)

Self.conv3=nn.Conv2d(4,outChannels,3,stride=1,padding=1)

最后修改输出训练模型:原来通过torch.save保存为dict1的集合,现在改成对flowComp和ArbTimeFlowIntrp进行输出。

修改后的代码虽然总体效果不如原来,但速度有了非常大的提升,对GPU的要求也降到非常低,适合用来测试。

下一章会把输出的训练模型转换成torch模型便于C++通过torch的调用。

修改后的代码:https://download.csdn.net/download/u011736517/12558294

二、slomo部分源码分析相关推荐

  1. C#调用obs studio 二次开发 源码分析 编译

    C#二次开发obs studio obs studio二次开发视频教程,录制.推流.调整分辨率.调整位置.画面回调.推流回调等功能 obs二次开发还是比较繁琐的,我在学习的时候也是很痛苦,有需要的朋友 ...

  2. Java源码详解二:HashMap源码分析--openjdk java 11源码

    文章目录 HashMap.java介绍 1.HashMap的get和put操作平均时间复杂度和最坏时间复杂度 2.为什么链表长度超过8才转换为红黑树 3.红黑树中的节点如何排序 本系列是Java详解, ...

  3. AXI_lite代码简解(二)-AXI-Lite 源码分析

    AXI-Lite 源码分析   对于使用AXI总线,最开始肯定要了解顶层接口定义,这样才能针对顶层接口进行调用和例化,打开axi_lite_v1_0.v文件,第一段就是顶层的接口定义: 代码4 1 a ...

  4. Linux驱动学习--HDMI开发(二)HDMI驱动源码分析(RK平台)

    目录 一.引言 二.驱动框架 ------> dts节点 ------> HDMI DDC 驱动 ------> HDMI HDCP驱动 ------> HDMI CEC驱动 ...

  5. LLVM每日谈之十二 LLVM的源码分析之Pass相关

    作者:snsn1984 题记:在学习LLVM的过程中,要想学的更加深入,掌握更多的技能,LLVM的源码是必须要读的,但是在这么多的源码中,从哪里下手?很容易让人找不到头脑,本文这里就先拿出几个Pass ...

  6. Dagger2入门系列二:ModuleComponent源码分析,h5移动端开发面试题

    } } 1.3.Component类 @Component(modules = Test1Module.class) public interface Test1Component { void in ...

  7. 流量回放repeater的原理分析二:repeater源码分析

    前言 在上文中我们分析了sandbox-jvm(以下简称sandbox)的核心源码,了解了sandbox实现类增强的原理.并且了解了sandbox的模块化加载能力,repeater作为一个独立的模块, ...

  8. (二)Linux源码分析-init

    main 功能 前面介绍了head.s将执行权交给main.c,内核初始化完成,现在开始进入C代码的分析了.Init主要是取得前面setup.s设置的根文件设备号和一下内存全局变量,初始化陷阱门,块设 ...

  9. Licode入门学习:MediaStream源码分析(二)

    Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...

最新文章

  1. Visual Studio 2010 Ultimate 正式版已经可以下载,大家快开始下载啊
  2. 初中计算机实践研究计划,初中信息技术个人研修计划
  3. 记一次内存溢出的分析经历——使用thrift
  4. MySql中delimiter
  5. Tensorflow——[Could not load dynamic library cudart64_101.dll]解决方案
  6. (资源整理)带你入门Spark
  7. REVERSE-PRACTICE-BUUCTF-29
  8. Java并发篇_volatile
  9. Nginx - 配置
  10. 高性能缓存服务器Varnish架构配置
  11. Overview of HEVC之5 帧间预测
  12. oracle 恢复学习 案例1 一个数据文件丢失 完全恢复数据库
  13. linq的字段自增长属性设置_云途晨报9月9日前,这5类ebay物品属性必须完成更新;Wish体积重计算方式即将更新...
  14. 安森美的全局快门图像传感器解决机器视觉的成像需求
  15. 2016 server win 假死_win10程序假死无响应的两种解决办法
  16. 7-1 愿天下有情人都是失散多年的兄妹 (25 分)
  17. python爬虫登录微博账号_python模拟登录新浪微博 python新浪微博爬虫
  18. 【数据仓库】1.数据模型
  19. 批量提取多个Excel文件内指定单元格的数据(文件名和数据)
  20. 多台电脑共享键盘鼠标

热门文章

  1. oracle认证还有价值吗,oracle认证有必要考吗
  2. Revit插件“管线分割”功能,比破解版的还好用
  3. 公司考勤系统 功能和代码
  4. DDOS攻击的简单化解,追踪和防御
  5. python出现expected an_Python错误:IndentationError:expected an indented block怎么解决
  6. 爱普生WF7710WF7720WF3720 升级固件导致墨盒不识别解决方法
  7. Linux命令行安卓模拟器,linux下安卓模拟器加速
  8. 完全去中心化的编程模式,不需要服务器,也不需要ip,就像一张漫无目的的网络、四处延伸
  9. 107、基于51单片机智能快递柜收取件存储柜快递箱自助存储柜系统设计
  10. 2021年深圳福田英才荟高新企业人才奖励及申报条件,补贴30万