毕业设计总结
一、组会记录
-
如图1所示,理论上 A 曲线下降的应该会比 B 更明显才对,但是没有。
考虑可能与 learning rate 有关系,可能需要将其调大。因为模型 A 可能陷入一个局部极小值了。
-
模型的 Pytorch 代码中,一些该 detach 的地方没有 detach,会导致网络不收敛。
-
本文方法与其他方法做对比实验的时候,它们训练 epoch 数目不一定要相同,因为网络参数数量不同,我们只需要将网络训练到收敛即可。
-
cascade 的模式:先训练网络的上游部分,然后固定住被训练的部分,再训练下游部分。
-
看模型效果,需要看那些有物理意义的东西,比如说视差图,因为可以和 GT 视差图直观地对比。而不看 Loss 的数值。
-
在深度补全的 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
-
在利用梯度下降法基于等深度约束优化 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=1∑hu=1∑wev,u2ev,u=dv,upredict−dv,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=1∑hu=1∑wdv,u2+21v=1∑hu=1∑wev,u2
-
在上面第 6 点中,可以通过计算 Cost 函数的 Jacobian 矩阵的秩退出它们有几个变量是不独立的。
-
拍数据集的时候,不要露出中文(标志性的),不拍树、不拍花。布的 reflection 不好, noise 很大,布玩具不好。拍木头、花坛、雕塑、瓷器、花盆、车还有一些油漆过的材料。
-
做 Multi View Stereo 背景不好恢复,因为 view 变化太小了。
深度相机要放置于 1 米开外。
拍整个场景,让相机动起来。
不在乎背景,只考虑前景。
背景要变换。
可以连续拍多张,对图像做平滑(比如平均)。可以换灯光。
加噪声,对光源加噪声,而不是对图像上加。
-
如图 2 所示,用 NYU 提供的 工具包中的 经典的双边滤波算法补全后的深度图左侧会有一条黑色竖纹。这是因为操作前的深度图在黑色竖纹的位置本身就没有数据。双边滤波补全深度算法是利用四周的深度去补充中间位置的深度,但是最左侧的四周缺失了信息,所以双边滤波算法也补充不了深度。
一种思路:对深度图加一个 mask 矩阵,即深度可信的位置在 mask 矩阵中的值为 1,反之为 0。如何找出这个竖纹处的位置呢?可以考虑这样做:找到图像中最的包含了左上角位置(0,0)的连通区域。
二、关于 Matlab 的点
-
Matlab 创建RGB图像,
Rgbs = ones(h,w,3,n,'uint8');
否则默认 double会出问题。
-
A(A==x)=X; %将A中等于x的值全部替换为X A(isnan(A))=X;%将A中等于nan的值全部替换为X length(find(a>20&a<30)) %满足大于10小于20的所有数据的个数
-
Matlab 运行 .m 文件注意当前文件目录
-
在使用 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);
-
查找在 imgDepthAbs 中,除了 取值为 0 和 10 以外值的最大值。
imgIsNoise = imgDepthAbs == 0 | imgDepthAbs == 10; maxDepthObs = max(imgDepthAbs(~imgIsNoise));
三、关于 Ubantu 的点
-
cmake,make,make install 的流程
cd [path-to-pangolin] mkdir build cd build cmake .. make sudo make install
-
查看opencv4版本
pkg-config --modversion opencv4 4.5.3
-
Usr/local/include 里面含有make install 的 例如 opencv4 ceres pangolin
-
很多时候在 Ubantu 20.4 中用网上的一些命令安装库不行,因为它可能被更新了,名字需要改一下。
sudo apt-get install libflann1.8 libflann-dev 报错找不到
所以改成
sudo apt-get install libflann1.9 libflann-dev
-
配置 Github ssh
git config --global user.name [name] git config --global user.email [email] git config --global github.token [password]
-
Github git clone private repository 不能用 https 只能用ssh
-
# GPU 使用情况 nvidia-smi #可以看到 CUDA Version:11.2
-
通过 os 指定哪张 GPU,比如下面的代码指定第 4 张 GPU
os.environ[ 'CUDA_VISIBLD_EVICES'] = '4'
-
训练时在服务器中用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
```
-
#Git cmd 切换到 D 盘 D:#可以 d:#也可以 # 接下来还是要 cd ,但是路径就是 Windows 下的路径
四、相关资源
-
OpenCV 双目校正
https://blog.csdn.net/qq_15751687/article/details/117886678
-
tmux训练,避免网络波动影响
https://blog.csdn.net/mseaspring/article/details/122264470
-
SGM 的代码
git clone git://github.com/ethan-li-coding/SemiGlobalMatching.git
最小 disparity 8