基于深度网络的内窥镜定位算法研究
考研的事情终究需要放下,是时候做回原来喜欢的方向了,特意选了跟深度学习有关的东西,然后有意思的事情开始了。
实验的开始
选了之后才知道坑的大,不仅需要用到深度学习的知识,传统的计算机视觉知识也必须要学习。
数据集准备与多视角几何—SFM
-
视频序列数据库(室内外)传送门
-
#openmvg放弃使用(c++)
#基于win版配置个opencv https://www.cnblogs.com/zangdalei/p/5339316.html
#注意个vs版本的对应,还有就是区分一次性和永久性添加库的问题!!!
#安装编译加上openmvg!! https://blog.csdn.net/weixin_42866551/article/details/83508154
#https://segmentfault.com/a/1190000007632252?utm_source=tag-newest
#openmvg使用手册 https://openmvg.readthedocs.io/en/latest/
#openmvg使用事例 https://blog.csdn.net/baidu_40840693/article/details/84777589
#基于ubuntu的 官方安装文件(install的时候需要超级权限) #https://github.com/openMVG/openMVG/blob/master/BUILD.md#linux -
相机内参矩阵 基础矩阵 本质矩阵 https://blog.csdn.net/weixin_41284198/article/details/81183804
-
基于matlab的SFM
https://www.mathworks.com/help/vision/examples/structure-from-motion-from-multiple-views.html# -
刚性配准:通过平移和旋转的变换去对图像进行配准
-
毫米焦距和像素焦距的转换,所以resize之后再进行SFM,其内参矩阵是不一样的 https://blog.csdn.net/u012750702/article/details/73201329
-
Bundle adjustment https://www.cnblogs.com/Jessica-jie/p/7739775.html
-
坐标转换:
像素坐标 = 内参矩阵 X 外参矩阵 X 世界坐标
相机坐标 = 外参矩阵 X 世界坐标
外参矩阵 = [(旋转矩阵,平移向量)]^(-1)
旋转矩阵为3X3的矩阵
网络及其相关要点分析
- 神经网络关于图片的输入是有要求的,不仅会对训练速度有所提升,而且对于某些有全连接层的网络,图片的输入还是固定的 https://blog.csdn.net/Tomxiaodai/article/details/82146376
思路解读
- 预处理:计算投影矩阵,计算投影在经过剪裁后得到的mask上面的合理点,剩余的点就会被排除掉,然后计算剩下的点对应的图片
- 深度成像原理:用opencv的applyColorMap将训练得到的像素(张量转换为数组arry)进行热成像转换。
- 评估部分:原实验是使用重建的点云和来自CT的网格模型进行刚性配准,他们的残差值很低,来说明他们的准确性,以此说明他们基于这个重建点云而得到的深度估计图是准确的。(所以该算法是基于SFM去设计的,所以场景变化较大的图像是不能使用的)。同时该算法还利用之前的一个单目视频序列深度估计的算法进行残差比较(https://github.com/tinghuiz/SfMLearner) ,这个算法也是进行了云点重建的,作者将这两个算法的SFM点云也进行与CT网格模型的比较,从而证明自己的算法较优。
代码调试
学会看报错是非常重要的一个技能,不要病急乱投医!!!
- RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 1. Got 37 and 1 in dimension 2—— 代码中存在多通道的图像或者是单通道的,搬个脚本试试,还有原本mask是单通道的,我的是单通道的,改改!!搬运的脚本 https://blog.csdn.net/ZHAGNQ/article/details/89344116 ——结果并不是的 https://www.jianshu.com/p/9e866d02ddbd ,这个bug有两个原因的,另一个就是图片的size和网络要求的不一样,那就在代码中写死呗,然后就没问题了,另外我的mask是4通道的,问题不大哈哈哈。
期中总结
兜兜转转还是电脑配置的问题,换上泰坦xp,train起来了,还有就是pytorch版本的问题,最新的是1.0.1,这会造成内存分配的问题,感谢 https://blog.csdn.net/pursuit_zhangyu/article/details/88717635
这个帖子的经历,将pytorch版本降低回0.4就好了
另外可以参考 https://github.com/XPFly1989/FCRN 上的代码,这是基础版,将来将其版本升级!!
训练了46个周期后的对比图(一共是50个还没完的,做个纪念)
实验终期
在实验调试代码期间,主要遇到了有的变量为空值,导致一直报错,先是以为路径出了问题(绝对路径相对路径),然而并不是,追寻很久发现是有的变量在到了某个函数的时候,代码设置了其他的条件函数,导致变量置零了。运行demo可得以下的结果,后续的结果调试,优化将继续进行。
- 训练初步调试出来结果(只有30多张图进行训练,后续仍需要加大数据集)
- 改用自己的数据集(60张),修改报错后没问题了(剪裁的区域还要改下),然后就是剩下增加数据集(降低loss)以及效果评估这两个问题了。在本次的效果看来,远近判决的问题好多了,但是细节效果有待观察,还有Loss函数收敛的问题。后续改进:网络的修改,emmmmm慢慢看看,毕设最终可以暂时落下帷幕了。
附:各种指令小技巧和心得
-
spyder上运行附加参数在路径后面加入args = ‘参数1,[参数,]’,如下
runfile('/home/1/tensor2tensor/tensor2tensor/bin/t2t-datagen', args='--problem=image_mnist --data_dir=~/t2t_data --tmp_dir=~/t2t_data/tmp',wdir='/home/1/tensor2tensor/tensor2tensor/bin')
-
使用sudo apt-get install安装的时候报错了,先是要检查环境库的好好用的指令 dpkg -l | grep 后面机上库的名字 一般都是lib+名字,然后发现是安装好了,不然一般都是可以安装的( ⊙ o ⊙ )!
-
真是被opencv搞死了,这b东西很吃环境的,还好conda的环境管理还是方便的,最重要的是要先把原先的opencv先卸载干净,再用pip去安装(卸载也用pip)这里的原因分析是因为自己以前不小心装了python36相当于退了环境,再装python37就会造成环境混乱,对opencv造成了影响,所以要用pip针对全环境去安装opencv才可以!!!!!
-
安装显卡驱动
configuring ttf-mscorefonts-installer
摁下tap就好了 -
E:Could not get lock /var/lib/dpkg/lock-frontend - open锁资源`````有毒
https://blog.csdn.net/davincdada/article/details/86676765 -
总有奇奇怪怪的库系没源的孤儿````packages.ubuntu直接下载
https://packages.ubuntu.com/xenial/libpng16-16 -
conda更新莫名其妙就崩了还是要经常检查更新噢(清华源不能用了)
https://blog.csdn.net/Msjiangmei/article/details/90610153 -
没内存了可以倒到垃圾
sudo rm -rf ~/.local/share/Trash/*
-
再用
conda uninstall
去卸载一个库的时候,发现安装找不到这个package,再channel中发现是pipy,所以这个库是用pip装在相应的环境当中的,所以要用pip uninstall
-
截图工具 https://linux.cn/article-10070-1.html
-
视频抽帧
ffmpeg -i re1.avi -r 20 -ss 00:00:00 -t 00:00:26 %08d.jpg
-
再使用到yaml的库时候遇到这样的情况了 关于loader https://blog.csdn.net/rp517045939/article/details/88838417