본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 06. 02. 15:41

YOLOv5를 CoreML로 변환하기. 디코딩 레이어(Decode Layer)도 추가한다.

요약

YOLOv5 모델을 iOS 환경에서 효율적으로 사용하기 위해 CoreML 형식으로 변환하는 방법을 설명합니다. 단순 변환을 넘어 디코딩 레이어와 NMS(Non-Max Suppression)를 추가하여 Vision 프레임워크와 호환되도록 최적화하는 과정을 다룹니다.

핵심 포인트

  • YOLOv5를 CoreML로 변환하여 iOS 기기에서 활용 가능
  • 디코딩 레이어 추가로 방대한 출력 데이터 압축
  • NMS 레이어 삽입을 통해 Vision 프레임워크 호환성 확보
  • PyTorch 모델에서 CoreML로의 변환 스크립트 제공

YOLOv5를 iOS에서 사용하는 방법입니다

YOLOv5는 객체 탐지 (Object Detection) 머신러닝 모델입니다.

iPhone이나 iPad에서 사용할 수 있도록 CoreML 형식으로 변환합니다.

변환한 모델은 그대로는 사용할 수 없습니다

CoreMLTools로 심플하게 변환한 YOLO 모델의 출력은 클래스별로 방대한 양의 박스(Box)이므로, 그대로는 사용할 수 없습니다.

디코딩 (Decode)용 레이어와 Non-Max Suppression (NMS) 레이어를 추가하여, 신뢰도가 높은 박스의 좌표를 압축할 필요가 있습니다.

이러한 처리를 함으로써 iOS의 Vision 프레임워크에서 다룰 수 있게 되며, 또한 서두의 이미지와 같은 간단한 파일 미리보기 기능을 사용할 수 있게 됩니다.

iOS에서 사용할 수 있도록 모델을 편집하는 스크립트가 여기 있습니다

변환 완료된 모델 (COCO 데이터셋)은 여기 있습니다.

독자적인 데이터셋으로 트레이닝한 YOLOv5 모델도 이 변환 스크립트를 통해 CoreML 형식으로 만들 수 있습니다.

변환 코드 해설

YOLOv5 리포지토리 (Repository) 내에 있는 익스포트 (Export) 코드를 이용하여, PyTorch 모델을 CoreML 모델로 변환합니다.

python export.py --weights yolo5s.pt --train --include "coreml"

디코딩 레이어를 정의합니다.

# Just run to define the decode function
import torch
# classLabels = [f"label{i}" for i in range(80)]
...

Non-Max Suppression을 정의합니다.

# Just run to define the NMS function
def createNmsModelSpec(nnSpec):
'''
...

CoreML 모델에 디코딩 레이어와 Non-Max Suppression을 추가합니다.

# run the functions to add decode layer and NMS to the model.
addExportLayerToCoreml(builder)
msSpec = createNmsModelSpec(builder.spec)
...

이렇게 하면 Vision에서 사용할 수 있는 CoreML 모델이 저장됩니다.

スクリーンショット 2022-04-04 9.09.49.png

iOS에서의 사용 방법

디코딩과 NMS는 다음 리포지토리와 서적을 참조하고 있습니다.

🐣

프리랜서 엔지니어입니다.

업무 관련 상담은 이쪽으로

rockyshikoku@gmail.com

Core ML이나 ARKit을 사용한 앱을 만들고 있습니다.

머신러닝 / AR 관련 정보를 발신하고 있습니다.

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn ML의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0