perception DL process
간단하게 딥러닝 프로세스를 살펴보자.
딥러닝이 perception에서 어떻게 진행되는지
- data labeling
- 데이터 레이블링의 퀄리티가 중요하다. bbox가 객체에 fit하게 잘 되어 있는지, segmentation이라면 영역이 잘 설정되어 있는지가 중요하다. 또는 클래스를 잘못 지정할 경우 성능에 영향을 끼친다.
- design DL model
- 러프하게 모델을 선택해야 한다. OD이면 yolo인지, SSD, RCNN 등등의 모델 기준을 삼고, 성능을 높일만한 레이어 추가, 활성 함수 변경 등의 기법을 적용해서 성능을 높인다. 중요한 것은 자율주행에는 작은 칩을 사용하므로 모델이 무거우면 안된다.
- loss function, find optimal hyperparameters
- loss : celoss, mseloss, iouloss, focal loss
- hyperparameters : lr, optimizer, loss weight(cls loss, bbox loss, objness loss)
- evaluate models to satisfy KPI(평가 지표)
객체를 잘 찾는지에 대한 평가 지표를 적용한다.
- recall, precision, PR curve
- model compression
model compression
SOC(system on chip) in self driving car, 즉 자율주행 안에 들어가는 칩을 말하는데, 데스크탑에 들어가는 gpu가 아닌 chip이다.
light architecture
MAC(Multiply Add Calculation), y = wx + b 의 연산 하나를 1MAC이라 한다. 즉 MAC : OC * OH * OW * KH * KW * IC
가벼운 아키텍쳐를 만들기 위해서는 MAC을 줄여야 한다. 그를 위해 kernel size를 줄일 수 있다.
또는 resolution scaling, depth scaling, width scaling을 감소시키는 방법이 있다.
- resolution scaling : 1920 x 1080 → 1280 x 720
- depth scaling : layer의 수
- width scaling : 각 layer의 채널 수
pruning
pruning이란 결과에 영향을 미치지 않는 가지들을 삭제시키는 것을 말한다. layer단위로 지울수도 있고, channels 단위로 지울수도 있다. gpu에서만 돌리면 가능한데, chip마다 pruning이 지원을 하는 칩도 있고, 지원이 안되는 칩도 있다.
Quantization
precision 조정을 통해 lower bit 연산을 하는 것을 말한다. 예를 들어 float32를 float16이나 float8로 변환하면 연산이 당연히 빨라진다. float를 int로 변환할 때 생기는 rounding error를 최대한 줄이는 것이 중요하다. 그렇다면, weight들이 어떻게 표현되어 있는지에 대한 히스토그램을 봐야 하는데, 전체를 -1~1로 범위를 잡아서 하는데, 대부분의 weight들이 -0.25~0.25 사이에서만 존재한다면 더 정교한 값으로 변환이 어려울 수 있다. 그래서 최대 최소 값을 적절하게 맞춰서 quantization을 수행하여 정교한 변환을 수행한다.
fuse modules를 수행하여 연산량을 줄인다. 이는 아래 batchNorm folding에서 더 자세히 설명하겠다.
batchNorm folding
기존의 conv layer는 conv + batchNorm + ReLU 순으로 진행되는데, 이를 Conv 와 BN layer를 합쳐버리면 연산이 줄어들고, 속도가 증가할 것이다.
conv 연산의 수식은 $ y = wx + b $이고, BN 연산의 수식은 $ y = gamma * (x - mean) / var + beta $이다.
이를 합치면, $ y = ((gamma * w) / var) * x + gamma(b - mean) / var + beta $ 이 된다.
Deploy models
pytorch model을 deploy할 때는 ONNX , TensorRT, SDK, naive C/C++ 등을 사용하여 target device에 맞게 내보낸다. 여기서는 ONNX와 TensorRT를 다뤄볼 것이다.
ONNX
ONNX(Open Neural Network Exchange)로 다른 프레임워크의 형태로 변환하거나 deploy를 할 때 사용할 수 있는 프레임워크이다
TensorRT
TensorRT를 사용하면 모델을 손해보지 않고도, 딥러닝 모델을 low latency로 이동이 가능하고, 추론에 적용이 가능하다.