NVIDIA Jetson TX1 기반의 사람 표정 판별을 위한 YOLO 모델 FPS 향상 방법 YOLO Model FPS Enhancement Method for Determining Human Facial Expression based on NVIDIA Jetson TX1원문보기
본 이 논문에서는 NVIDIA Jetson TX1에서 YOLO v2 모델의 정확도를 유지하면서 FPS를 개선하는 방법을 제안한다. 일반적으로, 딥러닝 모델에서는 연산량을 줄여 처리 속도를 높이기 위해 파라미터들을 실수형에서 정수형으로 변환하여 정수 연산을 통해 속도를 높이거나 네트워크의 깊이를 감소시키는 방법을 사용한다. 그러나 이 방법들은 인식 정확도가 떨어질 수 있다. 이 논문에서는 YOLO v2 모델을 이용해 표정인식기를 개발하고 정확도 유지 시키기 위해 정수 연산이나 네트워크 깊이 감소를 사용하는 대신, 다음 세 가지 방법을 통해 연산량 및 메모리 소모를 줄인다. 첫 번째, $3{\times}3$ 필터를 $1{\times}1$ 필터로 교체하여 각 Layer 당 매개 변수 수를 9 분의 1로 줄인다. 두 번째, TensorRT의 추론 가속 기능 중 CBR (Convolution-Add Bias-Relu)을 통해 연산량을 줄이고, 마지막으로 TensorRT를 사용하여 반복되는 동일한 연산구조를 가진 레이어를 통합하여 메모리 소비를 줄인다. 시뮬레이션 결과, 기존 YOLO v2 모델에 비해 정확도는 1 % 감소했지만 FPS는 기존 3.9 FPS에서 11 FPS로 282%의 속도 향상을 보였다.
본 이 논문에서는 NVIDIA Jetson TX1에서 YOLO v2 모델의 정확도를 유지하면서 FPS를 개선하는 방법을 제안한다. 일반적으로, 딥러닝 모델에서는 연산량을 줄여 처리 속도를 높이기 위해 파라미터들을 실수형에서 정수형으로 변환하여 정수 연산을 통해 속도를 높이거나 네트워크의 깊이를 감소시키는 방법을 사용한다. 그러나 이 방법들은 인식 정확도가 떨어질 수 있다. 이 논문에서는 YOLO v2 모델을 이용해 표정인식기를 개발하고 정확도 유지 시키기 위해 정수 연산이나 네트워크 깊이 감소를 사용하는 대신, 다음 세 가지 방법을 통해 연산량 및 메모리 소모를 줄인다. 첫 번째, $3{\times}3$ 필터를 $1{\times}1$ 필터로 교체하여 각 Layer 당 매개 변수 수를 9 분의 1로 줄인다. 두 번째, TensorRT의 추론 가속 기능 중 CBR (Convolution-Add Bias-Relu)을 통해 연산량을 줄이고, 마지막으로 TensorRT를 사용하여 반복되는 동일한 연산구조를 가진 레이어를 통합하여 메모리 소비를 줄인다. 시뮬레이션 결과, 기존 YOLO v2 모델에 비해 정확도는 1 % 감소했지만 FPS는 기존 3.9 FPS에서 11 FPS로 282%의 속도 향상을 보였다.
In this paper, we propose a novel method to improve FPS while maintaining the accuracy of YOLO v2 model in NVIDIA Jetson TX1. In general, in order to reduce the amount of computation, a conversion to an integer operation or reducing the depth of a network have been used. However, the accuracy of rec...
In this paper, we propose a novel method to improve FPS while maintaining the accuracy of YOLO v2 model in NVIDIA Jetson TX1. In general, in order to reduce the amount of computation, a conversion to an integer operation or reducing the depth of a network have been used. However, the accuracy of recognition can be deteriorated. So, we use methods to reduce computation and memory consumption through adjustment of the filter size and integrated computation of the network The first method is to replace the $3{\times}3$ filter with a $1{\times}1$ filter, which reduces the number of parameters to one-ninth. The second method is to reduce the amount of computation through CBR (Convolution-Add Bias-Relu) among the inference acceleration functions of TensorRT, and the last method is to reduce memory consumption by integrating repeated layers using TensorRT. For the simulation results, although the accuracy is decreased by 1% compared to the existing YOLO v2 model, the FPS has been improved from the existing 3.9 FPS to 11 FPS.
In this paper, we propose a novel method to improve FPS while maintaining the accuracy of YOLO v2 model in NVIDIA Jetson TX1. In general, in order to reduce the amount of computation, a conversion to an integer operation or reducing the depth of a network have been used. However, the accuracy of recognition can be deteriorated. So, we use methods to reduce computation and memory consumption through adjustment of the filter size and integrated computation of the network The first method is to replace the $3{\times}3$ filter with a $1{\times}1$ filter, which reduces the number of parameters to one-ninth. The second method is to reduce the amount of computation through CBR (Convolution-Add Bias-Relu) among the inference acceleration functions of TensorRT, and the last method is to reduce memory consumption by integrating repeated layers using TensorRT. For the simulation results, although the accuracy is decreased by 1% compared to the existing YOLO v2 model, the FPS has been improved from the existing 3.9 FPS to 11 FPS.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 NVIDIA Jetson TX1을 기반 으로 YOLO v2, YOLO v2-tiny 모델을 이용해 4 가지 표정을 실시간으로 구분 하는 딥러닝 모델을 구현 하였고, 정확도를 유지하면서 FPS를 향상 시키는 방안을 제안하였다. 그 결과 1%의 정확도 하락과 7.
이 논문에서는 Jetson TX1에서 YOLO v2 모델의 FPS를 향상 시키기 위해 기존 네트워크의 3x3 Convolution Filter 중 일부를 1x1 Convolution Filter로 대체하여 모델의 학습 파라미터와 Feature Map의 개수를 줄여 모델의 크기와 연산량을 줄이는 방안과 NVIDIA의 추론 가속기인 TensorRT의 CBR 연산과 반복 되는 Layer의 통합 연산을 이용하여 메모리 소모량과 연산량을 감소시켜 FPS를 향상 시키는 방법을 제안한다.
제안 방법
FPS 향상 실험은 1x1 filter를 적용하여 변경 된 네트워크와 기본 네트워크를 동일하게 학습 시켜 실험을 진행 하였다. 또한 일반적인 연산량 개선 방법 중 네트워크의 깊이를 축소한 방법인 YOLO-tiny와 필터 변경과 TensorRT가 적용 된 최종 개선 모델과 정확도 및 FPS를 비교 하였다.
YOLO 모델은 Darknet이라는 자체 플랫폼에서 C언어를 기반으로 작성이 되어 있기 때문에 Caffe 타입으로 변환을 위해서는 각 Layer의 필터나 기능들을 Caffe 코드로 기입 해야 한다. Layer들 중 Activation Function으로 사용하는 Leaky Relu는 TensorRT에서 지원을 하지 않기 때문에 Relu와 Scale, Eltwise를 통해 근사하는 방안을 제안한다.
세 번째, TensorRT를 적용하기 위해 YOLO의 Cfg파일과 파라미터가 기록되어 있는 Weight 파일을 Caffe 구조로 변경 하였다. YOLO v2의 Layer 중 Leaky Relu와 이전 Layer의 결과값을 얻어와 합쳐서 연산 하는 route, reorg의 경우 TensorRT에서 지원을 하지 않기 때문에 Leaky Relu는 Relu+Scale+Eltwise의 조합으로 구성 하였으며, route와 reorg Layer는 Concat과 Reshape을 통해 구현 하였다.
실험을 위해 Jetson TX1에서 YOLO v2 모델과 YOLO v2-tiny 모델, 최적화 모델을 각각 Happiness, Sadness, Surprise, Anger의 4 가지 표정을 판별 할 수 있게 구현하였으며, USB 카메라를 통해 실시간으로 표정판별을 진행하며 FPS를 측정하였다. 기본 YOLO v2 모델과 YOLO v2-tiny 모델을 이용한 표정인식기 구현은 YOLO 공식 github의 오픈소스를 이용하여 표정 인식 데이터셋을 재학습 하여 구현하였고, 최적화 모델은 다음 세가지 과정을 통해 진행하였다.
다음으로는 Jetson TX1 에서의 실시간성을 판별 하기 위해서 웹캠을 연결하여 FPS를 판별해 보았다. 웹캠을 통하여 실시간으로 이미지를 판별하게 했을 때 YOLO v2 모델은 평균 3.
두 번째, 수집한 표정인식 데이터셋을 총 15,000번 학습시키고, 각 1000번 당 파라미터 값를을 파일로 저장해두었다.
이 논문에서는 Jetson TX1에서 YOLO v2 모델을 기반으로 사람의 표정 인식기를 구현하고이 정확도를 최대한 유지 하면서 FPS를 높이기 위해 그림 2와 같이 3x3 Convolution Filter를 1x1 filter로 대체 하여 네트워크의 깊이를 원래 네트워크와 동일하게 유지하면서 파라미터를 줄여 FPS를 향상 시키는 방법과 TensorRT의 CBR 연산과 반복 Layer 통합 연산을 이용한 가속을 통해 FPS를 향상 시키는 방법을 제안한다. 또한 TensorRT를 적용하기 위해 YOLO의 네트 워크 정의 파일과 Weight 파일을 Caffe 프레임으로 변환하는 방법을 제안한다.
FPS 향상 실험은 1x1 filter를 적용하여 변경 된 네트워크와 기본 네트워크를 동일하게 학습 시켜 실험을 진행 하였다. 또한 일반적인 연산량 개선 방법 중 네트워크의 깊이를 축소한 방법인 YOLO-tiny와 필터 변경과 TensorRT가 적용 된 최종 개선 모델과 정확도 및 FPS를 비교 하였다.
세 번째, TensorRT를 적용하기 위해 YOLO의 Cfg파일과 파라미터가 기록되어 있는 Weight 파일을 Caffe 구조로 변경 하였다. YOLO v2의 Layer 중 Leaky Relu와 이전 Layer의 결과값을 얻어와 합쳐서 연산 하는 route, reorg의 경우 TensorRT에서 지원을 하지 않기 때문에 Leaky Relu는 Relu+Scale+Eltwise의 조합으로 구성 하였으며, route와 reorg Layer는 Concat과 Reshape을 통해 구현 하였다.
실험을 위해 Jetson TX1에서 YOLO v2 모델과 YOLO v2-tiny 모델, 최적화 모델을 각각 Happiness, Sadness, Surprise, Anger의 4 가지 표정을 판별 할 수 있게 구현하였으며, USB 카메라를 통해 실시간으로 표정판별을 진행하며 FPS를 측정하였다. 기본 YOLO v2 모델과 YOLO v2-tiny 모델을 이용한 표정인식기 구현은 YOLO 공식 github의 오픈소스를 이용하여 표정 인식 데이터셋을 재학습 하여 구현하였고, 최적화 모델은 다음 세가지 과정을 통해 진행하였다.
이 논문에서는 Jetson TX1에서 YOLO v2 모델을 기반으로 사람의 표정 인식기를 구현하고이 정확도를 최대한 유지 하면서 FPS를 높이기 위해 그림 2와 같이 3x3 Convolution Filter를 1x1 filter로 대체 하여 네트워크의 깊이를 원래 네트워크와 동일하게 유지하면서 파라미터를 줄여 FPS를 향상 시키는 방법과 TensorRT의 CBR 연산과 반복 Layer 통합 연산을 이용한 가속을 통해 FPS를 향상 시키는 방법을 제안한다. 또한 TensorRT를 적용하기 위해 YOLO의 네트 워크 정의 파일과 Weight 파일을 Caffe 프레임으로 변환하는 방법을 제안한다.
이 후 1x1 Filter와 TensorRT를 적용 했을 때에는 정확도가 1% 하락 하였으며, 2.1 FPS의 상승 효과를 얻어 6 FPS의 처리속도를 기록 했으며, 최종적으로 TensorRT를 적용 하였을 때는 정확도의 하락 없이 5 FPS가 상승 하여 11 FPS의 처리속도를 기록 하였다. 표 4는 기본 YOLO v2 모델과 개선된 모델의 FPS와 정확도 비교를 보여 준다.
첫 번째, YOLO v2 모델의 네트워크 구조가 정의된 Cfg 파일에서 해당하는 3x3 필터를 1x1 로 변경하였다.
테스트는 표정 마다 이미지 크기를 다르게 하여각 110장씩, 총 440장의 데이터를 준비하였다. 테스트는 총 10번이 진행 되었으며, 각 정확도를 합하여 평균치를 구하였다. 표 3의 결과를 보면 tiny 모델의 경우 가장 높은 정확도가 85% 였으며, YOLO v2와 동일하게 5,000번을 학습 시킨 모델의 경우 15%의 정확도 차이를 보였다.
필수 요소는 각 이미지 별로 5개의 채널을 채우기 위해 객체의 x, y 중심좌표와 Bounding Box의 넓이와 높이를 0 ~ 1 사이의 값으로 매핑 했으며, 마지막에는 이미지를 Labeling 하여 이미지와 똑같은 이름으로 Text 파일을 만들어 기록하였다.
대상 데이터
표정 인식기를 구현 하기 위해 총 1870장의 이미지를 수집하였다. 이중 1430장을 학습 시켰으며, 나머지 440장의 이미지를 가지고 테스트를 진행 하였다. 구현에 사용한 416x416 모델은 학습을 진행 하기 전에 사진을 416x416으로 resize 하므로 픽셀 정보 손상을 방지 하기 위해 416x416 이상의 이미지 만을 학습 시켰다.
테스트는 표정 마다 이미지 크기를 다르게 하여각 110장씩, 총 440장의 데이터를 준비하였다. 테스트는 총 10번이 진행 되었으며, 각 정확도를 합하여 평균치를 구하였다.
표정 인식기를 구현 하기 위해 총 1870장의 이미지를 수집하였다. 이중 1430장을 학습 시켰으며, 나머지 440장의 이미지를 가지고 테스트를 진행 하였다.
이론/모형
NVIDIA 플랫폼에서는 Deepstream, cuDNN, TensorRT 등 다양한 추론 가속기를 지원 한다. 본 논문에서는 이중 TensorRT를 이용하였다.
성능/효과
Geforce GTX Titan X를 이용한 위 세가지 모델에 대한 MAP와 FPS에 관한 실험을 보면 20개의 class를 가진 Pascal VOC Data set을 학습하여 비교한 결과 ResNet을 기반으로 한 Faster R-CNN의 경우 MAP는 76.4, FPS는 5가 나왔으며, SSD300은 74.3의 MAP와 46 FPS를 기록 하였다. YOLO v2의 경우 학습 하는 이미지의 크기 마다 차이를 보였는데 가장 큰학습 이미지 크기인 544x544 모델의 경우 78.
기본 네트워크는 30단의 모든 Layer의 연산을 수행 하기 때문에 정확도는 가장 높지만 FPS는 상당히 낮은 모습을 보인다. YOLO v2-tiny 모델은 정확도는 최적화 네트워크 보다 높지만 Layer를 기존 30단에서 15단으로 줄여 정확도는 기본 네트워크에 비해 7.5 % 감소 하였다. 그에 반해 최적화 네트워크는 11 FPS를 기록하였지만 기본 네트워크의 정확도와 1% 밖에 차이가 나지 않는 모습을 보여준다.
본 논문에서는 NVIDIA Jetson TX1을 기반 으로 YOLO v2, YOLO v2-tiny 모델을 이용해 4 가지 표정을 실시간으로 구분 하는 딥러닝 모델을 구현 하였고, 정확도를 유지하면서 FPS를 향상 시키는 방안을 제안하였다. 그 결과 1%의 정확도 하락과 7.1 FPS의 향상 효과를 얻을 수 있었다. 반면 네트워크의 깊이를 축소 시키는 YOLO v2-tiny 모델은 10.
이 실험을 통해 정확도를 유지하며 처리 속도를 향상 시키기 위해서는 네트워크의 깊이를 유지하는 방안이 효율적임을 알 수 있었다. 또한 임베디드 시스템의 연산 가속을 위해서는 네트워크 구조를 수정하는 것 외에도 연산 자체의 메모리 소모를 줄이는 방식이 조금 더 큰 처리 속도를 개선 할 수 있다는 것을 알 수 있었다.
5%의 큰 하락을 보였다. 이 실험을 통해 정확도를 유지하며 처리 속도를 향상 시키기 위해서는 네트워크의 깊이를 유지하는 방안이 효율적임을 알 수 있었다. 또한 임베디드 시스템의 연산 가속을 위해서는 네트워크 구조를 수정하는 것 외에도 연산 자체의 메모리 소모를 줄이는 방식이 조금 더 큰 처리 속도를 개선 할 수 있다는 것을 알 수 있었다.
YOLO 모델의 정확도를 최대한 유지 하면서, 속도를 향상 시키기 위해 1x1 Convolution Filter를 이용 한다. 이를 통해 네트 워크의 정확도의 직접적으로 영향을 끼치는 Layer 들의 깊이를 유지 하면서 기존 3x3 Filter가 가진 9 x Depth 개의 파라미터를 1 x Depth 개의 파라미터로 대체 하여 모델의 크기를 줄이며, 예측과 학습에서의 연산량을 줄인다. 표 2에서 나타내듯이총 7개의 3x3 Filter를 1x1로 대체 하여 각 Layer 별로 파라미터의 개수를 9분의 1로 줄였으며, 총 파라미터 개수는 기존 69,965 개에서 41,805 개로 40.
표 3의 결과를 보면 tiny 모델의 경우 가장 높은 정확도가 85% 였으며, YOLO v2와 동일하게 5,000번을 학습 시킨 모델의 경우 15%의 정확도 차이를 보였다. 이를 통해 네트워크의 깊이를 줄이는 방법이 정확도에 큰 영향을 미친다는 것을 확인 할 수 있었다.
이를 통해 네트 워크의 정확도의 직접적으로 영향을 끼치는 Layer 들의 깊이를 유지 하면서 기존 3x3 Filter가 가진 9 x Depth 개의 파라미터를 1 x Depth 개의 파라미터로 대체 하여 모델의 크기를 줄이며, 예측과 학습에서의 연산량을 줄인다. 표 2에서 나타내듯이총 7개의 3x3 Filter를 1x1로 대체 하여 각 Layer 별로 파라미터의 개수를 9분의 1로 줄였으며, 총 파라미터 개수는 기존 69,965 개에서 41,805 개로 40.24%를 감소시켰다.
테스트는 총 10번이 진행 되었으며, 각 정확도를 합하여 평균치를 구하였다. 표 3의 결과를 보면 tiny 모델의 경우 가장 높은 정확도가 85% 였으며, YOLO v2와 동일하게 5,000번을 학습 시킨 모델의 경우 15%의 정확도 차이를 보였다. 이를 통해 네트워크의 깊이를 줄이는 방법이 정확도에 큰 영향을 미친다는 것을 확인 할 수 있었다.
YOLO v2 모델의 경우 5,000번의 학습 보다 10,000번을 학습 시킨 모델의 정확도가 더 낮은 이유는 Overfitting이 일어난 것으로 추정 된다. 학습 데이터셋을 과도하게 학습하여 분류 곡선이 일반화 되지 않아 학습 시키지 않은 테스트셋에 대해 낮은 정확도를 보였다. 그림 4는 테스트 이미지에 대한 결과 이다.
후속연구
향후 처리속도를 높이기 위한 연구 방향은 Quantization의 적용과 네트워크 프루닝을 들수 있다. YOLO는 각 파라미터에 대해 민감한 편이기 때문에 Quantization을 이용하면 정확도의 큰 하락을 겪을 수도 있다.
질의응답
핵심어
질문
논문에서 추출한 답변
YOLO v2가 임베디드 시스템에서 객체인식 모델로 활용하기에 적합한 이유는 무엇인가?
YOLO 모델은 현재 세 번째 버전인 YOLO v3까지 개발이 되었다. YOLO 모델 중 두 번째 버전인 YOLO v2는첫 번째 모델의 7x7 필터를 3x3과 1x1로 변경 하고 연산에서 상당한 시간을 차지하는 Fully-Connected를 Fully-Convolution으로 대체하고 Concat 연산 등을 적용함으로써 속도에 초점을 두며, 소폭의 정확도를 상승 시켰다[4]. 이 장점 때문에 컴퓨팅 파워가 PC에 비해 낮은 임베디드 시스템에서 객체인식 모델로 활용 하기에 적합하다.
객체인식(Object Detection) 분야는 무엇인가?
57%로 사람보다 적은 오차를 기록 하였는데[1], 이미 사진 한 장에 대한 판별 정확도는 발전이 더딘 완성단계에 와 있음을 알 수 있다. 따라서 최근 연구는 이미지에서 객체들을 찾고 무엇인지 판별 하는 객체인식(Object Detection) 분야 등으로 확대 되고 있다. 대표적인 모델로는 Faster-RCNN, SSD(Single Shot Detector), YOLO(You Only Look Once)가 있다.
임베디드 시스템에서 딥러닝을 적용할 때 생기는 제약사항은 무엇인가?
임베디드 시스템에서는 딥러닝을 적용함에 있어 서버나 PC 기반의 환경 보다 낮은 성능이나 저전력, 낮은 메모리 소모량 등의 다양한 제약사항을 갖는다[5]. 이를 극복 하기 위해서는 기본적으로 비교적 낮은 연산량을 가지는 모델을 선정해야 하며, 메모리 소모량을 해결 하기 위해 네트워크 자체의 크기와 학습과 예측에 사용 되는 파라미터들을 최소화 해야 한다.
Ren, S., He, K., Girshick, R., Sun. J, "Faster r-cnn: Towards real-time object detection with region proposal networks. In Advances in neural," information processing systems, pp. 91-99, 2015
Redmon, J., Divvala, S., Girshick, R., Farhadi, A, "You only look once: Unified, real-time object detection," Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 779-788, 2016
M.H Lee, W.C Kang, "Performance Enhancement and Evaluation of a Deep Learning Framework on Embedded Systems using Unified Memory," KIISE Transactions on Computing Practices, Vol.23, No.7, 2017
Szegedy, C., Liu, W., Jia, Y., Sermanet, P., Reed, S., Anguelov, D., Rabinovich, A., "Going deeper with convolutions," Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 1-9, 2015
Gong, Y., Liu, L., Yang, M., Bourdev, L., "Compressing deep convolutional networks using vector quantization," arXiv preprint arXiv:1412.6115, 2014
Han, S., Mao, H., & Dally, W. J., "Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding,"arXiv preprint arXiv:1510.00149, 2015
※ AI-Helper는 부적절한 답변을 할 수 있습니다.