十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何看穿LiteFlowNet光流估计生效的秘密?f-lconv局部卷积与Charbonnier损失全解

如何看穿LiteFlowNet光流估计生效的秘密?f-lconv局部卷积与Charbonnier损失全解 如何看穿LiteFlowNet光流估计生效的秘密f-lconv局部卷积与Charbonnier损失全解【免费下载链接】LiteFlowNetLiteFlowNet: A Lightweight Convolutional Neural Network for Optical Flow Estimation, CVPR 2018 (Spotlight paper, 6.6%)项目地址: https://gitcode.com/gh_mirrors/li/LiteFlowNetLiteFlowNet是 CVPR 2018 Spotlight 论文提出的轻量级光流估计网络optical flow estimation CNN它用金字塔特征 级联流推理在 KITTI 上以 5.37M 的小模型击败了 PWC-Net3.27% vs 4.22% 端点误差。但很多读者只记住了又快又准却没搞懂两个真正拉开差距的设计f-lconv 特征驱动局部卷积和广义 Charbonnier 损失。本文用 2 张图和几段关键配置带你完整看懂这套更准的秘密。LiteFlowNet 网络结构左侧 NetC 提取金字塔特征右侧 NetE 级联进行流推理M与流正则化R一、LiteFlowNet 光流估计整体架构速览整个网络分两大块模块职责关键点NetC 特征描述器从输入图像对提取多尺度特征金字塔特征 权重绑定Tied weightsNetE 级联推理从 Level 3 粗到 Level 1 细逐级细化流场每级 流推理模块 M 流正则化模块 RNetE 每一级里M 模块负责猜出当前层级的初始光流R 模块也就是本文主角 f-lconv负责修——把不平滑、不一致的流场正则化掉。下面两张核心模块分别拆解。NetE 中的级联流推理模块 M:S代价体匹配 亚像素精化二、f-lconv 特征驱动局部卷积层分步拆解f-lconv 是 LiteFlowNet 的正则化核心它不是传统高斯平滑那样无脑平均而是用网络根据图像内容自适应地为每个像素学一个 3×3 加权核。完整实现由现成 Caffe 层拼装而成可参考 models/training_template/train.prototxt.template 中的NetE-R代码段。其计算流程以 L6 为例可拆成 4 步准备局部流场补丁把当前光流的 x、y 分量切片用Im2col展开成 3×3 邻域pad: 1, kernel_size: 3并做去均值处理Reduction MEANBias构造特征驱动输入按预测流把第 2 张图 warping 回第 1 张Warp层两图相减得到img_diff并做ChannelNorm再与流场补丁、金字塔特征F0拼接——这就是特征驱动的来源核的生成依赖图像差异而非固定规则预测 9 核权重拼接结果过 6 层 3×3 卷积128→128→64→64→32→32最后输出 9 通道经平方 → 取负 → SoftmaxExpMax思路得到一组和为 1 的权重exp_kernel加权聚合流场exp_kernel与局部流场补丁逐元素相乘PROD再用一个权重恒为 1、不参与训练lr_mult: 0的 1×1 卷积求和得到正则化后的光流。输入: img_diff 流场x补丁 流场y补丁 金字塔特征F0 ↓ 6× Conv3x3 ReLU 预测: 9个偏移位置的权重 → softmax ↓ 与局部流场补丁加权求和 输出: 平滑且内容自适应的光流场这种设计的好处在纹理丰富的区域核可以集中、保留运动细节在平坦区域核分散、大胆平滑噪声——比固定高斯核更聪明这正是 LiteFlowNet 流场更干净的关键之一。三、Charbonnier 广义鲁棒损失不怕离群点的训练目标光流监督通常用 L1 损失但它对离群点遮挡、误匹配很敏感。LiteFlowNet 在 src/caffe/layers/l1loss_layer.cpp 里实现了广义 Charbonnier 损失配置在训练模板的每一级监督头中l1_loss_param { l2_per_location: true }其数学形式为按像素先聚合成 L2再按 α 次幂压缩L Σ ( ||f − f_gt||₂² ε )^(α/2) 其中 ε 1e-2α 可通过power: alpha调整三个细节值得注意见 src/caffe/proto/caffe.proto 的L1LossParameterl2_per_location: true先把每个像素的 x、y 两个通道误差平方求和再开根得到逐像素误差而不是逐通道epsilon默认 0.01分母加平滑项避免误差接近 0 时梯度爆炸——这是 Charbonnier 函数可微又鲁棒的精髓power默认 0.5α 0.5 时为非凸损失对大误差的惩罚被进一步压缩网络不会被少量错误像素带偏。实现上该损失由Eltwise(求差) → Power(平方) → Conv(通道求和) → Power(开根ε)四个标准层组合而成见 src/caffe/layers/l1loss_layer.cu 的 GPU 前向并支持 NaN 掩码与 plateau 屏蔽训练更稳定。四、上手 LiteFlowNet训练与测试要点想在自己的数据上复现这套效果按 README 的路径走即可步骤操作相关文件1. 构建 LMDB修改数据集路径后运行脚本data/make-lmdbs-train.sh2. 新建训练目录从模板复制三个文件再修改models/training_template/3. 启动训练分阶段stage-wise训练逐级提升精度models/training_template/train.py.template4. 批量测试图像同分辨率用batch模式否则用itermodels/testing/test_batch.py5. 评测精度计算平均端点误差AEPmodels/testing/util/endPointErr.m预训练模型liteflownet、liteflownet-ft-sintel、liteflownet-ft-kitti在 models/trained/ 中解压即用训练细节与分阶段策略建议结合论文一起读。五、总结LiteFlowNet 更准的两把钥匙设计解决的问题一句话原理f-lconv流场不平滑、不一致用图像差异 流场补丁 特征自适应预测 9 核权重内容感知地正则化光流Charbonnier 损失离群误差污染梯度sqrt(ε 误差²) 的 α 次幂鲁棒监督小误差线性、大误差衰减两者一修一教f-lconv 在网络里实时修正流场Charbonnier 损失在训练时稳住方向——这就是 LiteFlowNet 用更小的模型拿到更好光流精度背后的完整故事。【免费下载链接】LiteFlowNetLiteFlowNet: A Lightweight Convolutional Neural Network for Optical Flow Estimation, CVPR 2018 (Spotlight paper, 6.6%)项目地址: https://gitcode.com/gh_mirrors/li/LiteFlowNet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表