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로 처리하여 속도에 이점을 가져왔습니다.

2023년 9월 10일 일요일

NEMO2023 (카카오 모빌리티 테크 컨퍼런스) 후기

공식 사이트: https://nemo.kakaomobility.com/


카카오 모빌리티에서 주최하는 NEMO(NEXT MOBILITY) 2023 컨퍼런스가 개최되어서 참관하고 왔습니다. 

컨퍼런스는 아래의 스케쥴로 구성되어 있었습니다.


공통으로 듣는 세션과 세 가지중 한가지를 선택하여 듣는 일정이였습니다. 저는 사전등록으로 FUTURE 세션을 듣는것을 골랐습니다.




다과와 커피도 준비되어 있어 컨퍼런스를 본격적으로 보기 전에 배를 채울 수 있었습니다.


기조연설

기조연설은 카카오 모빌리티, 구글, 카카오 브레인에서 발표를 하였고 앞으로의 미래와 각 회사에서 구현중인 기술적인 내용 위주로 진행하였습니다.

카카오 브레인에서는 생성형 AI의 미래와 현재 연구 개발중인 AI 데모도 보여주었습니다.
카카오 모빌리티는 아무래도 플랫폼 기업이다보니 플랫폼 관점에서의 미래 위주로 발표를 진행했었고
구글은 간단하게 AI를 deploy할 수 있는 Big query, Duet AI를 소개하였습니다.
(사실 기조연설보다는 얼른 FUTURE 세션을 듣고 싶었습니다..)



FUTURE 세션





기조연설이 끝나고 간단한 다과가 셋팅되어 배를 또 채울 수 있었습니다.
첫 세션은 현재 카카오 모빌리티가 개발하고 있는 자율주행에 관한 내용이였습니다.
자율주행의 기술로 크게 인식, 측위, 주행, 시스템 최적화를 언급하였고 다음 세션에서 발표할 데이터 엔진도 언급하였습니다.
일반적으로 사용되 자율주행의 기술들인 segmentation, lidar를 이용한 point cloud 등의 기술들을 소개하였습니다.





사실 시간이 짧다보니 자세한 기술들에 대해서는 듣지 못했던점이 아쉽습니다.
대체로 "이런 이런 기술들을 사용했다" 하고 넘어가는 느낌이였습니다.

두 번째 세션에서는 데이터 엔진에대해 좀 더 자세히 설명하는 세션이였습니다.
모빌리티 플랫폼을 구축하여 데이터를 쌓고 이 데이터 기반으로 모델을 강화시키는 엔진을 의미하는듯 하였습니다.
그리고 텔레오퍼레이션 기술도 반영하여 자율주행하는 자동차가 멈추면 원격으로 문제를 해결해주는 기능도 소개하여 흥미롭게 들었습니다.


세번째 세션에서는 자율주행의 3D Object detection task에서 Domain shift 문제를 어떻게 해결하는지 교수님을 초빙하여 진행하였습니다.

자율주행에서 발생하는 여러 Domain shift현상들을 (날씨, 센서 상황, 데이터 수집 차량 환경, 나라의 차이 등) 해결하기위해 semi-supervised learning 방식으로 접근하였다고 합니다.

두 가지 단계로 구성되어있는데 1. Source domain과 Target domain의 차이를 줄이는 단계, 2. 레이블링 되지않은 데이터와 되어있는 데이터의 차이를 줄이는 단계로 구성되었다고 합니다.

위의 단계를 수행할 수 있는 모델 아키텍쳐로 구성하였고 Mixup augmentation으로 데이터를 증강시켰으며 Lidar data의 polar coordinate를 Target domain의 polar coordinate로 맞춰 학습이 이루어졌다고 합니다.

해당 방식으로 Waymo 데이터를 이용해 nuScenes 환경에서 SOTA를 달성할 수 있었다고 합니다.

https://youtu.be/WO-jG4UJrlg?t=1694 에서 영상이 공개되어 있으니 참고하면 좋을것 같습니다.

15분이라는 짧은 시간동안 많은 좋은 내용들을 전달해주셨습니다.


나머지 세션들도 플랫폼, 로봇, UAM 사업들을 소개하며 유익한 내용들을 전해주셨습니다.
앞으로도 이러한 컨퍼런스가 있으면 참여해서 다른 회사에서 집중하는 산업과 기술들의 트렌드를 따라가면 좋을것 같네요.

2022년 10월 8일 토요일

2022 Naver AI Rush

예선

1. 한 사람당 카드 30장이 주어지는데, 카드 종류는 R,G,B로 총 3종류이다.
    각 사람의 점수는 갖고있는 카드의 가장 적은 종류의 카드의 갯수가 점수가 된다.
    (R=15, G=5, B=10 을 갖고 있다면 G=5개가 가장 적기때문에 5점)
    각 사람이 다음 사람들과 교환할 수 있는 몇가지 규칙이 있는데 이것들을 구현하여
    사람들  점수의 합을 구하는 문제이다.
   

2. 문장과 단어가 있는데 문장에 단어를 끼워넣어야 하는데 규칙이 있다.
    이 규칙을 잘 구현하면 되는 문제인데 풀다가 조금 말려서 3번을 먼저 풀고 다시 2번을 풀었다.

3. 배열 100만개와 규칙 4가지가 주어지는데 이 규칙대로 값을 구하는 문제이다. 중간값, 구간합 개념정도만 알면 쉽게 풀 수 있다.

4. 5x5배열이 있고 각  grid마다 방향이 정해져있다. (상하좌우, 2종류의 대각선이였던것 같다.)
   5개의 돌을 놓을 수 있는데 단, 5개의 돌은 각 열과 행에 1개씩 어긋나게 배치해야한다.
   만약 서로 다른 두 돌들이 연속적인 대각선으로 연결이 되어있다면 적절하지 않은것이다.
   모든 경우의 수를 구하는 문제였다.
   

1라운드

- Data imbalance 문제를 해결할 때 under-sampling 방식만 적용한게 컸던것 같다. (참가자분들은 over-sampling방식을 사용) 데이터가 부족해지기 때문에 일반화 측면에서 성능이 낮아지는듯

- Focal loss는 잘 적용한것 같다

- Face detection 전처리를 적용하지 않고 해볼걸 그랬다

- Augmentation을 color, flip 정도로만 적용했는데 다른 augmentation도 적용을 했어야했다.

- 모델 변천사: resnet18 → efficientnet → resnext

- 개인적으로 대회 참여할 시간이 많이 없어서 시도를 많이 못했 (직장인의 한계)