Ultralytics YOLO27: 대기자 명단에 등록하세요.
YOLO 라이선스 받기
Ultralytics 용어집으로 돌아가기

XML

XML은 사용자 정의 태그를 트리 구조로 중첩해 구조화된 데이터를 나타내는 텍스트 형식입니다. 구문, 스키마, PASCAL VOC 어노테이션, JSON 및 YAML과의 비교를 다룹니다.

XML(확장성 마크업 언어)은 사용자 지정 태그를 서로 중첩해 트리를 구성하는 구조화된 데이터용 텍스트 형식입니다. 예를 들어 <size> 요소에 <width> 및 <height>가 포함될 수 있습니다. 월드 와이드 웹 컨소시엄은 웹에서 문서와 데이터를 교환하기 위해 SGML(표준 범용 마크업 언어)의 간소화된 하위 집합으로 XML 1.0을 만들고 1998년 2월 권고안으로 발표했습니다. XML에는 HTML과 달리 미리 정의된 태그가 없습니다. 각 애플리케이션이 데이터의 의미에 따라 자체 태그를 정의하므로 SVG 그래픽, RSS 피드부터 Microsoft Office 문서까지 많은 파일 형식이 XML을 기반으로 만들어졌습니다. 머신러닝과 컴퓨터 비전에서는 주로 주석 파일, 모델 파일, 그리고 학습 데이터를 제공하는 헬스케어 및 엔터프라이즈 시스템에 XML이 사용됩니다.

XML 구문 및 유효성 검사#

XML 문서에는 루트 요소가 정확히 하나 있어야 합니다. 요소에는 텍스트, 하위 요소, 여는 태그 안에 작성하는 속성이 포함될 수 있으며, 예를 들어 <box label="car" xtl="10">과 같이 작성할 수 있습니다. xmlns로 선언하는 네임스페이스는 서로 다른 어휘의 태그를 구분합니다. 모든 태그가 닫혀 있고 요소가 올바르게 중첩되며 속성 값이 따옴표로 묶이는 등 구문 규칙을 따르는 문서는 형식이 올바른 문서이며, 파서는 형식 오류가 처음 발생하는 지점에서 처리를 중단해야 합니다. 문서 유형 정의(DTD) 또는 XML 스키마(XSD)로 작성된 스키마와 일치하는 문서는 유효한 문서이기도 합니다. 이러한 스키마는 허용되는 요소, 요소 순서, 데이터 유형을 지정합니다. size/width와 같은 XPath 표현식은 트리에서 노드를 선택하고, XSLT 스타일시트는 한 XML 어휘를 다른 어휘로 변환합니다.

컴퓨터 비전 및 머신러닝에서의 XML#

2005년부터 2012년까지 열린 PASCAL VOC 챌린지는 XML을 객체 탐지의 대표적인 주석 형식으로 만들었습니다. 각 이미지에는 파일 이름과 크기, 객체마다 하나씩 있는 <object> 요소를 포함한 XML 파일이 있습니다. 이 요소에는 클래스 이름, truncated 및 difficult 플래그, 픽셀 기준 모서리인 xmin, ymin, xmax, ymax로 바운딩 박스를 정의하는 <bndbox>가 포함됩니다. LabelImg 주석 도구는 기본적으로 이 형식으로 저장하므로 많은 데이터셋이 여전히 XML 형식으로 제공되며 데이터 전처리 과정에서 변환해야 합니다. CVAT의 CVAT for images 1.1 내보내기 형식은 작업의 모든 주석을 단일 XML 파일에 저장하며, 박스는 xtl, ytl, xbr, ybr과 같은 속성으로 기록됩니다.

