[BMVC 2021] Self-Supervised Monocular Depth Estimation with Internal Feature Fusion(DIFFnet)

https://daffodil-story-3b9.notion.site/BMVC-2021-Self-Supervised-Monocular-Depth-Estimation-with-Internal-Feature-Fusion-DIFFnet-1eb9786e3cca404398d779905f80c481?pvs=4

X-review 작성 간에 수학 수식을 삽입하는 방법을 몰라서 일단은 정리한 노션 페이지 링크를 첨부하였습니다.(인라인 수학 수식 삽입이 안됩니다 ㅠㅠ…)
이번 주 안으로 작성 방법을 배워서 옮겨 적어두도록 하겠습니다.

죄송합니다.

Author: 조 현석

6 thoughts on “[BMVC 2021] Self-Supervised Monocular Depth Estimation with Internal Feature Fusion(DIFFnet)

  1. 안녕하세요, 좋은 리뷰 감사합니다.

    첫 엑스리뷰 작성 축하드리며, 간단한 질문 남기고 가겠습니다.

    기존 HRNet에서 특정 layer의 feature map을 fusion한 feature map을 사용한 게 DIFFNet으로 이해를 하였습니다. 여기서 사용되는 이미지 해상도가 그렇게 작은편은 아니라고 생각을 하는데요. 기존의 HRNet도 계산복잡도 측면에서도 적을 것 같지는 않아보입니다. 이러한 관점에서 보았을 때 모델의 규모가 커짐에 따른 ablation study는 없었는지 궁금합니다.

    그리고 마지막으로 실험 결과인데요. 입력으로 들어가는 해상도가 상이하네요. 데이터셋이 KITTI인데, 같은 M, M+Se를 사용하더라도 크기가 다른 이유가 무엇인가요? 공평한 비교인듯하면서도 의문이 드네요.

    감사합니다.

    1. 안녕하세요. 희진님!
      댓글 감사합니다.

      (1) 논문에 연산량에 관한한 ablation study는 따로 존재하지 않습니다. 다만 개인적으로 생각해 보건대 기존 HRNet과 비교하였을 때, DIFFNet은 각 stage의 feature map을 concat하는 방식으로 fusion해서 최종 output으로 사용합니다.
      이런 상황에서 HRNet과 DIFFNet의 output을 생각해보면, DIFFNet의 output이 resolution은 동일하고 channel축은 증가하는 것을 확인 할 수 있습니다. 따라서 concat을 수행하는 연산량 + 더 깊어진 channel축을 처리하는 연산이 추가 되는 것은 맞습니다. 그러나 앞으로 지속될 tensor 연산은 GPU를 통해 충분히 가속 연산을 할 수 있다고 알고 있습니다. 그런 관점에서 연산량에 의한 심각한 지연은 없을 것으로 예상됩니다.

      (2) 저도 동일한 부분에 대해서 의문을 품고 있기는 합니다만, 심지어 Guizilni방법론을 DIFFNet과 동일한 해상도로 실험했다면 DIFFNet을 능가했을 수도? 있을 것 같다고 생각됩니다.
      찾아본 결과 해당 논문의 저자가 직접 해당 resolution으로 실험을 돌려본 게 아니라, 각 방법론의 논문에 reporting된 결과 중, 고해상도에 해당하는 결과를 가져온 것 같습니다.

  2. 안녕하세요. 조현석 연구원님. 좋은 리뷰 감사합니다.
    depth estimation 프레임워크에서 pretext task에서는 depth network와 pose network를 사용하는것으로 이해했는데요, 그럼 inference할때는 depth network와 pose network를 모두 사용하게 되는건가요? pretext task와 inference의 input이 약간 다른 듯 하여 질문드립니다.
    그리고, 실험 부분을 보니 depth estimation에서 사용되는 성능지표가 다양한 것 같은데(Abs Rel, Sq Rel, 델타 등..), 어떻게 측정되는지 간단히 알려주실 수 있을까요?

    감사합니다.

    1. 안녕하세요. 재연님!
      댓글 감사합니다.

      (1) inference할 때는 depth network와 pose network를 모두 사용하지 않고, depth network만 사용합니다.
      왜냐하면 모델 학습을 위한 pretext-task인 target image reconstruction을 수행할 때, 타겟이미지를 소스이미지 평면으로 와핑하는 과정이 필요합니다. 이때 두 프레임 간의 상대적인 포즈가 필요하고 그것을 제공하는 역할로 pose network가 사용됩니다.
      그러나, inference시에는 단순히 학습이 끝난 Pose Network에 이미지를 넣어서 해당 프레임의 depth정보만 얻으면 되므로 Pose Network를 사용하지 않습니다.

      (2) 각 평가매트릭에 관한 수식은 5.Experiments에 나와있습니다.
      여기서, d는 GT depth, d_hat은 모델이 예측한 depth를 의미합니다.
      Absolute relative error는 단순히 GT와 예측간의 L1 norm을 오차로 가져가고,
      오차를 GT로 나눠 relative term으로 만들어준 것에 해당합니다.
      단순히 두 값 사이의 수치적인 유사도를 체크하기 위한 평가 매트릭입니다.
      Square relative error는 GT와 예측간 오차를 제곱하는 방식을 사용한 것이구요.
      Root Mean Square Error는 regression문제에 많이 사용되는 MSE에 루트를 취한 것입니다.
      Log scale RMSE는 RMSE를 log scale로 바꾼 것입니다.
      마지막으로 Accuracy under threshold는 Accuracy를 평가하는 매트릭인데요. 먼저 특정 threshold값을 정합니다. 그리고 해당 수식이 값이 Threshold보다 작은 경우를 TP로 정의합니다. 최종적으로 TP/Total의 비율로서 수치화합니다.

  3. 안녕하세요 현석님, 좋은 리뷰 감사드립니다!

    4.1의 figure3.(a)의 2번 설명 관련해서 질문이 있습니다.

    1. 저자들은 semantically-rich하고 spatially-precise한 특징을 효율적으로 뽑고 이용할 수 있는 network를 원하여, HR-NET 기반의 모델에 stream과 stage개념을 제안했습니다. 그래서 동일 stream 내에 다른 stage마다 각각 다른 semantic information을 갖도록 하고 매 stage마다 feature map을 뽑고 concat하여 해당 stream의 output을 만들어 낸 것 까지는 이해가 됐습니다. 그런데 다른 resolution을 갖는 feature map끼리 정보를 교환하는 stage는 어떤 방식으로 정보가 교환되는 건지, 단순히 fc layer처럼 연결되어있기 때문에 역전파 그래디언트 전달이 가능해져 그렇단 것인지 모르겠어서 질문드립니다!

    2. 추가로 문득 궁금한 건데,
    저희가 urp때 공부했던 FPN 때와 비슷한 개념으로 low level layer의 feature와 high level layer의 feature를 resolution scaling을 주어 fusion하는 방식이 2번의 얘기에 대체되면 어떨까, 가능한걸까라는 생각이 들었습니다. 2번 애기가 다른 resolution을 갖는 feature map끼리 정보를 교환한다는 언급이 있었으니까요. 제가 너무 끼워맞추는 발상일수도 있겠습니다만 현석님의 의견은 어떠신가요?

    감사합니다!

    1. 안녕하세요. 재찬님!
      댓글 감사합니다.

      (1) 본 논문에는 해당 내용에 대한 언급이 없어서, HRNet을 찾아보았는데요.
      본 리뷰에 첨부한 HRNet의 아키텍쳐를 보시면, 같은 stage 안에서도 자신보다 높은 해상도의 연결이 있고, 동일한 해상도로의 연결, 마지막으로 자신보다 낮은 해상도로의 연결이 존재합니다.
      먼저 높은 해상도에서 낮은 해상도로의 연결에서는 stride=2를 사용하는 3×3 conv를 사용하여 resolution을 1/2로 낮춥니다.
      그리고, 동일한 해상도에서는 그냥 동일한 이전 feature map을 사용합니다.
      마지막으로, 낮은 해상도에서 높은 해상도로의 연결에서는 bilinear upsampling을 진행한 후, channel을 맞춰주기 위해서 1×1 conv를 태워줍니다.
      이렇게 3갈래로 들어온 feature map을 element-wise summation을 해서 사용합니다.

      (2) 재찬님께서 언급하신 것처럼 서로 다른 representation을 합성하여 더 좋은 feature map을 만든다는 컨셉은 두 구조 모두 동일합니다. 다만, 한 가지 다른 점이 FPN은 현재 stage의 feature map과 나중 stage(row resolution, semantically rich)한 feature map과 합성을 합니다. 반면에 HRNet은 자신과 동일, 낮고, 높은 feature map들을 fusion해서 사용하기 때문에 생성되는 feature map관점에서 다름이 존재한다고 생각합니다. 만약 FPN도 low resolution에서 high resolution으로 가는 connection이 있다면 그 컨셉은 동일하여 유사한 성능을 기대해 볼 수 있을 거라고 생각합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다