Revisiting Single Image Depth Estimation: Toward Higher Resolution Maps with Accurate Object Boundaries
Junjie Hu, Mete Ozay, Yan Zhang, Takayuki Okatani
(Submitted on 23 Mar 2018 (v1), last revised 22 Sep 2018 (this version, v2))
https://arxiv.org/abs/1803.08673
Abstract
본 논문은 두가지를 개선하여 단일 이미지 depth map 추출의 정확도를 높인다.
1. 4가지 module (Encoder, Decoder, Multi-scale feature fusion module, refinement module)로 구성된 네트워크를 이용하여 다른 scales에서 추출된 features를 융합하는 것
2. 훈련에 사용되는 inference errors를 측정하는 loss function
Introduction
depth map의 적용: augmented reality, human computer interaction, human activity recognition, scene recognition, segmentation
CNN의 적용은 Depth map의 발전을 도모했다. 이전의 연구에서는, depth maps은 CNN을 이용한 downsampling 연산에 의해 입력 이미지보다 더 낮은 resolution으로 얻어졌다. 따라서, resolution을 향상시키기 위한 연구가 진행되어왔다. upsampling 방법으로 (1)up-projection (2)depth 정제를 위한 Integration of CRFs into CNNS & end-to-end training 방법, 등이 제안 되었다. 최근에는, 정확도 향상을 위한 dilated convolution이 제안되었다.
기존에는 object shape의 distortions(왜곡)이 존재하고, 작은 objects과 mosaic 패턴들을 검출하지 못했다. 높은 spatial resolution(정확한 물체 경계)을 갖는 depth map은 물체 인식과, 이미지 re-rendering에 중요하다.
feature들은 CNN의 다른 layer로 부터 다른 depth cues를 얻는다. 예를 들어, lower layer features는 object shapes의 디테일 정보를 가지고, higher layer features는 global depth 정보를 가진다. 우리는 skip connections을 이용하여 up-scales lower layer features를 same(high) level of resolution으로 융합한다.
제안하는 네트워크는 4가지 모듈을 가지고 있다.
- encoder(E) : multi-scale feature 추출에 사용
- decoder(D) : feature decoding에 사용
- multi-scale feature fusion(MFF) : 다른 resolutions의 features를 융합
- refinement module(R) : 마지막 예측을 위해 D와 MFF로 얻어진 features를 정제 및 융합
몇개의 backbone networks (ResNet, DenseNet, SENet)을 이용하여 결과를 보여줄 것이다. 이 방법은 end to end fashion이다. (후처리가 필요 없음)
ResNet, DenseNet, SENet 등 네트워크는 아래 블로그를 참고했습니다.
CNN을 훈련시키기 위해 loss function을 개선했다. 기존의 방법으로 추정된 depth maps은 추정된 depth map과 다른 norms을 가진 loss fuction(A2 loss, A1 loss, robust berhu loss 등)을 이용해 ground truth사이의 depth 차이의 합을 사용했다. 기존의 방법은 step edges에서 에러(위치 shift, sharp and blurry edges사이의 차이 등)가 나타나도 무감각하다는 단점이 있다.
우리는 gradients의 차이, normals to scene surfaces의 차이 loss function을 추가적으로 이용한다.
3개의 loss function은 object edges의 정확성을 높인다.
Related Work
Skip connections
다운샘플링 때문에 저하된 resolution을 보존하기 위해 사용
인코더-디코더 네트워크에 많이 사용 됨 (ex) U-Net
이미지 복원, semantic segmentation(이미지 분류) 에 사용됨
semantic segmentation에 대해 알고 싶다면 아래 정리를 참조해주세요.
인코더와 디코더 사이의 symmetric application으로 보통 사용되나, 이 논문에서는 인코더의 서로 다른 레이어에서 최종 디코더 출력으로 up-scale된 feature map을 직접 병합함
Gradient-based loss
대부분의 depth gradients for losses 연구는 multi-task learning에 입각화했음
이 논문에서는 "훈련에서 ground truth depths만 사용이 가능할 때, 어디까지 갈 수 있을까?"로 연구
>> RGBD 카메라는 빠르게 발전해, 사용하기 더 쉬워졌지만, segmentation labels을 얻는 건 비싸기 때문
>> 3개의 losses (depth loss, gradient loss, normal loss) 가 정확도를 얼마나 더 향상시킬 수 있는지 분석함
Proposed Method
1. Improved Network Design
4가지 module로 구성: 인코더(E), 디코더(D), multi-scale feature fusion module(MFF), refinement module(R)
1) 인코더(E)
: 다양한 scale에서 features를 추출함 (1/4, 1/8, 1/16, 1/32)
2) 디코더(D)
: 인코더의 최종 feature를 점진적으로 up-scale 하기 위해 4개의 up-projection module이 적용
기존의 비슷한 인코더-디코더 네트워크의 출력은 spatial resolution을 잃고, 물체 형태를 보존하지 않음
3) MFF 모듈
: 다양한 스케일에서 다른 정보를 병합하기 위해, 4개의 다른 scale feature를 통합함
(up-projection, channel-wise concatenation을 사용하여)
구체적으로, 출력과 같은 사이즈를 갖기 위해, 4개의 인코더 출력 (각각은 16채널을 가짐)을 각각 X2,4,8,16배 upsampling한다.
channel-wise 법칙을 따라 upsampling을 한다음 ⇒ concatenate되고 ⇒ 64채널을 가진 MFF 모듈의 출력을 얻기 위해 컨볼루션 레이어로 변형됨
4) Refinement 모듈(R)
: 디코더의 출력과 MFF로 부터 fused된 features들을 concatenated하고 R모듈에 넣음
R 모듈은 최종 예측을 얻기 위해 3개의 convolutional layers를 가짐
MFF와 R 모듈은 인코더-디코더 부분에 비해 적은 parameters 수를 가짐
'block n' 이름의 각각의 box들은 multiple convolutional layers의 블록임 (ResNet의 residual block같은)
'up n' 이름의 각각의 box들은 up-projection layer임 ([16] 논문에서 소개 됨)
Batch normalization과 ReLU nonlinearity가 conv6을 제외한 각 convolutional layer의 출력에 적용됨
2. Loss Function
이전의 대부분의 연구에서는 depth estimate di 과 ground truth gi 사이의 차이를 loss로 이용
*이 손실 함수의 문제점
문제점 1) unit depth difference가 장면에서의 먼 점과 가까운 점 사이의 loss에 같은 기여를 함
(가까운 거리에 더 기여하고, 먼 거리에 덜 기여해야만 함)
depth errors에 log를 취해 이용하여 해결함
문제점 2) x와 y 방향에서의 edges의 변화에 둔감함
depth의 step edge 구조의 경우 위의 loss는 depth 방향의 변화에 민감하지만, 그림 5의 상단 및 두 번째 행에서 설명된 바와 같이 x와 y 방향의 변화에 상대적으로 무감각함, 가장자리의 왜곡과 흐림에도 마찬가지로 무감각
첫 번째 열에 표시된 실선과 점선은 비교 중인 두 개의 깊이 맵을 나타냄.
(1차원 깊이 이미지로 표현, 수직축은 깊이, 수평축은 영상의 x축)
natural scenes은 다양한 데이터 셋의 ground truth 깊이 맵의 예로부터 쉽게 확인될 수 있는 많은 step edge 구조로 구성되어 있음
우리는 가장자리 주변의 작은 오류에 대한 insensitivity가 이 loss를 이용하여 CNN이 추정하는 depth map의 가장자리가 왜곡되거나 흐릿해지는 경향이 있는 현상의 주요 원인일 것이라고 생각한다.
즉, 가장자리 주변의 그러한 오류를 더 처리할 필요가 있음. 따라서 gradients of depth의 다음과 같은 손실 기능을 고려함;
∇x(ei) 가 각각의 x의 i번째 pixel에서 계산된 ei의 공간 미분(spatial derivative)
이 loss는 x와 y방향에서의 edges의 변화에 민감함.
제안된 loss(depth)와 loss(grad)는 다른 종류의 error에 상호 보완적이기 때문에,
네트워크를 훈련시키기 위해 loss(depth)와 loss(grad)의 가중화된 합계를 사용함
문제점 3) 물체 가장자리의 작은 오류들의 처리가 잘 안되는 경우가 발생
natural scene의 depth map은 제한된 수의 매끄러운 표면, step edges에 의해 대략적으로 모델링 됨
depth는 물체의 경계에서 불연속 되는데, 이런 strong edge 오류는 loss(grad)에 의해 수정될 수 있음.
하지만 물체의 가장자리의 depth 차이가 때로는 매우 클 수 있기 때문에, 적절한 weight λ>0을 선택해야 함. 그렇다면, λl(grad)는 그림 5의 마지막 행과 같이 작은 구조적 오류들은 처리할 수 없음.
depth map의 디테일을 개선하기 위해, 또 다른 loss를 제안함.
이 loss는 ground truth와 비교해 추정된 depth map의 surface normal의 정확도를 측정하는 것.
이 normals 사이의 차이를 측정하는 loss function은 다음과 같음.
< . , . >는 벡터의 내적곱을 의미.
이 loss도 depth gradients로 계산되지만, 두 surface normals 사이의 각도를 계산하므로 작은 depth structures에 민감함. 따라서, loss(normal)이 다른 두 loss와 보완적인 관계임
>> 최종 loss는 다음과 같이 정의 됨
3. Accuracy Measures for Depth Estimation
이전 연구에서 사용된 정확도 측정법을 사용함
(T는 이미지에 사용된 유효한 pixel수)
위의 측정 방법들은 여러 측면에서 깊이 정확도를 평가할 수 있으나, object edges의 공간 왜곡을 감지하기 어려움
예를 들어, 작은 RMS 오류를 보여주는 추정된 depth map은 공간적으로 왜곡되거나 흐릿한 물체 가장자리를 찾음 (local structures는 종종 누락 됨)
- Edge accuracy
추정된 depth map의 정확도를 더 적절하게 평가하기 위해, 위의 측정 방법으로는 알 수 없는 positional errors of edges에 민감한 방법을 추가로 제안함
추정된 depth map과 실제 depth map 모두에게 Sobel operator을 적용
⇒ 아래 식을 만족하는 pixels을 edge 위의 pixels로 식별하는데, fx와 fy는 각각 3x3 수평 및 수직 Sobel operator임
0.25, 0.5, 1이라는 세 가지 다른 임계값을 사용
실제 depth map이 참이라고 가정하고, estimated map의 정밀도(P, precision), 회수율(R, recall) 및 F1 점수(F1 score)를 측정
Experiments
1. Implementation Details
NYU-Depth V2 dataset 이용
: 다양한 indoor scenes로 구성
: single view depth preiction에서 가장 많이 쓰임
data argument는 과적합 방지와 정확도 향상에 도움이 됨
각 샘플(RGB 영상 및 해당 depth map)에 개별적으로 적용되는 다음과 같은 data argument를 실행
> Flip: RGB와 depth map은 모두 0.5 확률로 수평으로 플립된다.
> Rotation: RGB 및 depth map이 모두 무작위 degree r ∈ [−5, 5] 로 회전함
> Color Jitter: RGB 영상의 밝기, 대비(constrast) 및 포화(saturation) 값은 c ∈[0.6, 1.4]에 의해 무작위로 스케일링됨
> 464장의 이미지 중 249장은 training에, 215장은 test에 사용함.
> bilinear interpolation(2선 보간법)을 사용하여 이미지를 640X480에서 320X240까지 축소하고, 중심 부분을 잘라 304X228 픽셀의 이미지를 얻음.
> training을 위해 depth map은 출력 크기에 맞춰 114X152로 다운 샘플링 됨.
> 테스트를 위해 654개의 sample중 동일한 작은 subset을 사용.
> 20 epochs로 훈련을 진행
> 인코더 모듈은 ImageNet 데이터 셋으로 pretrained model에 의해 초기화 됨(initialized)
> 네트워크의 다른 레이어는 무작위로 초기화 됨(initialized)
> 초기 학습률이 0.0001인 Adam Optimizer를 사용하며, 5초마다 10%씩 감소시킴
> β1 = 0.9, β2 = 0.999를 설정하고 0.0001의 weight decay를 사용
> lgrad의 가중치 λ과 lnormal의 μ는 λ = 1과 μ = 1로 설정, mapping function의 α는 0.5로 설정
> 배치 크기가 8인 PyTorch를 사용하여 모든 실험을 수행
2. Performance Comparison
표 2는 세 가지 기본 측정법에 대한 기존 방법의 결과와 논문의 방법 결과를 보여준다.
∗으로 표시된 방법은 partially known depths를 사용, ∗∗이 있는 방법은 joint task learning을 사용
Ma와 Karaman의 방법은, 단일 RGB 영상에서만 얻어진 두 가지 결과와 partially known depths(200pixel)를 보여준다.
우리의 방법은 REL, 로그 10에서 최고의 성과를 거두었고, δ< 1.25, δ< 1.252, δ< 1.253 에서 큰 차이의 성과를 거두었다. RMS에서는 Fu et.al의 방법에 이어 두 번째로 좋은 성능을 제공했다. 그러나 Fu et al.의 방법은 120K traning 샘플을 사용했고, 우리는 50K 샘플로 더 작은 샘플을 사용했다. 또한, Xu et al. 과 Ma and Karaman은 ResNet-50을 인코더로 동일하게 사용했는데, 우리의 성능이 더 뛰어남을 확인할 수 있다.
그림 6은 joint multi-task learning 방법[8], 인코더-디코더 네트워크[16], CRF 기반 정제 방법[40], 확장된 일반 회귀 네트워크[10], 우리의 방법을 포함하여 다양한 방법으로 추정된 깊이 맵을 보여준다.
[16, 40]의 방법으로는 형상의 왜곡이 심하고(heavy distortion of shapes), [10]의 방법으로는 사물의 형상의 급격한 불연속 현상(sharp discontinuities of shapes of objects)이 나타나며 모자이크 효과(mosaic effect)까지 관찰되는 것으로 보인다.
[8]의 방법은 비교적 명확한 영상 경계를 나타내지만, 각 방의 멀리 있는 side에서 관찰할 수 있는 부정확한 약한 가장자리(inaccurate weak edges)를 많이 생성한다.
우리의 방법은 부엌의 병과 책상 위의 램프 그늘과 같은 물체나 작은 구조물의 가장자리를 정확하게 복구함으로써 상당한 성능을 보여준다.
우리는 또한 우리가 제안한 엣지 정확도 측정방법과 추정 depth map의 시각적 품질 사이의 관계를 관찰할 수 있음.
3. Ablation Study
제안된 loss functions의 성능을 비교 분석하기 위해, ResNet-50을 인코더로 사용하면서 다른 loss functions로 모델을 훈련함.
그림 7에서와 같이 추정 깊이 맵을 여러 표본과 나란히 시각적으로 비교했을 때, 심층적으로 훈련된 결과가 더욱 왜곡되고 흐릿하다는 것을 관찰할 수 있음.
더욱이, 제안된 loss functions은 특히 장면에서 미세한 세부사항과 개체의 명확한 경계를 추정할 수 있도록 유의적인 개선을 제공한다. 표 4에 제시된 수치 결과에 따르면 장면에서 물체의 세부 사항은 각각 loss(depth), loss(depth) + λloss(grad), full loss인 loss(depth) + λloss(grad) + μloss(grad) + μloss(normal) 의 모델을 사용하여 점차적으로 복구됨
Concolusion
Single image depth estimation에 두 가지 개선 사항을 제시했다.
첫 번째, 네트워크 구조를 개선했다. 인코더, 디코더, 멀티스케일 피쳐 퓨전 모듈(MFF), 정교 모듈(R) 등 4개의 모듈로 구성되어 있다. 인코더에는 ResNet, DenseNet, SENet과 같은 모든 기본 네트워크가 사용될 수 있다. 전체 네트워크는 후처리가 필요 없는 end-to-end 방식으로 훈련된다.
두 번째, 물체의 경계를 정확하게 추정하기 위해 세 가지 loss function을 결합하여 사용했다.
이전의 방법들은 장면에서 물체의 경계를 정확하게 추정하지 못한다. 이것을 이전 방법에서 채택된 loss function 때문이라고 설명했다.
이미지 분석에서는 실제 scene이 매끄러운 표면과 shape discontinuities(물체 경계)로 분류한다. 따라서, depth map에서는 step edge로 나타나는 불연속성을 정확하게 재건하고, CNN training 중에 적절하게 다루는 것이 중요하다.
우리는 다른 loss functions이 step edges 주변의 추정 에러 측정에 어떻게 영향을 주는지 분석했다. loss(depth)는 위치 이동(positional shift)과 가장자리의 흐림(blurring of the edges)에는 무감각한 반면, loss(gradient)는 이에 민감하게 반응하는 경향이 있다는 것을 확인했다. 또한 surface normals차이의 손실인 loss(normal)를 추가적으로 적용했다. 이는 위의 두 손실에 의해 무시되는 작은 구조물에 민감할 것으로 예상된다. 그리고 나서 우리는 세 가지 loss function의 결합된 loss function을 사용할 것을 제안한다.
마지막으로, 우리는 NYU depth V2 데이터 셋에 대한 실험 결과를 제시했다. 우리는 depth 차이를 이용하는 기존 측정치가 추정 정확도 평가를 위해 step edge의 오류를 올바르게 측정하지 못하는 것을 관찰했다. 보다 적절한 평가를 위해 step edge reconstruction 정확도에 대한 간단한 측정 방법을 제시했다. 우리의 방법은 기존의 정확도 측정 방법과 제안된 정확도 측정 방법을 모두 사용하여 이전의 방법을 능가하며, 특히 작은 물체의 재구성과 객체 경계의 추정에 있어 현저한 개선을 제공한다. 이것은 제안된 방법의 결과와 이전 방법의 결과 사이의 시각적 비교와 잘 일치한다.
'인턴일지' 카테고리의 다른 글
Single-Image Depth Perception in the Wild (0) | 2020.05.08 |
---|---|
Stacked Hourglass Networks for Human Pose Estimation (0) | 2020.05.08 |
Semantic Segmentation 강의 정리 (0) | 2020.05.08 |
Revisiting Single Image Depth Estimation: 실시간 Depth map (0) | 2020.04.27 |
[7,8주차] 주간프레젠테이션 (0) | 2020.04.24 |