当前位置: 首页 > news >正文

无监督MVSNet系列网络概述

目录

Unsup-MVSNet

PatchMatchNet代码总框架

算法流程

自监督网络JDACS-MS代码总框架

交叉熵

常用的三个Loss原理

VGG网络


Unsup-MVSNet

实现无监督的MVS
使用鲁棒的光度一致性Loss实现无监督 深度图估计,克服不同视图下的光照变化 和遮挡问题
https://link.zhihu.com/?target=https%3A//github.com/YoYo000/MVSNet
MVS2
在之前标准的无监督Loss基础上又提出 了cross-view一致性Loss
深度图优化采用SPN进行优化
M^3VSNet
结合pixel-wisefeature-wise构建Loss
加入法向量一致性Loss提高深度图估 计的准确性和连续性

PatchMatchNet代码总框架

算法流程

特征计算
基于FPN的多尺度特征提取
depth初始化:
如果是第一次迭代:随机初始化48层(参数可调)
如果是第二次及后续N次:在第一次迭代得到的深度图为中心上下采样几层(局部扰动),再
加上自适应传播从邻域N_neighbor传播过来的N_neighbor个深度图层。
匹配代价计算与代价聚合
得到depth hypothesis后,计算匹配代价(warp srcfeature ref对应depth层下,匹配
相似性计算见论文公式3),使用Pixel-wise view weight进行聚合得到[B,Ndepth,H,W](参
考公式5
对每个像素和每个depth hypothesis,自适应采样一些邻域内的像素进行cost aggregation.
所有邻域相对中心像素的权重与对应深度乘积和(参加公式6
深度图计算与优化
得到所有costs以后,用softmax得到每个hypothesis对应的概率,然后求期望得到估计值。
优化这部分跟MVSNet相同,由refrgb引导计算一个残差与初始深度图加和即为优化后的深
度图

自监督网络JDACS-MS代码总框架

交叉熵

Cross Entropy损失函数常用于分类问题中,很容易的的进行求导计算
常用的结构:
1. 神经网络最后一层得到每个类别的得分scores(也叫logits);
2. 该得分经过sigmoid(softmax)函数获得概率输出;
3. 模型预测的类别概率输出与真实类别的one hot形式进行交叉熵损失函数的计算
参考链接:https://zhuanlan.zhihu.com/p/35709485

常用的三个Loss原理

SSIM Loss
度量两个图像之间的相似性
光度一致性Loss
warp N-1 Source图像到Refer图像上,计算两者的梯度和颜色差异
平滑Loss
深度图变化大的地方rgb的变化也比较大
训练脚本 train.py def train() 函数
network.py CVP网络
在第二个scale时,计算深度层的间隔推导如下:

VGG网络

VGG网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2max pooling
train.py def train_sample_aug() 数据增强Loss

import numpy as np
from read_write_model import read_model, write_model
from tempfile import mkdtempdef compare_cameras(cameras1, cameras2):assert len(cameras1) == len(cameras2)for camera_id1 in cameras1:camera1 = cameras1[camera_id1]camera2 = cameras2[camera_id1]assert camera1.id == camera2.idassert camera1.width == camera2.widthassert camera1.height == camera2.heightassert np.allclose(camera1.params, camera2.params)def compare_images(images1, images2):assert len(images1) == len(images2)for image_id1 in images1:image1 = images1[image_id1]image2 = images2[image_id1]assert image1.id == image2.idassert np.allclose(image1.qvec, image2.qvec)assert np.allclose(image1.tvec, image2.tvec)assert image1.camera_id == image2.camera_idassert image1.name == image2.nameassert np.allclose(image1.xys, image2.xys)assert np.array_equal(image1.point3D_ids, image2.point3D_ids)def compare_points(points3D1, points3D2):for point3D_id1 in points3D1:point3D1 = points3D1[point3D_id1]point3D2 = points3D2[point3D_id1]assert point3D1.id == point3D2.idassert np.allclose(point3D1.xyz, point3D2.xyz)assert np.array_equal(point3D1.rgb, point3D2.rgb)assert np.allclose(point3D1.error, point3D2.error)assert np.array_equal(point3D1.image_ids, point3D2.image_ids)assert np.array_equal(point3D1.point2D_idxs, point3D2.point2D_idxs)def main():import sysif len(sys.argv) != 3:print("Usage: python read_model.py ""path/to/model/folder/txt path/to/model/folder/bin")returnprint("Comparing text and binary models ...")path_to_model_txt_folder = sys.argv[1]path_to_model_bin_folder = sys.argv[2]cameras_txt, images_txt, points3D_txt = \read_model(path_to_model_txt_folder, ext=".txt")cameras_bin, images_bin, points3D_bin = \read_model(path_to_model_bin_folder, ext=".bin")compare_cameras(cameras_txt, cameras_bin)compare_images(images_txt, images_bin)compare_points(points3D_txt, points3D_bin)print("... text and binary models are equal.")print("Saving text model and reloading it ...")tmpdir = mkdtemp()write_model(cameras_bin, images_bin, points3D_bin, tmpdir, ext='.txt')cameras_txt, images_txt, points3D_txt = \read_model(tmpdir, ext=".txt")compare_cameras(cameras_txt, cameras_bin)compare_images(images_txt, images_bin)compare_points(points3D_txt, points3D_bin)print("... saved text and loaded models are equal.")print("Saving binary model and reloading it ...")write_model(cameras_bin, images_bin, points3D_bin, tmpdir, ext='.bin')cameras_bin, images_bin, points3D_bin = \read_model(tmpdir, ext=".bin")compare_cameras(cameras_txt, cameras_bin)compare_images(images_txt, images_bin)compare_points(points3D_txt, points3D_bin)print("... saved binary and loaded models are equal.")if __name__ == "__main__":main()

http://www.dtcms.com/a/307065.html

相关文章:

  • 并查集算法:Python实现与工程实践指南
  • 如何协调跨部门资源?核心要点分析
  • Java String类练习
  • 客户满意度调查:助力商场提升运营效能​(客户满意度调查)
  • 8.Linux : 日志的管理与时钟同步的配置
  • 代码随想录算法训练营第五十六天|动态规划part6
  • 手动 对列表字段进行排序
  • 【高等数学】第七章 微分方程——第四节 一阶线性微分方程
  • LNN+XGBoost:优化多层供应链订购:缓解牛鞭效应
  • C++STL系列之bitset
  • Git——分布式版本控制系统
  • #C语言——学习攻略:深挖指针路线(四)--字符指针变量,数组指针变量,二维数组传参的本质,函数指针变量,函数指针数组
  • ConvertX:自托管的在线文件转换器,支持1000+种格式!
  • Linux系统编程Day1-- 免费云服务器获取以及登录操作
  • CH347使用笔记:CH347作为FPGA下载器的几种方式
  • Maven 配置阿里云镜像加速
  • huggingface是什么?2025-07-30
  • Mac 上配置jdk 环境变量
  • 2. Agent与 React流程
  • 【LY88】双系统指南及避坑
  • Python 的 match-case
  • 从映射到共生:元宇宙、物联网与AI的智能融合生态图谱
  • (LeetCode 面试经典 150 题) 141. 环形链表(快慢指针)
  • HPCtoolkit的下载使用
  • Oracle11g数据库迁移达梦8数据库方案
  • Python序列化和反序列化
  • 如何用Docker部署ROS2
  • (C++)C++类和类的方法(基础教程)(与Python类的区别)
  • c++之基础B之sort排序(第三个参数没有)(第二课)
  • Fiddler中文教程 从入门到进阶的网络抓包与接口调试实战指南