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

毕业设计总结

一、组会记录

  1. 如图1所示,理论上 A 曲线下降的应该会比 B 更明显才对,但是没有。

    考虑可能与 learning rate 有关系,可能需要将其调大。因为模型 A 可能陷入一个局部极小值了。

在这里插入图片描述

图1. A曲线对应的模型的学习率需要调整
  1. 模型的 Pytorch 代码中,一些该 detach 的地方没有 detach,会导致网络不收敛

  2. 本文方法与其他方法做对比实验的时候,它们训练 epoch 数目不一定要相同,因为网络参数数量不同,我们只需要将网络训练到收敛即可。

  3. cascade 的模式:先训练网络的上游部分,然后固定住被训练的部分,再训练下游部分。

  4. 看模型效果,需要看那些有物理意义的东西,比如说视差图,因为可以和 GT 视差图直观地对比。而不看 Loss 的数值。

  5. 在深度补全的 NYU 的代码中有两个参数 spaceSigmas,rangeSigmas。

    如下代码所示,两个参数都是 3 维向量,如何调参?

    可以考虑先固定 rangeSigmas,然后将 spaceSigmas 参数向量的每个分量都变为原来的 1/2、2、1/10、10、1/100和100倍。

    进而固定spaceSigmas ,将 rangeSigmas 参数向量的每个分量都变为原来的 1/2、2、1/10、10、1/100和100倍。

    %   spaceSigmas - (optional) sigmas for the spacial gaussian term.
    %   rangeSigmas - (optional) sigmas for the intensity gaussian term.
      if nargin < 3
        spaceSigmas = [12 5 8];
      end
      if nargin < 4
        rangeSigmas = [0.2 0.08 0.02];
      end
    
  6. 在利用梯度下降法基于等深度约束优化 disparity 时,在迭代的过程中,出现了 disparity map 中一些值 为 inf。由于视差与深度两个量是成反比的关系。那么深度为 0 处的点的视差确实是 inf。故考虑对 disparity 加正则项。即原来的 Cost 函数为

    C o s t = 1 2 ∑ v = 1 h ∑ u = 1 w e v , u 2 e v , u = d v , u p r e d i c t − d v , u g t Cost= \frac{1}{2} \sum_{v=1}^{h} \sum_{u=1}^{w} {e_{v,u}}^2 \qquad e_{v,u} = d_{v,u}^{predict}-d_{v,u}^{gt} Cost=21v=1hu=1wev,u2ev,u=dv,upredictdv,ugt

    加了正则项之后的 Cost 函数为:

    N e w C o s t = λ ∑ v = 1 h ∑ u = 1 w d v , u 2 + 1 2 ∑ v = 1 h ∑ u = 1 w e v , u 2 NewCost=\lambda \sum_{v=1}^{h} \sum_{u=1}^{w} {d_{v,u}}^2+ \frac{1}{2} \sum_{v=1}^{h} \sum_{u=1}^{w} {e_{v,u}}^2 NewCost=λv=1hu=1wdv,u2+21v=1hu=1wev,u2

  7. 在上面第 6 点中,可以通过计算 Cost 函数的 Jacobian 矩阵的秩退出它们有几个变量是不独立的。

  8. 拍数据集的时候,不要露出中文(标志性的),不拍树、不拍花。布的 reflection 不好, noise 很大,布玩具不好。拍木头、花坛、雕塑、瓷器、花盆、车还有一些油漆过的材料。

  9. 做 Multi View Stereo 背景不好恢复,因为 view 变化太小了。

    深度相机要放置于 1 米开外。

    拍整个场景,让相机动起来。

    不在乎背景,只考虑前景。

    背景要变换。

    可以连续拍多张,对图像做平滑(比如平均)。可以换灯光。

    加噪声,对光源加噪声,而不是对图像上加。

  10. 如图 2 所示,用 NYU 提供的 工具包中的 经典的双边滤波算法补全后的深度图左侧会有一条黑色竖纹。这是因为操作前的深度图在黑色竖纹的位置本身就没有数据。双边滤波补全深度算法是利用四周的深度去补充中间位置的深度,但是最左侧的四周缺失了信息,所以双边滤波算法也补充不了深度。

    一种思路:对深度图加一个 mask 矩阵,即深度可信的位置在 mask 矩阵中的值为 1,反之为 0。如何找出这个竖纹处的位置呢?可以考虑这样做:找到图像中最的包含了左上角位置(0,0)的连通区域。

在这里插入图片描述

图2. 双边滤波补全后的深度图

二、关于 Matlab 的点

  1. Matlab 创建RGB图像,

    Rgbs = ones(h,w,3,n,'uint8');
    

    否则默认 double会出问题。

  2. A(A==x)=X; %将A中等于x的值全部替换为X
    A(isnan(A))=X;%将A中等于nan的值全部替换为X
    length(find(a>20&a<30)) %满足大于10小于20的所有数据的个数
    
  3. Matlab 运行 .m 文件注意当前文件目录

  4. 在使用 fill_depth_colorization.m 的时候

    在运行68、78左右行的时候碰到了报错:

    MATLAB中 错误使用 * 整数只能与相同类的整数或标量双精度值组合使用

    mgv = min((gvals(1:nWin)-curVal).^2);
    gvals(1:nWin) = exp(-(gvals(1:nWin)-curVal).^2/csig);
    

    如下,强制转换成 double类型就行

    mgv = min((gvals(1:nWin)-double(curVal)).^2);
    gvals(1:nWin) = exp(-(gvals(1:nWin)-double(curVal)).^2/csig);
    
  5. 查找在 imgDepthAbs 中,除了 取值为 0 和 10 以外值的最大值。

    imgIsNoise = imgDepthAbs == 0 | imgDepthAbs == 10;
    maxDepthObs = max(imgDepthAbs(~imgIsNoise));
    

