파이넷츠프레소의 가지치기 기법을 활용한YOLOv5-L의 실시간 처리 속도 향상
인공 신경망은 뛰어난 성능으로 잘 알려져 있지만, 실제 상황에서 효과적으로 활용하려면 고급 컴퓨팅 자원이 필요합니다. 최근에는 일상적인 상황에 사용할 수 있는 경량화된 신경망에 대한 수요가 증가하고 있습니다.
이러한 필요를 충족하기 위해 노타는 몇 줄의 코드만으로 인공 신경망을 가속화할 수 있는 사용자 친화적인 라이브러리 형태의 넷츠프레소(NetsPresso®)를 도입했습니다. 이번 포스팅에서는 파이넷츠프레소(PyNetsPresso)를 활용하여 YOLOv5-L의 속도를 실시간 수준으로 향상시키는 방법을 소개하겠습니다. 또한, 그 성능을 평가하여 해당 기술의 기능을 종합적으로 이해하실 수 있도록 설명드리겠습니다.
경량화된 YOLOv5 모델을 만드는 과정은 다음과 같습니다:
넷츠프레소에서 제공하는 YOLOv5 저장소를 사용하여 YOLOv5-L 모델을 학습시킵니다.
저장소는 여기서 확인하실 수 있습니다: [링크].파이넷츠프레소를 사용하여 경량화된 모델을 생성합니다.
1단계에서 제공된 저장소를 이용하여 경량화된 모델을 재학습시킵니다.
보다 자세한 지침은 다음 링크를 참고하시기 바랍니다: [링크].
저희는 VOC 데이터셋을 사용하여 예비 실험을 수행하였으며, Jetson Xavier에서 TensorRT로 변환한 후 평균 100번의 측정을 통해 지연 시간을 계산했습니다.
요약 표: 이 아티클에서 다룬 YOLOv5-L 실험 결과
파이넷츠프레소가 경량화된 인공 신경망 구축에 어떻게 도움이 되는지를 이해하는 것이 중요합니다. 그 핵심은 의존성 인식 가지치기(Dependency Aware Pruning, 이하 DAP)라는 과정에 있습니다. 이 기법은 가지치기 과정에서 신경망의 상호 연결성을 간과하는 전통적인 가지치기 방법과 뚜렷한 차이를 보입니다. DAP는 네트워크 내의 상호 의존성을 고려하여 매개변수를 전략적으로 제거함으로써 성능을 실질적으로 가속화할 수 있습니다. 반면, 기존 가지치기 방법은 이러한 네트워크 상호 의존성을 무시하기 때문에 유사한 성능 향상을 달성하는 데 자주 실패합니다.
지연 시간 비교: 전통적 가지치기 vs. 의존성 인식 가지치기(DAP)
의존성 인식 가지치기(DAP)
전통적 가지치기와 달리 파이넷츠프레소에서 제공하는 DAP는 더 효과적인 해결책을 제시합니다. DAP를 사용하면 인공 신경망의 계층 간 의존성을 추적하고, 불필요한 매개변수를 제거할 수 있습니다. 이를 통해 지연 시간과 네트워크 크기를 줄여, 더 효율적이고 최적화된 네트워크를 만들 수 있습니다.
파이넷츠프레소의 DAP 기능은 매우 유연하여 간단한 네트워크 구조에만 국한되지 않습니다. 이 기능은 스킵-연결, 병합, 분할 기능과 같은 신경망 내의 복잡한 작업도 처리할 수 있습니다. 이러한 유연성 덕분에 다양한 인공 신경망 아키텍처를 효과적으로 최적화할 수 있습니다.
실습 시작
실습을 시작하기 전에 다음 세 가지 전제 조건이 갖추어져야 합니다:
앞서 언급된 저장소를 사용해 YOLOv5-L모델이 학습되어야 합니다.
파이넷츠프레소에 액세스할 수 있는 활성화된 계정이 필요합니다.
파이넷츠프레소 라이브러리가 로컬 시스템에 설치되어 있어야 합니다.
저희는 VOC 데이터셋으로 YOLOv5-L 모델을 학습시켰습니다. 계정을 만들려면 py.netspresso.ai를 방문하세요.
마지막으로, 다음 단계를 따라 파이넷츠프레소 라이브러리를 설치할 수 있습니다:
준비가 완료되면 필요한 모듈을 불러와 파이넷츠프레소를 사용합니다.
넷츠프레소를 사용하여 경량화된 모델을 생성하려면 다음 두 단계를 따라하면 됩니다.
첫째, 압축 과정을 위해 컴프레서를 생성한 후, 학습된 인공 신경망을 업로드하세요. 그러면 업로드된 모델에 여러 번 액세스할 수 있는 고유한 'model.model_id'가 생성됩니다.
모든 스크립트 실행이 완료된 후, 이전에 업로드한 인공 신경망의 무게를 더 줄이고 싶다면, 아래에 표시된 것처럼 'model_id'를 사용해 업로드된 모델에 액세스하고 동일한 방식으로 가지치기를 계속 진행할 수 있습니다.
저장된 인공 신경망은 최적의 성능을 회복하기 위해 재학습이 필요합니다. 노타는 이러한 요구를 충족하기 위해 공식 YOLOv5 저장소를 기반으로 한 수정된 저장소 형태의 솔루션을 개발했습니다. 이 저장소는 기존 YOLOv5와 동일하게 작동하므로 모든 작업이 원활하고 간단하게 이루어집니다. 추가 정보는 여기서 확인하실 수 있습니다: [링크].
재학습 과정에 대한 코드는 다음과 같습니다.
이렇게 하면 다양한 시나리오에서의 실험과 실제 사용을 위한 경량 인공 신경망을 얻을 수 있습니다.
저희는 파이넷츠프레소의 가지치기 기법을 사용해 YOLOv5-L의 성능을 2.63배 향상시켰으며, 성능 저하는 단 2%에 그쳤습니다. 파이넷츠프레소는 필터 분해를 통해 가지치기와 신경망 가속화를 제공합니다. 파이넷츠프레소를 활용한 인공 신경망 가속화, 실제 적용 사례, 그리고 경량 신경망 생성에 대해 더 알고 싶다면, 노타 홈페이지를 방문해 주세요!