PIDNet 이란?
PIDNet이 무엇인지 3줄로 요약해달라고 copilot에게 물어보면 이렇게 답해준다.(feat. openaccess, github)
(요즘 copilot이랑 노는게 뭔가 재밌달까.. chatgpt, claude 잠시 안녕,,😭)
- PIDNet은 실시간 시맨틱 분할을 위한 네트워크로 PID컨트롤러의 개념을 차용해 세부 사항 및 컨텍스트 기능을 균형있게 조합한다.
- Cityscapes, CamVid, PASCAL Context 데이터셋에서 이전 모델에 비해 뛰어난 속도와 정확도를 달성한다.
- 자율 수행 차량과 의료 영상 같은 실시간 애플리케이션에 적합하다.
사실... 무슨말인지 잘 모르겠음...🤷♂️
시맨틱 분할은 무엇이며,,, PID 컨트롤러 개념이며,,, 컨텍스트 기능은 뭐람,,,
아아,, 또 한번 물어봅니다..😅
'쉽게' 알려달라는 질문에 물론 쉽게 설명이 가능하다는 친절한 copilot..ㅎㅎ
- 실시간 시맨틱 분할: 쉽게 말해 픽셀단위로 이루어진 이미지나 동영상의 각 픽셀들이 어떤 물체에 속하는지 구별하는 작업.
- PID 컨트롤러: 비례, 적분, 미분을 통해 데이터셋의 loss, 가중치를 적절하게 조절하는 방식.
- 컨텍스트 기능: 사진이나 영상 속 여러가지 물체를 구별할 때 경계면이나 다른 물체 정보를 활용해 좀 더 세밀하게 파악하는 기능.
쉽게 설명해줬어도 아직 내가 부족하다,, PID 컨트롤러 뭐죠...
그래서 논문을 읽으면 해결되겠지라는 마음으로 논문을 읽어봤다.(참고로 논문은 영문입니다... 영어공부 더 하자..!)
PIDNet 요약
- PID에서 착안된 three branch network architecture로 정확도와와 속도 개선
- Encoder-Decoder 형태에서 벗어나 지연 해결
- BAG fusion으로 context와 balance detail을 조절해 오버슈팅 완화
음,, 기존 모델들의 고질적인 문제로는 인코더-디코더(Encoder-Decoder)과정이 필수로 들어가기 때문에 다운샘플링(downsampling) 과정에서 디테일한 데이터를 손상시킨다는 무제점이 있었다는데 이 형태를 벗어나 데이터를 온전히 가져갈 수 있다고 한다.
그리고 제어기(controller)의 목표값이나 튜닝값이 적절치 않아 오버슈팅되는 현상을 추가 Controller로 이슈를 완화 시킨다고 한다.
(뭔말인지 잘 모르겠다.. 더 읽어보자..)
기존 모델들 특성과 한계
- High-Accuracy Semantic Segmentation
- 인코더-디코더(encoder-decoder) 과정에서 다운샘플링(downsampling)이 디테일한 데이터를 손상시킬 수 있음.
- 보안을 위한 합성곱(dilated convolution)은 비연속적 메모리 접근(non-continuous memory access) 때문에 하드웨어 구현에 적합하지 않음.
- 실시간 추론(real-time inference)에 적합하지 않음.
- Real-time Semantic Segmentation
- 여전히 인코더-디코더 형태이기 때문에 너무 많은 지연, 최적화 문제가 있음.
- Two-branch network architecture(TBN)
- original detailed semantics와 contextual information을 직접적으로 합치는 것이 object 경계면을 surrounding pixel로 부식시킬 위험이 있음, small object에 인접하는 large object에 의해서 overwhelming 되는 현상 overshooting.
Real-time Semactic Segmentation의 TBN은 두개의 브랜치로 이루어져 있는데,
low-resolution input for high-level semanctic는 컨텍스트 정보(객체의 유형, 위치 등)를 처리 hight-resolution input for details는 세부적인 특징(객체의 경계, 미세한 구조 등)을 캡처한단다..
하지만 정보 결합이 적절치 않으면 성능이 저하될 수 있다는 문제점이 있다고 한다.
즉 2개의 브랜치로는 비교적 정확한 구분이 어려울 수 있다는 말인것 같다..
그리고 경계면 부식은 작은 객체 주변의 큰 객체가 경계 픽셀을 차지하게 돼서 작은 객체의 경계가 희미해지는 현상이라고 한다.
이 말은 큰 객체가 작은 객체 위로 덮어씌워지는 것처럼 보여질 수 있다는 뜻이다.
그리고 큰 객체가 작은 객체의 정보보다 강하게 나와서 상대적으로 작은객체의 인식이 제대로 되지 않는 현상을 오버슈팅(overshooting)이라고 한다.
(휴,, 기존꺼 이해하는것도 어렵다..ㅎ)
그럼 이제 본격적으로 PIDNet의 구조에 대해 알아보자...
PIDNet 구조
- 오버슈트 문제를 완화하기 위해 TBN에 보조 미분 분기(ADB)를 연결, 3branch로 만듦.
Controller | 역할 |
P(Propotional) | - local information에 집중. - 현재 신호에 초점을 맞춤. - 이전 상태값과 에러를 계산해 에러 크기에 비례해 수정(correction action) 하는 것. Ex) 현재 온도와 타켓 온도 차이에 비례해 현재 온도를 조정하는 온도 controller. |
I(Integral) | - context information 집계. - 모든 과거 신호 축적. - 시간이 지남에 따라 누적된 과거 오류를 고려해 수정, P만 쓰는것보다 안정적인 효과(overshoot 완화) |
D(Derivative) | - boundary를 잡기 위해 high frequency를 추출 - 신호가 작아지면 음수가 되어 오버슈트를 줄이는 댐퍼 역할을 함. - 입력신호의 변화에 민감한 제어 출력을 활성화해 오버슈트를 줄임. |
위에서 언급한 2branch의 문제와 오버슈팅 문제를 해결하기 위한 구조로 개선했다.
* local information: 이미지 내의 세부적인 정보와 구조, 주로 개별 픽셀 값과 주변 픽셀과의 관계를 통해 얻어지는 정보.
(Ex, 경계와 윤곽선 - 도로와 인도의 경계/자동차의 외곽선/사람의 실루엣 등을 정확하게 인식,
세부적인 특징 - 도로의 표면 텍스처/건물의 벽돌 패턴/나뭇잎의 디테일 등 정확하게 인식,
작은객체 - 표지판/신호등, 작은 동물 등을 놓치지 않고 정확하게 분류)
* context information: 이미지의 전반적인 상황 및 주변 환경과 관련된 정보.
(Ex, 전반적인 문맥 이해 - 도로 위에 자동차가 있을 가능성이 높지만 하늘에 자동차가 있을 가능성은 낮음,
객체간의 관계 - 사람은 도로위보다 인도위에 있을 가능성이 높음,
세부정보 보완 - 높은 해상도의 입력으로 세부 정보를 얻고 낮은 해상도의 입력으로 문맥 정보를 보강)
* High frequency: 이미지의 세부적인 변화와 관련된 정보를 의미, 주로 이미지의 급격한 밝기 변화나 색상 변화를 나타내는 정보, 이러한 고주파 정보는 객체의 경계, 텍스처 및 작은 디테일을 더욱 정확하게 인식하는데 도움됨.
(Ex, 경계 감지 - 객체간 간의 경계를 감지하는 데 매우 중요한 역할, 세그멘테이션 작업에서 각 객체를 정확하게 분리하는데 필수적,
세부 정보 보존 - 객체의 세부적인 특징을 보존,
정확한 클래스 예측 - 객체의 텍스처와 작은 디테일을 인식해 모델이 각 픽셀을 정확한 클래스에 할당할 수 있도록함.)
Loss 계산
- l_0: 첫번째 Pag 모듈의 output에 semantic head를 두고 semantic loss를 계산
- l_1: boundary head에서 boundary detection의 목적으로 loss 계산
- l_2: CE(Cross Entropy) loss
- l_3: Boundary Awareness CE Loss(BAS, 경계인식 CE 손실). boundary head의 output을 활용.
- 최종 loss는 각 loss에 가중치를 두어 linear combination한 결과값.
- 즉, semantic info와 boundary 등을 복합적으로 고려한 loss를 사용한다는 것.
이 수식은 이런 내용이구나.. 정도로 알고 넘어가면 될 것 같다..(개발자 입장에서..ㅎ 계산은 모두 라이브러리 함수가 해줄거니까..😝)
PAG (Pixel-wise Attention Guided)
- P branch에서 특징을 추출할 때, 중요한 정보를 지니는 I branch를 백업으로 사용하는 방식
- P branch가 I로부터 useful semantic features를 배워 압도되지(overwhelmed) 않도록 함.
- attention mechanism에 기초
- P와 I branch feature map의 각각에 해당하는 corresponding pixel을 정의
- 두 pixel이 같은 object에 속하는지의 확률 계산
- 확률이 높으면 I branch의 해당 feature map에 매칭되는 pixel을 더 신뢰
- PIDNet의 구조 안에서 원본 세부 정보와 컨텍스트 정보를 통합하는 데 도움을 줌.
- 세부 정보와 컨텍스트 정보의 조화: PIDNet은 실시간 시맨틱 분할에서 세부적인 경계 정보와 넓은 컨텍스트 정보를 효과적으로 결합하기 위해 PAG 모델을 도입함. PAG 모델은 각각의 픽셀에 대한 주의(attention)를 적용함으로써 더 정확한 분할을 가능하게 함.
- 경계 처리: 경계선에서의 정보를 더 정밀하게 처리하여 객체 경계 부식 문제를 줄이고, 세부적인 객체들도 명확하게 구분할 수 있도록 도움.
- 오버슈팅 문제 해결: 컨텍스트 정보가 지나치게 큰 객체에 영향을 미치지 않도록 조정하여 오버슈팅 문제를 완화하는 역할을 함.
PAPPM (Paralleled Auxiliary Pyramid Pooling Module)
- 다양한 semantic level에서 온 정보(local and global context)를 multi-scale pooling으로 뽑아 결합(concat)하는 것을 PPM(Pyramid Pooling Module)이라고 함.
- 기존 방식은 depth관련해서 paralllelized 될 수 없음 → 시간 소요, scale별로 너무 많은 channel
- DAPPM의 connection을 변경해 병렬화 → scale별로 channel 수를 줄임.
- PIDNet의 성능을 향상시키기 위해 중요한 역할
- 병렬 처리: 병렬화된 방식을 사용하여, 여러 컨텍스트 정보를 동시에 처리함.
- 세부 정보와 컨텍스트 정보의 결합: 세부 정보와 컨텍스트 정보를 효율적으로 결합하여 더 정확한 시맨틱 분할을 가능하게 함. 덕분에 PIDNet은 경계 부식 문제와 작은 물체가 큰 물체에게 압도되는 현상 등을 효과적으로 완화할 수 있음.
- 적용 범위: 주로 PIDNet의 소형 모델들(PIDNet-M 및 PIDNet-S)에서 사용되어, 성능과 효율성을 최적화해줌.
BAG(Balanced Attention Global)
- 상세 정보, context를 상호 보완해 boundary region을 합성하는 단계
- high-frequency area는 detail feature로, low-frequency area는 context feature로 채우는 과정
- boundary region에서 detail branch를 더 믿고, context feature는 나머지 area를 채우는데 사용(context는 detail이 떨어지기 때문)
- PIDNet의 성능을 향상시키기 위해 중요한 역할
- 균형 잡힌 주의 메커니즘: BAG 모듈은 이미지의 전역(global) 및 지역(local) 정보를 균형 있게 주의(attention) 메커니즘을 통해 처리합니다. 이를 통해 PIDNet이 객체의 경계와 컨텍스트 정보를 더 정확하게 구분할 수 있게 합니다.
- 다중 스케일 정보 통합: BAG 모듈은 다양한 스케일의 정보를 통합하여, 객체의 크기와 관계없이 고정밀 분할을 가능하게 합니다. 이는 특히 복잡한 장면에서 효율적입니다.
- 소형 모델에서의 적용: BAG 모듈은 PIDNet의 소형 모델, 예를 들어 PIDNet-M 및 PIDNet-S에서 주로 사용되어, 모델의 경량화와 함께 성능을 극대화합니다.
사실 아직도 100% 이해가 다 된거 같지는 않다,, 한.. 50% 했으면 잘 했을거 같은데..
그래도 전체적인 흐름은 파악한 것 같아서 점점 디테일한 지식도 채워나가면 좋을 듯..!
'스터디-ing > AI' 카테고리의 다른 글
[Deep learning] Overshooting & Overfitting (0) | 2025.01.21 |
---|---|
[PyTorch] 로지스틱 회귀(Logistic Regression) (0) | 2024.10.28 |
[PyTorch] 경사하강법(Gradient decent algorithm) (0) | 2024.10.15 |
[PyTorch] 선형회귀(Linear Regression), 손실함수 (0) | 2024.10.15 |
[PyTorch] 모델 구조 (0) | 2024.10.15 |