XML은 모델과 레코드도 기술합니다. Intel의 OpenVINO 중간 표현은 네트워크 레이어와 연결을 .xml 파일에, 가중치를 그에 대응하는 .bin 파일에 저장합니다. OpenCV의 사전 학습된 Haar 캐스케이드 얼굴 감지기도 XML로 배포됩니다. 임상 AI 프로젝트에서 이미지와 함께 사용하는 HL7 FHIR 건강 기록은 의료 영상 분석을 위해 XML 또는 JSON 형식으로 교환할 수 있습니다. Word 및 Excel 파일은 문서 AI 시스템이 읽는 XML 구성 요소를 포함한 ZIP 아카이브입니다.

이 예제는 Python 내장 ElementTree로 VOC 주석을 파싱하고 각 박스를 YOLO 라벨 형식의 정규화된 중심 좌표, 너비, 높이로 변환합니다.

import xml.etree.ElementTree as ET

# A PASCAL VOC annotation: one XML file per image, one <object> per box
voc = """
<annotation>
  <filename>000017.jpg</filename>
  <size><width>480</width><height>364</height><depth>3</depth></size>
  <object><name>person</name><difficult>0</difficult>
    <bndbox><xmin>185</xmin><ymin>62</ymin><xmax>279</xmax><ymax>199</ymax></bndbox></object>
  <object><name>horse</name><difficult>0</difficult>
    <bndbox><xmin>90</xmin><ymin>78</ymin><xmax>403</xmax><ymax>336</ymax></bndbox></object>
</annotation>
"""
root = ET.fromstring(voc)
w, h = int(root.find("size/width").text), int(root.find("size/height").text)

# Convert corner pixels to YOLO's normalized center x, center y, width, height
for obj in root.iter("object"):
    box = obj.find("bndbox")
    x1, y1, x2, y2 = (float(box.find(k).text) for k in ("xmin", "ymin", "xmax", "ymax"))
    cx, cy = ((x1 + x2) / 2 - 1) / w, ((y1 + y2) / 2 - 1) / h  # VOC pixel indices start at 1
    print(obj.find("name").text, f"{cx:.3f} {cy:.3f} {(x2 - x1) / w:.3f} {(y2 - y1) / h:.3f}")

이 코드는 person 0.481 0.356 0.196 0.376 및 horse 0.511 0.566 0.652 0.709을 출력합니다. 이는 이미지 크기에 대한 분수로 표현한 동일한 두 박스이며, 클래스 인덱스 뒤에 라벨 행으로 기록할 수 있습니다. Ultralytics VOC.yaml 데이터셋 파일은 처음 사용될 때 이 변환을 자동으로 수행합니다. VOC 2007 및 2012를 다운로드하고, ElementTree로 모든 XML 주석을 파싱하며, difficult로 표시된 객체를 건너뛰고, 학습 이미지 16,551개 및 검증 이미지 4,952개에 대한 YOLO .txt 라벨을 작성합니다.

XML, JSON, YAML 비교#

  • JSON: XML보다 구문이 간결하고 Python 딕셔너리 및 JavaScript 객체에 직접 대응하는 객체, 배열, 문자열, 숫자, 불리언 형식입니다. 웹 API와 COCO 데이터 세트 주석에서 사용합니다.
  • YAML: 닫는 태그 대신 들여쓰기를 사용하고 주석을 지원하며, YAML 1.2부터 모든 JSON 문서를 허용합니다. 따라서 YOLO 데이터셋 및 모델 파일과 같이 직접 편집하는 설정에 널리 사용됩니다.
  • XML: 구문이 더 장황하며 스키마, 네임스페이스, 속성, 텍스트와 인라인 마크업이 혼합된 콘텐츠를 지원하므로 엄격한 유효성 검사가 필요한 문서와 표준 기구에 적합합니다.

신뢰할 수 없는 XML 파싱#

