动态场景下基于实例分割的SLAM(毕业设计开题及语义分割部分)
言不及义
形容山水风景优美动态场景下基于实例分割的SLAM(毕业论⽂设计思路及流⽔)
前⾔
今年选了个⽐较难的毕设题⽬,这⾥记录⼀下⾃⼰思路和流程,为之后的学弟学妹(划掉)铺个⽅向。会按⽇期不定期的更新。
⼀、开题
2019.12.24
考研前选择课题是:利⽤深度学习对连续帧场景进⾏深度估计,辅助SLAM进⾏快速初始化,但是下午查了半天资料,遗憾的发现貌似现在深度估计技术并不能提供很准确的深度图,⽽SLAM是对数字精度要求很⾼,是⼀种严格的⼏何关系推断,因此这个课题不具有可⾏性,遗憾,不过看了⼀下午的深度估计,貌似很有意思,特别是相对深度估计(Single-Image Depth Perception in the Wild这篇⽂章),⽆监督估计(monodepth 、 sfmlearner)让我眼界⼤开,考虑是不是转这个⽅向做做?
2019.12.25
消防疏散演练总结
和⽼师聊了聊,现在有三个⽅向:第⼀个是昨天的深度估计,第⼆是利⽤语义分割辅助动态场景下SLAM,第三个是利⽤SLAM辅助语义分割。最终还是定下来是选择第⼆个⽅向。毕竟虽然对第⼀个课题感兴趣,但是深度学习这个东西吧太⽞学了,⼜要⽤⼤量的计算资源,能避开就避开吧。⽽语义分割毕竟怎么说,Mask R cnn⽤了8GPU跑了2天迭代16万次才弄完,惹不起惹不起。⽼师建议我如果有可能的话可以做⼀个速度估计,⼤概就是做室外的SLAM,对运动的车辆、⾏⼈做个识别(语义分割),⾏⼈直接剔除完事,车辆的话做个速度估计就好
天真的我当时还没觉得做速度估计有啥,回去查了下资料。本来想了想,是不是可以⽤车牌轮廓,线特征⾯特征做个⼏何分析?但是后⾯打开KITTI⽤右键过了两个序列,发现由于车体有可能拐弯,遮挡,有点难弄,估计也是不⾏的。现在主流速度估计⽤的还是IMU惯导那⼀套,或者就是光流,我本来打算⽤光流算了,但是总感觉哪⾥不对,就跑过去⼜和⽼师聊了聊。果然,⽼师说光流第⼀计算太⼤(稠密光流)第⼆效果也是很差,如果不和深度结合基本没法看。我很诧异,因为我⼀直以为光流法很快的,毕竟⼤疆啥的不都⽤的光流吗?后来才被教育到那时稀疏光流,本质上和特征点没啥差别,但是稀疏光流必须要求帧和帧之间间隔很⼩,像KITTI这样肯定不⾏的,所以还是要回到特征点或者特征线的⽼路上,但是这样速度估计就变成了矩阵转换,额,有点困难啊啊啊啊。算了到时候再说吧。
2019.12.26
环创图片写开题报告,打字好累啊。
顺便看了下⽂献,这⾥把要看的⽂章列⼀下:
1. 实例分割: Faster R-CNN – FCN – Mask R cnn-- YOLACT
2. 语义slam:建议在orbslam2基础上修改 --参考DynaSLAM: Tracking, Mapping and Inpainting in Dynamic Scenes
3. 利⽤相对位姿求取速度模型;速度–相对相机⽅向的速度标量
4. 张慧娟, ⽅灶军, 杨桂林. 动态环境下基于线特征的 RGB-D 视觉⾥程计[J]. 机器⼈, 2018, 40(5): 1-8.
5. 基于深度学习的动态场景语义SLAM
然后是综述类⽂章:
1. Understanding Deep Learning Techniques for Image Segmentation(语义分割)
2. Deep Semantic Segmentation of Natural and Medical Images: A Review(同上)
3. Visual SLAM and Structure from Motion in Dynamic Environments: A Survey (动态场景下的SLAM)
不知道什么时候能看完…
⼆、语义分割研究阶段
2019.12.28
读FAST-R-CNN论⽂。
因为FAST-R-CNN是在R-CNN基础上改进的,所以⼜滚去查R-CNN的内容;然后⼜涉及到SPPnet,所以⼜去看这个⽂章。本来想做个笔记的,但是⽹上有更好的,就不献丑了。
其实之前我⼀直有误解,我以为卷积必须定尺⼨的,今天看⽂章才知道原来卷积其实变尺⼨的,毕竟卷积核啥的都是定尺⼨的,和整幅图像⽆关,真正⿇烦的是后⾯的全连接层,所以SPPnet采⽤图像⾦字塔提出定尺⼨的特征向量,解决了这个问题。
但是SPPnet⽹络有⼀个问题没有看懂:”SPP-Net 很难通过fine-tuning对SPP-layer之前的⽹络进⾏参数微调 “(出⾃FAST-R-CNN论⽂解释)怎么理解?原⽂解释为:
“SPP layer is highly inefficient when each training sample (i.e. RoI) comes from a different image, which is exactly how R-CNN and SPPnet networks are trained. The inefficiency stems from the fact that each RoI may have a very large receptive field, often spanning the entire input image. Since the forward pass must process the entire receptive field, the training inputs are large (often the entire image)”
⼤概解释是:反向传播需要计算每⼀个RoI感受野的卷积层梯度,通常所有RoI会覆盖整个图像,如果⽤RoI-centric sampling⽅式会由于计算too much整幅图像梯度⽽变得⼜慢⼜耗内存 。
写着写着我好像有点明⽩了,意思是ROI数量达到了2K,每个都做反向传播太多了,貌似是这个意思。
另⼀点不解的就是这段:
In Fast R-CNN training, stochastic gradient descent (SGD) mini-batches are sampled hierarchically, first by sampling N images and then by sampling R/N RoIs from each image. Critically, RoIs from the same image share computation and memory in the forward and backward pass. Making N small decreas mini-batch computation.
主要他没有说R代表什么,R/N代表什么,为什么同⼀张图⽚可以共享内存的计算,为什么能减⼩N?
后来⽹上找到了答案:N和R分别代表,N张图⽚和从N张图⽚中选取的R个候选框 ,这R个候选框可以复⽤N张图⽚前5个阶段的⽹络特征。
2019.12.29
代价函数中smooth函数除了靠近0的地⽅⽤了l2范数,其余都⽤l1范数,就是不太清楚0.5怎么来的,回头问问⽼师,总不会⼜是经验值或者超参吧?
The lower threshold of 0.1 appears to act as a heuristic for hard example mining
这⼀段是Mini-batch sampling 部分选择训练时的ROI区域正负样本框的时候的⼀句话,作者把IoU在[0.1,0.5)范围内的ROI作为负样本,但是说ROI在0.1以下的部分不能使⽤,难道是过⼩的ROI会使整个训练跑偏?有点没看懂。
还有就是选择框和密集框,我的理解是选择框是FAST-R-CNN使⽤卷积策略选择的特征框,⽽密集框是传统R-CNN使⽤的那种4.5K的。不知道⾃⼰理解的有没有问题。
2019.12.30
惊天⼤雷!
今天去和⽼师沟通了⼀下,发现犯了⼀个错误(严格来说也不全是我的错吧)。之前的语义分割思路有些问题,对于MASK-R-CNN这类型的,虽然可能是实例分割,但是他是不区分前景和背景(⽐如天空),是单独将物体从背景中分割出来的。从原理上来说,这种实例分割的思路是先进⾏⼀个⽬标检测,再在⽬标检测的基础上进⾏语义分割,但是对于天空等⼀些⽐较独特的区域很少有⼈去做这种⽬标检测。所以另⼀种思路是FCN这种,即直接语义分割,然后在语义分割的结果上对每个像素进⾏聚类。虽然吧,我觉得问题不是太⼤,但是⽼师说最好⽤FCN bad的⽹络。
顺便⽼师也回答了我之前的⼏个问题:1. 那个smooth函数的0.5可能是⼯程结果,如果直接⽤1的话,可能绝⼤部分数字都落在了1以内,这样就没有意义了。2. ROI在0.1以下由于完全没有意义,不能提⾼训练的精度,最好的负样本应该是和⽬标有交集但是完全推测出整体的部分,⽐如⼈的⼀双鞋。3. 奇异值分解要求U、V正交,但是不⼀定⽅阵,详见数值计算这本书。
另外就是SPPnet这类变尺⼨的图像输⼊的问题,沈⽼师没有了解过,但是理论上来说我现在做的这个项⽬并不是太需要这个功能,原来我想KITTI的图像相当长,不符合⼀般的图像输⼊,如果直接处理可能会变形,但是⽼师解释道,KITTI数据集之所以长,是因为所使⽤的的相机采集图像的时候是隔⾏扫描的⽅式的,⾏与⾏之间曝光时间有⼀定的偏差。为了避免这种偏差,最终数据集将奇数⾏或者偶数⾏抽掉了,因此显得⽐较宽。所以,可以直接对KITTI数据集的图⽚进⾏线性插值运算,影响不⼤。
后来⽼师⼜提出⼀个思路,就是将FCN的前后景分割和MaskRCNN的物体分割结合起来,毕竟FCN的精细程度并不是这么⾼。不过这个任务就交给⼩学弟吧,毕竟还有SLAM这个⼤坑呢。
明天开始看FCN。(但实际上隔了超长时间)
2020.1.3
前⼏天复习备考+元旦出去玩,没来及看,今天抓紧补上。
in which each pixel is labeled with the class of its enclosing object
or region, but with short-comings that this work address.
最后⼀句话没找到合适的翻译,我的理解是 “这项⼯作仍然有存在⼀些缺点”
Patchwi:⼀个术语,介于像素级别和图像级别的区域,也就是块,每个patch都是由好多个pixel组成的 。
3.1. Adapting classifiers for den prediction 这⼀节有很多都看不懂:
另外从⽂章中貌似知道了FCN这类全景卷积⼤概叫做Den prediction吧,回去搜搜,不太确定。
The spatial output maps of the convolutionalized models make them a
natural choice for den problems like mantic gmentation. With
ground truth available at every output cell, both the forward and
backward pass are straightforward, and both take advantage of the
inherent computational efficiency (and aggressive optimization) of
convolution. The corresponding backward times for the AlexNet example
are 2.4 ms for a single image and 37 ms for a fully convolutional 10 ×
10 output map, resulting in a speedup similar to that of the forward
pass.
这⼀块没有看懂,正推法和逆推法指的什么?
This coarns the output of a fully convolutional version of the
新眼保健操nets, reducing it from the size of the input by a factor equal to the
pixel stride of the receptive fields of the output units.
⼤概就是最后⼀步你把⽹络化为7x7,然后直接⽤7x7的滤波器卷积,不过为什么就变得粗糙了…emm,没懂。
我要吐⾎了,这个表述我换了中⽂都反复看⼗⼏遍还有点疑惑。
random lection of patches within an image may be recovered simply.
Restricting the loss to a randomly sampled subt of its spatial terms
(or, equivalently applying a DropConnect mask [36] between the output
and the loss) excludes patches from the gradient computation.
中⽂:
在⼀张图⽚中随机选择patches可能更容易被重新找到。限制基于它的空间位置随机取样⼦集产⽣的损失(或者可以说应⽤输⼊和输出之间的DropConnect
mask )排除来⾃梯度计算的patches。
我不能理解的地⽅在于为什么会可能更容易被找到?⽽且最后⼀句话压根没看懂。看这篇⽂章有种吐⾎的感觉。
2020.1.4
and doubled learning rate for bias, although we found training to be
nsitive to the learning rate alone
上⾯这句话的“对偏差的学习率”和“尽管单独对学习率敏感”没有看懂。
另外今天在知乎上有了意外的收获,终于明⽩了这种全像素分类叫做什么了:全景分割。真的魔幻,居然⽤了⼀星期才明⽩⾃⼰在做的东西叫做什么。今天把FCN勉强看完了,但是有很多疑问,明天复习备考期末,等后天见⽼师再说。下周开始看下篇论⽂:Mask R CNN。
2020.01.07
今天⼜和⽼师沟通了⼀下,我之前⼀直疑惑为什么⾮要分为全景(全像素级)语义分割和实例分割(
针对特定⽬标),为什么不能⽤实例分割的⽬标框去检测天空不⾏吗?为什么要⽤全景分割识别天空背景?⽼师解释说天空其实是⼀个不规则形状(树⽊、⾼楼等)和不规则图案(不同天⽓,阳光等)的⽬标,不连续且变化较⼤,不适合直接做⽬标检测。另外,本来想接着看何恺明的全景分割⽹络的,结果⽼师提醒我貌似这个没有开源……emmm,然后不知道接下来⽤哪个的时候,⽼师教导我上可以去KITTI官⽹上语义分割这⼀个章节看看,于是惊喜地发现上⾯按照全像素分割和实例分割分出了两个部分,上⾯罗列着各个算法排名及实验结果。实例分割Mask -R-CNN领跑全程,ok,实例⽹络就选它了;⽽全像素分割我所熟悉的FCN才仅仅排到倒数第⼀,emm,ok,我觉得排名第⼀的算法也值得研究⼀下,接下来的路就很清楚了,真不愧是导师啊。
mask r cnn 的思路是并⾏进⾏掩码和类标签的预测,并没有沿袭了fast r cnn 那种先识别再分割,(其实本来还在疑惑为什么没⼈先分割后识别,想了⼀下发现我傻了,仅仅⽬标分割没必要全像素分割的,⽽且全像素分割也不会给⽬标识别带来什么精度上的提升(⼤概)。mask r cnn论⽂也提过这样做的前辈,但明显效果不是很好。)与之前想象的相反,mask r cnn并⾏计算标签和掩码没有降低精度,反⽽是精度提升的关键。
顺便Mask R CNN⽂章感觉⽐FCN要容易懂很多(⼤概是中国⼈⼀作的原因吧),所以很快看完,下⼀篇⽂章是KITTI像素级分类排名第⼀的Improving Semantic Segmentation via Video Propagation and Label Relaxation,他也是有开源的,不过代码藏得差点没看到。
2020.01.08
从绪论可以看出他的主要⼯作是 synthesizing new training samples,提出了⼀种基于视频帧预测的⽅法合成训练样本来对训练数据集进⾏增⼴ ,⽐较了传统的深度⽹络⽣成(慢),⼈⼯合成标注(假),⽹络训练标注(依赖于训练⽅法),连续帧法(有各种缺点,具体在第⼆部分相关⼯作⾥)
看到这⾥不想看了,涉及⼤量我没接触过的东西,半监督学习不太熟,所以直接看结果吧。
============================================================
超级搞笑笑话大全>蝴蝶山该⽂章从DenNet 架构改进⽽来,关于DenNet可以⽤论⽂中⼀张图简单介绍:
Second, dilatedfiltering treats mantic gmentation exactly as if it
were ImageNet classification, which, in our view, should not be the
ca. Semantic gmentation has to provide accurate location
information: one pixel left or right must make a difference between
one class and another. We find it hard to accept that deep mantic
邮政业务layers alone are the optimal place for bringing such
location-dependent decisions, and that brings us clo to the focus of
our rearch.
所以最后作者放弃了空洞卷积。第⼆点从provide accurate location information这句我猜是空洞卷积⽆法准确的提供定位信息⽽是简单的对像素进⾏分类,沈⽼师也赞同了我的看法。
2020.01.09
剩下都是这个⽹络的细节⼀些东西,配合代码还挺清晰的。简单概括⼀下就是梯形⽹络+稠密⽹络,没啥特殊的,就不在多说了。不过随着这个⽂章读完,语义分割论⽂部分要先放下了,接下来是SLAM的论⽂及复习SLAM相关的学习,我要重新开⼀篇⽂章了,csdn每改⼀次都要审核挺⿇烦的。