두번째 semantic segmentation 논문이다.
FastFCN, HRNet, OCR 순으로 읽어볼 것이다.
또한, panoptic 분야이지만 EfficientPS와 Panoptic deeplab 또한 살펴볼 것이다.
이전 포스트에서 FastFCN, panoptic deeplab은 이미 리뷰를 마쳤다.
이런 논문을 선정한 이유는 다음과 같다.
아래는 Cityscapes semantic segmentation 벤치마크이다.
HRNet, OCR 키워드가 가장 많이 보인다.
의외인점은 panoptic deeplab과 EfficientPS가 있는건데, 이건 분명 panoptic segmentation 논문인데 시맨틱에서 상위권에 있다.
그래서 이 두가지도 같이 보려고 한다.
COCO stuff에서도 마찬가지이다.
HRNet
arxiv.org/abs/1908.07919v2
github.com/HRNet/HRNet-Semantic-Segmentation/tree/pytorch-v1.1
Concept
position에 민감한 task의 경우, high resolution이 굉장히 중요하다.
eg.) semantic segmentation, human pose estimation, object detection...
그런데 일반적으로 인코더에서 high -> low resolution feature maps를 추출하며, 이 정보를 각기 태스크에 맞게 디코더에서 활용하는 구조이다. 그러면 high resolution 정보를 어떻게 유지하느냐가 관건인 셈이다.
이 논문에서는 이런 관점에서 HRNet V2를 제시한다.
- High -> low로 갈때, parallel하게 connection을 주자.
기본적인 인코더의 high -> low로 가는 과정이 sequential 할텐데, connection을 추가해주면 정보가 parallel하게 갈 수 있기 때문에 저런 표현을 쓴 것으로 보인다. - 각 resolution간에 정보를 계속 교환한다.
사실 ResNet에서부터 skip connection의 중요성은 지속적으로 강조되어왔고, semantic segmentation만 하더라해도 U-Net이 skip connection으로 인코더의 high resolution 정보를 이용할 수 있게 해왔다.
그렇다면 이 논문은 어떤점이 다르며, v2라는 것은 어떤 점이 바뀐 것일까?
특이점 1 : Upsampling이 아닌 parallel하게 connection 유지
기존 연구는 대부분이 Upsampling을 이용하여 low에서 high를 복원한다.
하지만 이 논문은 high resolution 정보를 (connection을) 유지하는 모델을 제시한다.
다시 말해, 복원의 관점이 아니라 high resolution의 유지에 관점을 두는 것.
series와 parallel connection의 차이라고 볼 수 있다.
특이점 2 : fusion scheme
보통 upsampling하여 얻은 high와 low를 fusion을 하는 게 일반적이다.
하지만, 여기서는 지속적인 fusion을 통해, high resolution의 도움을 받아 low resolution이 강해지며, 그 반대로도 가능하다고 말한다.
그러면 high->low로 가는 동안, 모든 feature가 좋을 것.
Contributions
HRNet v1은 원래 제안 했던 모델이고, 이 논문에서는 V2, V2p를 제안한다.
HRNet v1
high resolution representation만 계산하고, high resolution output을 낸다.
HRNet v2
high-to-low representation을 전부 합침으로써 high resolution, low resolution을 parallel하게 유지한다.
HRNet v2p
HRNetv2의 output이 high resolution이다.
이를 가지고 multi-level representation을 형성한 후 SOTA급의 detection framework에 접목시켰다.
아래 그림이 순서대로 HRNet V1, V2, V2p이다.
그림의 의미는 method를 봐야 알 수 있다.
Related Works
related works를 살펴보려는 이유는 왜 굳이 저런 아키텍쳐를 만들었고, representation의 관점에서 기존 다른 모델은 뭐가 달랐는지 알기 위함이다. 이에 따라, 논문에서는 기존 human pose estimation, object detection, semantic segmentation task의 representation 기법들을 3가지로 분류하여 설명한다.
1. low-resolution representation learning
이 접근법은 FCN (fully convolutional network)에서 출발한다. 왜 이름이 fully convolutional network일까? 그것은 맨 뒤에 오는 fully connected layer를 제외했기 때문이다. 이는 FCN논문을 보면 알 수 있는데, FC를 거치는 순간 위치정보가 사라지기 때문에 이를 막기 위한 방식이다. 어쨌거나 FC를 제외한다면 마지막으로 남는건 low resolution의 representation일 것이다.
FCN은 이를 이용하여 semantic map을 만든다. 하지만 이렇게만 하면 너무 coarse한 map이 될 것이다.
그래서 medium resolution representation을 통해 fine segmentation score를 얻도록 한다. skip layer를 통해 이전 정보를 끌어다 쓰는 등의 방식이다.
이 논문에서는 이를 low-level medium-resolution representation이라 표현하였다.
여기서 더 발전하여, 인코더 파트의 마지막 2 레이어에는 stride를 넣거나 dilated convolution을 사용함으로써 medium-resolution representation을 만들 수 있게 했다.
게다가 feature pyramid를 활용하여 multi-scale을 활용하는 등의 접근방식이 있다.
2. high resolution representation recovering
Recovering이라는 대목에서 알 수 있듯이, upsampling을 통해 High-resolution을 복원하는 접근방식을 말한다.
Upsampling을 위한 network를 인코더의 downsampling network와 symmetric하게 구성한 후 사이즈가 같은 것에 skip connection을 추가한다든가 (SegNet, DeconvNet), feature map을 복사해오는 (U-net, Hourglass, encoder-decoder) 등의 방법을 사용했다. Stacked hourglass같은 것도 있던데 묘하다...
Full-resolution residual network에서는 full-resolution의 하나의 stream으로 유지해주고, 각 레이어에서는 이를 끌어다 써오거나 정보를 보내주는 식으로 하였다.
한편으로는 asymmetric한 연구방향도 있다. 이를테면 RefineNet이 있다.
3. high-resolution representation maintaining
여기에 해당하는 기존 연구로는 convolutional neural fabrics, interlinked CNNs, GridNet, multi-scale DenseNet가 있다고 한다.
이중에서 앞의 두 논문에서는 그렇게까지 정교하게 디자인된 편은 아니다보니까 residual connection이나 batch normalization도 없고, 각각의 parallel한 stream끼리 정보교환을 어떻게 해야할지도 잘 고려하지 않았다고 한다.
GridNet (BMVC 17)의 경우, U-Net 몇개가 있고, 2개의 stream에서 정보를 교환하는데 각각이 high->low, low->high라고 한다. 하지만 성능이 좋지 못했다고 한다. Multi-scale DenseNet의 경우 좋은 high representation을 만들어주지만, low representation에서 오는 정보가 없다는 문제가 있다.
Multiscale을 fusion하는 방법에 대해서도 언급한다.
일반적으로는 인코더 디코더같은 U-Net스러운 아키텍쳐에서 skip connection을 넣는 방법이 있다. PSPNet이나 DeepLabV2/3에서는 pyramid pooling module과 ASPP를 이용한다.
이 논문에서는 fusion output이 1개의 resolution이 아닌 4개이며, 이런 fusion 과정이 여러번 반복된다.
Methods.
가장 먼저, 이미지 Input은 stem에 들어간다.
stem은 stride=2, kernel=3의 convolution 두개이다. 그러면 1/4의 resolution으로 줄어들 것이다.
아래 그림을 보면 related works에서 열심히 강조해왔던 그대로이다.
정말 모든 가능한 resolution에서 input을 받는 것을 알 수 있다. 다 연결되어있다!
핵심이 되는 low->high, high->low resolution 합치는 과정의 연산은 아래와 같다.
upsampling 1*1과 stride 3*3이라 적혀있다. 그러면 upsampling은 어떤 방법으로 한 것일까.
아래 그림은 논문 표현에 대한 이해를 돕기 위한 것 같다.
Multi-resolution parallel convolution, multi-resolution fusion, normal convolution (=fully-connected multi-branch convolution)이라고 한다.
이제 이 그림을 가지고 다시 맨 처음으로 돌아가 HRNet V1, V2, V2p 그림을 보면 구조를 이해할 수 있다.
이 그림기호로 표현되어있다.
Multi-resolution parallel convolution
결국 이 논문의 핵심 contribution은 어떻게 (parallel한) multi resolution representation을 fusion하느냐 이것이다.
Fig 3에 나와있는데, 설명하자면 이렇다.
N개의 parallel stream이 있다는 것은 다시 말해 N개의 resolution이 있다는 것이다.
여기 나오는 highest resolution의 경우, 처음 conv 연산들을 통해 1/8 resolution으로 줄인 이후이다. 모든 그림에서 이 과정은 생략되어있다. 이는 논외로 한다.
이 논문은 high -> low, low -> high, 같은 크기 이렇게 3가지의 연산이 모두 필요하다. Fig 5의 b, c에서 볼 수 있다.
여기에 들어가는 세부적인 연산은 Fig 3에 나온다.
1. input resolution = output resolution의 경우
연산 하지 않는다. Input = output이다.
2. input resolution < output resolution의 경우
resolution을 키워야한다.
따라서, bilinear로 키워준 후에 1*1 convolution을 적용한다.
그래서 resolution이 2배 차이이든, 4배차이든 상관 없다.
3. input resolution > output resolution의 경우
resolution을 줄여야한다.
따라서, stride 2인 3*3 convolution을 적용한다. 이것을 줄여야하는 만큼 반복한다.
예를 들어, resolution이 1/4라면 2번 convolution 해야한다.
그렇다면 논문에서 제안한 3가지 백본은 어떤 차이가 있는가.
논문에서는 기본적으로 4 parallel resolution을 가지고 연산하는 것 같다.
1. HRNet V1
output에는 high-resolution 하나만 있고, 나머지는 전부 무시된다.
그러므로 나머지 low resolution 3개는 무시하는 것이다.
2. HRNet V2
low resolution output들은 전부 high resolution에 맞춘 후 concat한다.
bilinear upsampling을 사용하며, channel 수에는 변화를 주지 않는다.
그리고 1 × 1 convolution을 사용하여 4개의 representation 정보를 적절히 섞어주도록 한다.
3. HRNet V2p
HRNet V2의 output에다가 다시 연산을 적용해서 downsample한 것을 첫 그림에서 알 수 있다.
이를 통해 multi resolution output을 만든다.
각 모델의 사용은,
- human pose estimation: HRNetV1
- semantic segmentation: HRNetV2
- object detection: HRNetV2p
아키텍쳐 그림은 다음과 같다.
하나의 블록은 아마도 다들 알고있을 residual block이다.
ImageNet pretraining은 다음과 같다.
stride 2 3*3 conv 256 채널로 downsample하여 concat하기. 따라서 작은 resolution일수록 channel은 많다.
마지막 것이 그래서 1024 채널.
Experiments
Human pose, object detection, semantic segmentation 이렇게 세가지 task를 했다.
내 목적은 semantic segmentation이라 거의 이것만 살펴봤다.
Semantic Segmentation은 Cityscapes, LIP, PASCAL-Context 세가지에 대해 수행하였다.
ImageNet pretrained model을 전부 사용한 것 같다.
github 들어가면 있는데, 기존 것은 바이두에만 올라와있다. cutmix 등을 사용한 새로운 버전의 경우, 링크 클릭하면 바로 다운받을 수 있다.
여기서 LIP의 경우는 직접 돌려봤다.
cutmix, SGDR scheduler 등이 적용된 pretrained model은 그냥 다운 받을 수 있다는걸 몰랐기 때문에, 아직까지의 실험은 pretrain 없이 한 것이다.
논문 셋팅
- batch size 40
- 110K iterations
- pretrained O
내 셋팅
- batch size 16
- 100 에폭 정도
1 에폭 = 1903 iterations
100에폭 = 190.3K iterations - pretrained X
- 나머지 lr, optimizer, wd, scheduler 등 전부 동일
나는 mIoU가 0.44가량 나오는데, 논문을 보면 0.55 정도가 나와야한다.
방금 pretrained model 다운받아서 시작했는데 확실히 시작부터 loss가 많이 줄어든 것을 알 수 있었다.
성능은 더 돌려봐야 알 것 같다.
여담으로 COCO에서의 detection 결과를 보면 그렇게까지 좋은지는 잘 모르겠다. 기존 백본 쓰는거랑 별 차이 없는 듯...?
ImageNet 학습이 가능하지만 SOTA급은 아니다. 애초에 쓰임새가 다르기도 했고 말이다.
github.com/PaddlePaddle/PaddleClas
여기서 확인해보면, classification에선 다른 모델들이 많이 쓰인다.
물론 여기 plot되어있는 모델들이 워낙 쟁쟁하다보니 그런 것도 있다.
'AIML 분야 > Segmentation' 카테고리의 다른 글
[Semantic Segmentation 조사 3] Object-Contextual Representations for Semantic Segmentation 리뷰 (0) | 2021.02.22 |
---|---|
[Semantic Segmentation ] HRNet V2 실험 및 코드 (0) | 2021.02.18 |
Segmentation Evaluation Metrics (0) | 2021.02.16 |
[Semantic Segmentation 조사 1] FastFCN 리뷰 (0) | 2021.02.16 |
[2021.02.16. 연구노트] 깨알같은 디버깅 - panoptic deeplab (0) | 2021.02.16 |
댓글