XML의 엔터티 기능을 사용하면 문서에서 재사용할 텍스트를 정의할 수 있지만, 공격자가 이를 악용하기도 합니다. "billion laughs" 공격에서는 약 10개의 중첩된 엔터티 정의가 각각 이전 엔터티를 10회 참조하여 수백 바이트 크기의 파일을 기가바이트 규모의 텍스트로 확장합니다. XML 외부 엔터티(XXE) 공격은 로컬 파일이나 내부 URL을 가리키는 엔터티를 선언하므로, 취약한 파서가 비밀 정보를 문서에 읽어 들이거나 네트워크 내부에서 요청을 보낼 수 있습니다. Python의 xml.etree.ElementTree은 외부 엔터티를 확장하지 않고, 외부 엔터티를 만나면 파싱 오류를 발생시킵니다. 또한 Expat 파서는 버전 2.4.1부터 billion laughs 공격에 대한 내성을 갖습니다. defusedxml 패키지는 한 걸음 더 나아가 내부 또는 외부 여부와 관계없이 엔터티 선언이 있으면 EntitiesForbidden를 발생시킵니다.

솔루션 살펴보기

스포츠 분야의 컴퓨터 비전

스포츠 분야의 컴퓨터 비전

Ultralytics YOLO가 선수 및 공 추적, 경기력 분석, 코칭 인사이트, 선수 재활을 통해 스포츠 비전을 구현하는 방법을 알아보세요.
자세히 알아보기
항공 이미지 컴퓨터 비전

항공 이미지 컴퓨터 비전

Ultralytics YOLO를 활용해 드론 및 항공 이미지를 농업, 양식업, 보전, 지리 공간 분석을 위한 실시간 인사이트로 전환하세요.
자세히 알아보기
항공우주 분야의 컴퓨터 비전

항공우주 분야의 컴퓨터 비전

Ultralytics YOLO를 활용해 항공기 검사, 활주로 FOD 감지, 공항 지상 운영, 복합재 결함 감지 등 항공우주 분야에 컴퓨터 비전을 적용하세요.
자세히 알아보기
보안 분야의 컴퓨터 비전

보안 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 모든 시설을 보호하세요. Vision AI는 경계 모니터링, 위협 감지, 번호판 인식, 작업장 안전을 지원합니다.
자세히 알아보기
로보틱스 분야의 컴퓨터 비전

로보틱스 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 더 스마트한 머신을 구현하세요. 로보틱스 분야의 Vision AI는 자율 주행, 인식, 객체 추적, 실시간 제어를 지원합니다.
자세히 알아보기
물류 분야의 컴퓨터 비전

물류 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 물류를 간소화하세요. 비전 AI는 화물 검사, 분류, 차량 추적, 실시간 창고 안전 모니터링을 지원합니다.
자세히 알아보기
리테일 분야의 컴퓨터 비전

리테일 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 리테일의 새로운 가능성을 열어 보세요. 비전 AI는 재고 추적, 선반 모니터링, 대기열 관리, 더욱 심층적인 고객 인사이트를 지원합니다.
자세히 알아보기
의료 분야의 컴퓨터 비전

의료 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 의료 솔루션을 구축하세요. 의료 분야의 비전 AI는 의료 영상 판독을 가속화하고, 진단을 개선하며, 환자 모니터링을 지원합니다.
자세히 알아보기
제조 분야의 컴퓨터 비전

제조 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 제조 공정을 최적화하세요. 비전 AI는 품질 관리, 결함 탐지, PPE 규정 준수, 조립 라인 자동화를 지원합니다.
자세히 알아보기
자동차 분야의 컴퓨터 비전

자동차 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 자동차 분야에 컴퓨터 비전을 적용하세요. 비전 AI는 도로 안전, 운전자 지원, 차량 자동화를 개선해 더 스마트한 도로를 구현합니다.
자세히 알아보기
농업 분야의 컴퓨터 비전

농업 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 스마트 농업에 비전 AI를 도입하세요. 작물 모니터링, 가축 추적, 정밀 농업을 지원하여 더 높은 수확량과 더 스마트한 농업을 실현합니다.
자세히 알아보기

함께 AI의 미래를 만들어 가세요!

머신러닝의 미래와 함께 여정을 시작하세요