Deep Dual-resolution Networks review
Segmentation 작업을 수행하는 모델들은 속도를 챙기기 위해 Dilated Convolution등을 사용하는데 해당 Conv layer의 단점은 픽셀의 정보를 건너뛰어 수집하기 때문에 특정 패턴의 정보를 받아들이지 못하는 경우가 많다.
DDRNet에서는 Dilated Convolution작업을 수행하지 않는것은 아니지만 정보의 보존을 위해 Dual-resolution network(이중 해상도 네트워크)를 제안한다.
DDRNet은 하나의 trunk에서 시작하여 high-resolution feature maps과 다운샘플링을 거친 rich sementic information maps을 추출한다. 두 branch는 정보 융합을 위해 bilateral connection이 진행된다.
rich semantic information maps의 경우 이후 Segment Head에 들어가기 이전 DAPPM 모듈 내에서 multi-scale context information을 추출하고 융합하여 최종 특성맵을 완성시킨다.
branch : 데이터 처리 경로.
trunk : 병렬 branch로 나뉘기 전 공통 부분.
bilateral connection : 양방향 연결
DAPPM(Deep Aggregation Pyramid Pooling Module) :

RB(Residual Basic Blocks) : Convolution Layer로써 특성 추출.
RBB(Bottleneck Block) : feature dimension을 확장하여 다양한 종류의 특징 생성.
Seg.Head : Segment Head(점선 Head와 실선 Head 구별)
RB 1/32의 상단에 RB 1/8에서 점선으로 Seg. Head가 존재하는데 해당 Head는 Auxiliary Loss(보조 손실값)으로 DNN이 역전파를 진행하는 과정에서 초반 레이어에 영향이 적게 미치는 문제를 해결하기 위하여 중간의 Loss값을 계산하여 이후에 합치는 과정을 거친다. 비교적 메인 Seg. Head보다는 간단한 구조로 제작되어있다.
학습이 완료되고 난 이후에는 모델에 는 포함되지 않는다.
: 최종 손실
: 일반 손실
: 보조 손실
논문에서는 α값을 0.4로 두어 가중치 값을 조정하였다.

저해상도의 특징맵과 고해상도의 특징맵의 정보를 교환하는 네트워크로 좌측은 저 해상도의 branch에서 가져온 특성맵이고 우측은 고해상도의 branch에서 가져온 특성맵이다.
Low-resolution branch는 3 x 3 convolution layer에 대해 256의 채널 수를 가지고
High-resolution brach는 3 x 3 convolution layer에 대해 128의 채널 수를 가진다.
Low-resolution branch에서 High-resolution brach로 넘어가는 경우에는 1 x 1 convolution layer를 거치며 채널 수를 128로 줄이고 이후 UpSample과정을 통해 이미지 사이즈를 늘린다.
High-resolution brach에서 Low-resolution branch로 넘어가는 경우에는 3 x 3 Convolution layer를 Stride값을 2로 설정하여 채널 수를 256으로 늘리는 것과 동시에 사이즈를 줄인다.
Low-resolution branch의 채널 수가 많은 이유는 낮은 해상도에 대해 더 깊은 수준의 특징을 가지고 싶어하기 때문이며 High-resolution brach가 높은 해상도에 대해서 특성은 추출하나 너무 연산량과 정확도에 대해 중간 지점을 맞추기 위함이다.
RB 1/8에서 RB 1/32로 넘어가는 경우는 UpSample을 x4와 x8을 하는 과정을 거치며
RB 1/32에서 RB 1/8로 넘어가는 경우는 stride 값을 4와 8로 설정하는 과정을 거친다.

kernel = 5, stride=2 : 1/128 size 특성맵, 이후 1 x 1 conv를 거치고 UpSample하며 채널 수 조정kernel = 9, stride=4 : 1/256 size 특성맵, 이후 1 x 1 conv를 거치고 UpSample하며 채널 수 조정kernel = 17, stride=8 : 1/512 size 특성맵, 이후 1 x 1 conv를 거치고 UpSample하며 채널 수 조정kernel = H * W : (1, 1) size의 특성맵, 이후 1 x 1 conv를 거치고 UpSample하며 채널 수 조정각 UpSample을 통해 확장된 특성맵은 3 x 3 Conv layer를 거치며 부자연스러운 특성들을 정비한다.
X : 1 / 64의 사이즈를 가진 특성맵
: 1 / 64의 사이즈를 가진 특성맵
1번을 제외한 나머지는 UpSample과정을 거치고 난 후 이전 사이즈의 정보를 더한 이후 Conv(3 * 3)을 진행.
위 과정을 거치며 각기 다른 size의 정보를 작은 size부터 넓은 size의 정보로 누적시켜 사이즈간 정보를 정교하게 만든다.
: 1 x 1 Conv layer
: 3 x 3 Conv layer
U : UpSample
P : Pooling payer, P(global)은 Kernel = H x W을 의미
i : scale 크기, 그림에서 i의 최대값은 n
n : scale의 마지막
j : kernel size
k : stride

GTX 2080Ti로 돌린 모델과 비교했을 때 MIoU값과 FPS가 높은 것을 확인할 수 있다.