Model Merging
모델 병합이 여러 사전 학습된 모델을 하나로 결합하는 방법을 알아보십시오. 추가 지연 시간 없이 성능을 높이기 위해 Ultralytics YOLO26 가중치를 융합하는 방법을 확인해 보십시오.
모델 병합은 여러 사전 훈련된 모델의 학습된 파라미터(가중치)를 단일한 통합 모델로 결합하는 machine learning (ML)의 혁신적인 기법입니다. 전통적인 다중 모델 설정과 달리, 병합은 파라미터 공간에서 model weights를 직접 융합합니다. 이를 통해 실무자는 여러 모델을 동시에 실행하는 데 따르는 메모리 및 연산 비용 없이, 서로 다른 태스크나 데이터셋으로 파인튜닝된 여러 모델의 특화된 지식을 결합할 수 있습니다.
가중치에 연산을 직접 적용함으로써, 모델 병합은 단일 네트워크의 아키텍처적 풋프린트를 유지합니다. 이는 inference latency를 줄이고 메모리를 절약하는 것이 중요한 엣지 디바이스에 고급 computer vision (CV) 파이프라인을 배포할 때 특히 유용합니다.
모델 병합 구분하기#
모델 병합을 Model Ensemble 및 Transfer Learning과 같은 관련 개념과 구분하는 것이 도움이 됩니다.
- 모델 병합 vs. 모델 앙상블: 모델 앙상블은 개별 네트워크를 분리된 상태로 유지하며 추론 중에 각 네트워크를 실행하고 출력값을 평균화합니다. 이는 정확도를 높이지만 계산 오버헤드를 배가시킵니다. 모델 병합은 추론 전에 실제 가중치를 결합하므로, 추가적인 런타임 계산이 필요 없는 단일 모델을 생성합니다.
- Model Merging vs. Transfer Learning: 전이 학습은 베이스 모델을 가져와 새로운 데이터셋으로 추가 훈련하는 것을 포함합니다. 모델 병합은 추가적인 fine-tuning이 필요하지 않으며, 수학적 연산을 사용하여 이미 훈련된 모델들을 융합합니다.
일반적인 기술#
최근 academic research on arXiv에서 탐구된 바와 같이, 연구원들은 네트워크의 기본 기능을 손상시키지 않으면서 가중치를 효과적으로 결합하는 여러 가지 방법을 개발했습니다.
- Weight Averaging: 동일한 아키텍처를 공유하는 여러 모델의 가중치 평균을 구하는 가장 단순한 방법입니다.
- 작업 산술(Task Arithmetic): 파인튜닝된 모델과 그 기본 모델 간의 차이인 "작업 벡터"를 더하거나 빼서 특정 동작을 결합하거나 제거하는 기술입니다.
- TIES-Merging: 중복 값을 제거하고 모델 전반에서 일관된 부호를 선택하여 매개변수 간섭을 해결함으로써 다양한 작업에서 성능을 유지하는 고급 접근 방식입니다.
실제 애플리케이션 사례#
모델 병합은 처음부터 재학습할 필요 없이 일반화된 시스템을 구축하는 데 매우 효과적입니다.
- Autonomous Vehicles: 자율주행 차는 Ultralytics YOLO26 베이스 모델을 사용할 수 있습니다. 엔지니어는 미세한 보행자 움직임을 감지하도록 하나의 모델 버전을 독자적으로 훈련하고, 복잡한 도로 표지판을 읽도록 다른 버전을 훈련할 수 있습니다. 이 두 모델을 병합하면 추론 시간을 두 배로 늘리지 않고도 두 가지 태스크를 동시에 처리하는 단일의 고성능 감지기가 만들어집니다.
- AI in Healthcare: 의료 영상 분야에서, 서로 다른 연구 병원들은 엄격한 데이터 프라이버시법으로 인해 특화된 로컬 데이터셋(예: 하나는 MRI 스캔용, 다른 하나는 CT 스캔용)으로 모델을 파인튜닝할 수 있습니다. 모델을 안전하게 병합함으로써 연구원들은 다양한 데이터 분포의 이점을 활용하는 종합적인 진단 도구를 만들 수 있습니다.
예시: 단순 가중치 평균화#
PyTorch를 사용하여 기본 모델 병합을 쉽게 수행할 수 있습니다. 다음 예시는 동일한 구조를 가진 두 모델의 상태 사전(state dictionary)을 평균화하는 방법을 보여줍니다.
import torch
# Load the weights (state dicts) from two identical architectures
weights_a = torch.load("yolo26_task1.pt")["model"].state_dict()
weights_b = torch.load("yolo26_task2.pt")["model"].state_dict()
# Perform simple weight averaging
merged_weights = {k: (weights_a[k] + weights_b[k]) / 2.0 for k in weights_a.keys()}
# Save the newly merged model weights
torch.save({"model": merged_weights}, "yolo26_merged.pt")데이터셋 주석, 훈련, 배포의 복잡한 워크플로우를 간소화하려는 팀을 위해 Ultralytics Platform은 엔드투엔드 비전 AI 프로젝트를 손쉽게 관리할 수 있는 직관적인 인터페이스를 제공합니다.






