学习地址:
1 数据集
KITTI数据集:检测、分割、3D场景,使用非常广
2 输入输出(encoder-decoder结构)
输入为一张图象,编码后为特征图,特征图解码输出想要的结果
3 模型整体架构
3.1 层级
(1)backbone(骨干网络):特征提取作用得到特征图
选择:考虑速度使用简易网络mobilenet、resnet;不考虑可以使用efficientnet
(2)多层特征:
浅层和多层关注的特征不同,表现出特征的多样性;浅层为局部,深层为全局
先在backbone中选择不同层次的特征(4-5个)尺度大小各不相同,然后使用pre-trained modle: Resnext(resnet改进)
3.2 差异
(1)边界信息(类似局部特征):提取多尺度的差异
对输入做上下采样,然后相同层级的两个特征图做减法来提取差异特征,各个层级都做提取不同尺度的差异(做法类似Unet,下采样卷积池化,然后卷积上采样)
3.3 SPP(空间金字塔池化)
目的:得到更丰富的特征,保证特征数量和多样性;不用要求输入大小固定,resize会丢失信息
方法:做几种不同的池化,筛选出不同数量的特征,然后拼在一起
3.4 空洞卷积
感受野:特征图上的一个点相当于原图的一个区域,一般单层的感受野就是一个卷积核大小
空洞卷积:保持计算量不变,增大感受野;设置空洞倍率改变感受野
但提取特征的时候会丢失部分信息,需要设置多组空洞卷积然后把不同的结果汇总得到更丰富特征
3.5 ASPP(SPP+空洞卷积)
两者集成,只在backbone最后特征图做ASPP
3.6 叠加
(1)拼接:特征图预测结果、差异结果、中间特征进行拼接;
逐层提取特征拼接再不断加入到下一层的输出中
(2)coarse-to-fine:由粗到细,先由最后一个特征图得到大致结果再不断优化,轮廓细节会越来越突出
3.7 权重参数预处理
传统套路为CONV+BN+RELU
数据预处理分布更均匀,之后每一层卷积做完就用BN标准化,分布更均匀最后再用RELU
加上WS权重参数标准化
pre-activation:先做RELU还是后做的差异
3.8 损失函数
预测值和真实值是否接近,差值加上一个正则化惩罚项
4 代码讲解部分
4.1 项目环境配置
demo.py演示:对一张图像进行深度估计并输出一张深度图像
4.2 数据与标签定义方法
4.3