三、关于 Ubantu 的点

  1. cmake,make,make install 的流程

    cd [path-to-pangolin] 
    mkdir build 
    cd build 
    cmake .. 
    make  
    sudo make install  
    
  2. 查看opencv4版本

    pkg-config --modversion opencv4
    4.5.3
    
  3. Usr/local/include 里面含有make install 的 例如 opencv4 ceres pangolin

  4. 很多时候在 Ubantu 20.4 中用网上的一些命令安装库不行,因为它可能被更新了,名字需要改一下。

    sudo apt-get install libflann1.8 libflann-dev 报错找不到

    所以改成

    sudo apt-get install libflann1.9 libflann-dev

  5. 配置 Github ssh

    git config --global user.name [name]
    git config --global user.email [email]
    git config --global github.token [password]
    
  6. Github git clone private repository 不能用 https 只能用ssh

  7. # GPU 使用情况
    nvidia-smi     #可以看到 CUDA Version:11.2
    
  8. 通过 os 指定哪张 GPU,比如下面的代码指定第 4 张 GPU

     os.environ[ 'CUDA_VISIBLD_EVICES'] = '4'
    
  9. 训练时在服务器中用tmux训练,避免网络波动影响

    https://blog.csdn.net/mseaspring/article/details/122264470

```shell
#vim
不想按ESC键,想快速从编辑模式切换到普通模式,有没有其它简便办法可以做到? 
Ctrl+ [ 
用Ctrl+o可以切换回去,但是只能执行一条命令

:q #退出(这是:quit的缩写)
:q! #不保存退出(这是:quit!的缩写)
:wq #写入文件并退出(这是:writequit的缩写)
:wq! #如果文件只有读权限)写入并退出;(如果文件没有写权限,强制写)


# 删除目录下所有文件夹和文件
#使用
# -r 就是向下递归,不管有多少级目录,一并删除
# -f 就是直接强行删除,不作任何提示的意思
rm -rf 目录名字

#rm 不带参数 只能删除文件
rm test.txt

mkdir /usr/java #创建文件夹
touch myid #创建myid文件




# 用mv命令将文件移动到某个目录
mv Anaconda3-2021.11-Linux-x86_64.sh  ./myPackages

#编辑之后使环境变量生效的命令:
source ~/.bashrc


# conda 虚拟环境相关
# 创建一个名为 Stereo ,python 版本为 3.7 的 conda 环境
conda create -n Stereo python=3.7
# 激活虚拟环境
conda activate Stereo

# 关闭当前虚拟环境
conda deactivate

# conda 安装第三方库
conda install pytorch=1.6.0 torchvision=0.7.0 cudatoolkit=10.2 -c pytorch

# conda 卸载库
# conda uninstall xxx   //卸载xxx包
conda uninstall pytorch

# 删除环境:
# 使用命令conda remove -n your_env_name(虚拟环境名称) --all, 即可删除。
conda remove -n Stereo --all

# 删除虚拟环境中的包:
# 使用命令conda remove --name $your_env_name  $package_name(包名) 即可。

# conda list:查看安装了哪些包。
# conda env list 或 conda info -e:查看当前存在哪些虚拟环境
# conda update conda:检查更新当前conda
```
  1. #Git cmd 切换到 D 盘 
    D:#可以
    d:#也可以
    # 接下来还是要 cd ,但是路径就是 Windows 下的路径
    

在这里插入图片描述

在这里插入图片描述

图4. Git CMD 2

四、相关资源

  1. OpenCV 双目校正

    https://blog.csdn.net/qq_15751687/article/details/117886678

  2. tmux训练,避免网络波动影响

    https://blog.csdn.net/mseaspring/article/details/122264470

  3. SGM 的代码

    git clone git://github.com/ethan-li-coding/SemiGlobalMatching.git

    最小 disparity 8

相关文章:

  • 三维计算机图形学 孔令德等著 读书笔记
  • Python next(df.dropna().tail(1).iterrows()) 为啥不报错
  • 金旭亮著作斟误表及未来写作计划
  • 分辨率概念
  • 更开放,更互联
  • PyTorch nn.Linear学习记录
  • 《荒漠甘泉》4月16日
  • LeetCode 146 LRU Cache
  • 又一个加班的生日
  • 原始 NeRF 论文主要点细致介绍
  • 关于AOP的学习过程简单总结
  • 英语词典缩略词
  • SQL 2008 T-Prep 上课心得(二)
  • conda虚拟环境指定python版本出错
  • 浅谈 自定义Vista启动管理项
  • 分享一款快速APP功能测试工具
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Android开源项目规范总结
  • docker python 配置
  • ES10 特性的完整指南
  • Java,console输出实时的转向GUI textbox
  • Node项目之评分系统(二)- 数据库设计
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • spring boot下thymeleaf全局静态变量配置
  • 排序(1):冒泡排序
  • 事件委托的小应用
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一起参Ember.js讨论、问答社区。
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 原生 js 实现移动端 Touch 滑动反弹
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​业务双活的数据切换思路设计(下)
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #100天计划# 2013年9月29日
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)http协议
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 5种线程安全集合
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET/C# 使用反射注册事件
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET轻量级ORM组件Dapper葵花宝典
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • [4.9福建四校联考]
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子