的个人主页 http://faculty.dlut.edu.cn/yexinchen/zh_CN/index.htm
研究领域——场景深度信息估计
研究组的其中一个研究方向主要是围绕如何获取更加准确的场景距离信息,将获取到的二维平面图像三维化。关键问题在于,如何准确的获取或者估计出当前给定场景的深度信息(depth information)。
从硬件方面来看,场景深度信息的获取可以分为两个方面:1)被动方式,即立体匹配,采用双目立体相机(两个摄像头并排摆放来模拟人类双眼)作为采集设备,然后利用立体匹配算法计算出双目视差,进而估算出深度值。2)主动方法,即利用深度传感器来直接获取深度值。最笨最早的方法采用激光煮点扫描的形式来获取距离(激光测距尺就是这种原理)。目前,典型的传感器有两类,一类叫做Time-of-flight(时间飞行)相机,另一类就是微软Kinect一代里面采用的结构光相机。(原理参考相关文献)
上述两类方法虽然可以获取深度值,但是由于算法和硬件带来的问题,深度图像有大量得值缺失,而且精度不够。因此衍生出了第一类算法:深度超分辨率(深度复原,深度恢复,深度填充等),这也是我们所涉及的第一个块知识,即给定一个低质量的深度图像,如何复原出高质量深度图像。通常,给定的输入除了低质量分辨率的深度图外,还有同视角的彩色图像,可以借助于高分辨率的彩色图像来完成深度恢复。
第二类方法叫做深度估计此。这类方法直接从彩色图估计出深度图像,没有辅助的低质量深度信息输入,任务对于推断精准的深度信息比较困难。此外,由于深度学习的出现,现阶段出现了另外几类的深度估计方法,根据输入图像类型以及监督学习方式可以分为以下几类:
1) 单目监督学习方式:即给定单目摄像头进行视频流采集,然后直接从彩色图中估算出深度图。该方法需要利用配对的彩色-深度图像进行网络监督学习。
2) 双目输入类型:该类别采用双目图像输入,根据监督类型又可分为以下两类:
a) 监督方式:我们可以获得配对的深度图像,可以采用双目输入,深度输出的方式来训练当前的网络。
b) 无监督方式,当前并不能获取到有效的深度监督信息,则利用双目立体视觉间的关系来训练整个网络,即采用无监督的方式。此类方法更加贴近于实际,现在研究的较多。
以上内容需要大家逐渐掌握,从看下面的基础材料开始,慢慢步入到看论文。一个最主要的方法是自己查阅博客和去中国知网下载相关的中文博硕士论文,以便更好的理解。
相关材料
以下内容可能涉及的不全(重点针对相机标定和立体匹配,投影等等三维知识,也是基础必读!!我们最终目的是懂得双目立体视觉,涉及过深的数学算法可以不看),所以针对上述内容还需各位自行去查阅:
1.重点推荐《学习OPENCV3》这本书里的第18章 相机模型与标定 553 第19章 投影与三维视觉 599,中文讲的非常好,也可以用opencv来练习,之前的版本也行,网上应该能找到。
2. 我的博士毕业论文:(caj格式可以到cnki官网下载软件打开) 链接:https://pan.baidu.com/s/16__qAOxKCCBiZcvkhq_Txw 提取码:yhdc)注:我的博士论文是传统的数学建模方法,但是也需要大家去理解是怎么做的,看明白里边的算法(只看绪论和自回归模型那一章节即可)
3. 张明亮的博士论文:重点讲解深度估计,可以以这个方向为重点。
4. 段祥越的硕士论文,里面包含了深度估计和深度复原。
5. 纪祥的硕士论文,里面包含了SLAM和深度学习的结合,难一些。(可以选读,对三维场景建模可以了解一些)
6. http://www.vision.caltech.edu/bouguetj/calib_doc/
上面这个是matlab的相机标定例子,里面讲的非常好,他是从opencv转过来的,但是比opencv更好。如果希望去学习matlab的同学可以试试,matlab还是比较好用的。
7. 以下内容可以有选择性学习:
计算器视觉(理论):
链接:https://pan.baidu.com/s/1UAbfgT7_FNmwSu5S5MzcTw
提取码:8h6x
(目录:1.绪论2.边缘检测3.仿射变换与射影变换4.相机标定5.立体视觉6.运动与不确定性7.光流运动分析)
博洛尼亚大学立体视觉pdf:
链接:https://pan.baidu.com/s/10MQJhYRT4wfF388t87J6Kg
提取码:kh2i
(英文pdf,专门讲解立体视觉,可以配合下面的内容辅助学习:
立体匹配的研究背景,意义:
https://blog.csdn.net/wangyaninglm/article/details/51533549
视差,约束,方法,遮挡:
https://blog.csdn.net/wangyaninglm/article/details/51531333
相机模型与标定:
https://www.jianshu.com/p/887dd060ea99
双目标定与立体匹配:
https://www.jianshu.com/p/6342eb4d9a63
(一些双目和立体匹配问题的博客列表)
https://blog.csdn.net/u010368556/category_6746705.html
(双目匹配与视差计算)
https://blog.csdn.net/u010025211/article/details/53197337
(双目视觉标定的几个问题)
https://blog.csdn.net/u010368556/article/details/57074680
关于立体匹配的几个问题:
链接:https://pan.baidu.com/s/1Y_qikW0xW9m8PING6gQuZw
提取码:1qxi
作为欲以计算机视觉和深度学习为学习核心的本科生,事先要自行学习这方面的知识,尽可能掌握基础知识。如果可能,还可以参与科研项目和发表科研论文。以下为如何最快掌握基本知识,以便达到可以进入实验室和老师一起做科研的要求。
拟学习的知识主要分为三个方面:
1) 编程能力。主要三种语言:matlab,python,C/C++。这三种语言里,matlab最简单,而且非常的好用;缺点是matlab不开源,主要以科研为主,不适合找工作。C/C++ 大家在平时的课程中会学习到。Python为目前的主流编程语言,也很简单,无论科研还是工程上用的都很多。针对编程能力(主要是python),需要学生自行去锻炼。
2) 图像处理及计算机视觉方面:需要大家提前掌握一定的基础。推荐一些快速入门的方法:(1)首推opencv,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。可以尝试同时用python接口来锻炼python语言。比如,《OpenCV3 编程入门》,图像处理方面讲的很棒,大家可以利用这本书来学习图像处理基础知识(学习opencv3也可以)。目前opencv更新到了4.5,所以也可以购买新的书籍跟着去学,其中包含图像的基本概念,图像的基本操作,直方图和灰度变换,图像平滑,相机标定等。(2)基于matlab的图像处理:《冈萨雷斯 数字图像处理(matlab版)》(重点前两章节,matlab的精髓以及图像基础都包含了,其他章节一般。感兴趣的可以看看)。
3) 机器学习和深度学习。机器学习是一门基础学科,是基础,所以也需要大家了解一些。深度学习是我们学习最终的目的。
针对机器学习,一定要看 Ng Andrew 的网课,大家自行去寻找,看看前几章就行了,有英文字幕,有课后作业。这个一定要看,讲的非常浅显好懂,而且够用! 如果想从python入手的话,推荐一本《机器学习实战》,看第1.2.5.6.8这几个最简单的章节就好了,别的太难不用看。
深度学习方面(重要)。最终我们就是选择某一种深度学习框架(就是别人开发好的工具)来完成科研: Pytorch (http://product.dangdang.com/25208778.html),这是目前主流的学习框架,需要非常有工程功底的,对代码不抵触的。推荐从Pytorch 学起(推荐材料:深度学习框架PyTorch入门玉实践)。
1)NG Andrew 的深度学习网课(https://mooc.study.163.com/smartSpec/detail/1001319001.htm,他同时有机器学习和深度学习的课程,有很多材料,自行去搜索),非常好,还有练习题,基于python的,可以通过这个掌握深度学习,在此之后就可以选择一个深度学习框架进行学习了。
2)Bilibili上台湾名师李宏毅的机器学习教程。这个老师讲的非常好,也是首推的,强烈推荐大家去看看,github上还能查到许多他的课程相应的材料。
3)可以参照“其他”栏目里的“组内学生从零深度学习”,这是研究生在学习过程中提供的一些材料,也可以作为参考。
基本完成以上内容,而且自己学着去用用深度学习框架,对计算机视觉和深度学习有初步掌握了(自己去查博客上网,很多地方都有讲深度学习的),再跟我去做一些科研相关的东西。如果做到跟深度学习相关的知识,想把控一下方向,可以提前来找我。(所有前面有关计算机视觉和图像处理,机器学习相关的都是些基础的东西,不要求全部掌握,做到心里有个大概的感觉其实就好了)
1.视频课可以看吴恩达,最基础,了解基础概念和神经网络前向传播和反向传播基本流程,速刷到150,中途一些访谈可跳过
https://www.bilibili.com/video/BV1FT4y1E74V/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=6698ac0eaa103e5eaf81464124c40600
如果觉得英语吃力可以看李沐的《动手学深度学习》,看到卷积神经网络
http://zh.gluon.ai/chapter_how-to-use/how-to-use.html
基础:理论,不动手 反复看
2.Python完全不会 (输入输出都不会)可以看廖雪峰,看到面向对象编程即可
https://www.liaoxuefeng.com/wiki/1016959663602400
3.代码方面可以直接看李沐《动手学深度学习》中附带的pytorch版本代码(基于python的深度学习框架)
优点:代码好找,好调试,结果直观
缺点:自带一个d2l库需要下载,大幅度省略了对图片的预处理过程和运行网络所需的一些对象,不容易完全理解完整的代码思路
做猫狗识别的任务可以去kaggle官网下竞赛cat vs dog数据集,去csdn搜索 pytorch版本的Resnet18网络结构看别人的代码,搞懂代码意思就行
优点:可以搜索到从数据预处理开始写的代码,搞懂后改网络结构不会觉得特别难
缺点:很容易跑出bug
4.软件安装
如果笔记本有显卡可以搜索cuda安装anaconda和pytorch跑代码,如果没有显卡也能用cpu跑不过不太推荐,环境搭建在csdn上搜索教程即可,注意版本号对应
5.书
《神经网络和深度学习》,直接看深度学习部分,机器学习部分可以跳过,可以和视频互补着看 选择性不看,书一般都比较晦涩,适合有了一定基础的时候再看。
有关三维学习的学习方式:
1)首先可以从“实验室核心方向”了解一下简单的深度估计概念。
2)然后,我们可以通过同时定位与构图(SLAM)这个应用学习基础。
3)重点推荐两本书:视觉SLAM十四讲从理论到实践,自动驾驶与机器人中的SLAM技术:从理论到实践(自己去下载电子版)。
4)学习方法可参考我下面的读书笔记: