二、slomo部分源码分析
上篇文章《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部分源码分析相关推荐
- C#调用obs studio 二次开发 源码分析 编译
C#二次开发obs studio obs studio二次开发视频教程,录制.推流.调整分辨率.调整位置.画面回调.推流回调等功能 obs二次开发还是比较繁琐的,我在学习的时候也是很痛苦,有需要的朋友 ...
- Java源码详解二:HashMap源码分析--openjdk java 11源码
文章目录 HashMap.java介绍 1.HashMap的get和put操作平均时间复杂度和最坏时间复杂度 2.为什么链表长度超过8才转换为红黑树 3.红黑树中的节点如何排序 本系列是Java详解, ...
- AXI_lite代码简解(二)-AXI-Lite 源码分析
AXI-Lite 源码分析 对于使用AXI总线,最开始肯定要了解顶层接口定义,这样才能针对顶层接口进行调用和例化,打开axi_lite_v1_0.v文件,第一段就是顶层的接口定义: 代码4 1 a ...
- Linux驱动学习--HDMI开发(二)HDMI驱动源码分析(RK平台)
目录 一.引言 二.驱动框架 ------> dts节点 ------> HDMI DDC 驱动 ------> HDMI HDCP驱动 ------> HDMI CEC驱动 ...
- LLVM每日谈之十二 LLVM的源码分析之Pass相关
作者:snsn1984 题记:在学习LLVM的过程中,要想学的更加深入,掌握更多的技能,LLVM的源码是必须要读的,但是在这么多的源码中,从哪里下手?很容易让人找不到头脑,本文这里就先拿出几个Pass ...
- Dagger2入门系列二:ModuleComponent源码分析,h5移动端开发面试题
} } 1.3.Component类 @Component(modules = Test1Module.class) public interface Test1Component { void in ...
- 流量回放repeater的原理分析二:repeater源码分析
前言 在上文中我们分析了sandbox-jvm(以下简称sandbox)的核心源码,了解了sandbox实现类增强的原理.并且了解了sandbox的模块化加载能力,repeater作为一个独立的模块, ...
- (二)Linux源码分析-init
main 功能 前面介绍了head.s将执行权交给main.c,内核初始化完成,现在开始进入C代码的分析了.Init主要是取得前面setup.s设置的根文件设备号和一下内存全局变量,初始化陷阱门,块设 ...
- Licode入门学习:MediaStream源码分析(二)
Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...
最新文章
- Visual Studio 2010 Ultimate 正式版已经可以下载,大家快开始下载啊
- 初中计算机实践研究计划,初中信息技术个人研修计划
- 记一次内存溢出的分析经历——使用thrift
- MySql中delimiter
- Tensorflow——[Could not load dynamic library cudart64_101.dll]解决方案
- (资源整理)带你入门Spark
- REVERSE-PRACTICE-BUUCTF-29
- Java并发篇_volatile
- Nginx - 配置
- 高性能缓存服务器Varnish架构配置
- Overview of HEVC之5 帧间预测
- oracle 恢复学习 案例1 一个数据文件丢失 完全恢复数据库
- linq的字段自增长属性设置_云途晨报9月9日前,这5类ebay物品属性必须完成更新;Wish体积重计算方式即将更新...
- 安森美的全局快门图像传感器解决机器视觉的成像需求
- 2016 server win 假死_win10程序假死无响应的两种解决办法
- 7-1 愿天下有情人都是失散多年的兄妹 (25 分)
- python爬虫登录微博账号_python模拟登录新浪微博 python新浪微博爬虫
- 【数据仓库】1.数据模型
- 批量提取多个Excel文件内指定单元格的数据(文件名和数据)
- 多台电脑共享键盘鼠标
热门文章
- oracle认证还有价值吗,oracle认证有必要考吗
- Revit插件“管线分割”功能,比破解版的还好用
- 公司考勤系统 功能和代码
- DDOS攻击的简单化解,追踪和防御
- python出现expected an_Python错误:IndentationError:expected an indented block怎么解决
- 爱普生WF7710WF7720WF3720 升级固件导致墨盒不识别解决方法
- Linux命令行安卓模拟器,linux下安卓模拟器加速
- 完全去中心化的编程模式,不需要服务器,也不需要ip,就像一张漫无目的的网络、四处延伸
- 107、基于51单片机智能快递柜收取件存储柜快递箱自助存储柜系统设计
- 2021年深圳福田英才荟高新企业人才奖励及申报条件,补贴30万