Loading [MathJax]/extensions/TeX/AMSsymbols.js

2024년 9월 7일 토요일

PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller

Github: https://github.com/XuJiacong/PIDNet 

Paper: https://arxiv.org/pdf/2206.02066 


PIDNet실시간 도로 장면 이해를 위한 고정밀 실시간 Semantic segmentation 모델입니다
주로 도로 환경에서 freespaces, lane, pedestrian 등을 빠르고 정확하게 분리할 때 사용합니다.

PIDNet은 PID 컨트롤러의 개념을 차용해 네트워크를 설계했습니다. PID 컨트롤러는 시스템의 오차를 줄이기 위해 비례(P), 적분(I), 미분(D) 요소를 조합하는데, PIDNet은 이를 딥러닝에 적용해 다음과 같은 문제를 해결합니다:

1. 오버슈트 문제: 기존 2분기 네트워크에서 세부 정보가 문맥에 묻히는 현상을 경계 정보를 추가해 완화

2. 실시간성: 계산 효율성을 높여 빠른 추론 속도를 유지


Cityspaces 태스크에대해서 SOTA를 달성했고 2023년도 CVPR에 accept되었습니다.

[Architecture]

크게 3가지 Branch로 나누어집니다.

1. P-branch (Parsing)

  • 의미 있는 high-level 정보 추출

  • 큰 물체나 장면 전반의 컨텍스트를 파악

2. I-branch (Intermediate)

  • P-branch와 D-branch 사이를 연결하는 브리지 역할

  • 정보 균형 맞추기 위해 사용

3. D-branch (Detail)

  • edge나 fine-grained boundary 등 정밀한 경계 추출

D-branch로 sharp한 경계 유지, P-branch로 전반적인 구조 이해, I-branch로 둘 사이의 정보를 보완 및 연결이 주된 branch들의 기능입니다.

흥미로운 점은 Ground truth에 사용되는 데이터들이 cany edge로 전처리하여 추가적인 학습에 사용되는데 그 이유는 다음과 같습니다.

1. Detail branch가 "경계 중심"으로 학습되게 하기 위함

일반적인 segmentation GT는 object 내부 픽셀도 모두 포함하는데 하지만 D-branch는 전체 object 영역이 아니라, "어디서 object가 끝나고 배경이 시작되는지"를 알아야 합니다. 그래서 GT에서 edge만 추출(Canny) → D-branch의 학습 target으로 사용

즉, D-branch는 object의 윤곽선(edge)을 학습하고, P-branch는 object의 의미(class)를 학습하는 역할 분담이 됩니다.

2. 정보 분산 구조 (Progressive Information Distillation)를 위한 명확한 역할 부여

각 branch가 역할 혼란 없이 자신이 봐야 할 정보에 집중할 수 있도록 도와주는 게 Canny edge 사용의 핵심 목적입니다.


[Latency]
세 branch를 분리된 경로로 처리함으로써 효율적 연산 병렬화가 가능해졌고, 기존 BiSeNet 등에서 사용하던 heavy한 feature fusion 모듈 대신, PIDNet은 더 단순한 PID block으로 정보를 주고받으면서 latency 줄이는 데 큰 역할을 하였습니다.
뿐만아니라 마지막 stage에서 segmentation map 생성 시, 복잡한 attention이나 global context 모듈 없이 단순한 concatenation과 conv로 처리하여 속도에 이점을 가져왔습니다.