Ultralytics YOLO27: Đăng ký vào danh sách chờ.
Cấp phép YOLO
Quay lại Bảng thuật ngữ Ultralytics

XML

XML là định dạng văn bản lồng các thẻ tùy chỉnh thành cây dữ liệu có cấu trúc. Bài viết trình bày cú pháp, schema, chú thích PASCAL VOC và so sánh với JSON và YAML.

XML (Ngôn ngữ đánh dấu mở rộng) là định dạng văn bản dành cho dữ liệu có cấu trúc, trong đó các thẻ tùy chỉnh lồng vào nhau tạo thành cây, chẳng hạn một phần tử <size> chứa <width> và <height>. World Wide Web Consortium công bố XML 1.0 dưới dạng Khuyến nghị vào tháng 2 năm 1998, như một tập con đơn giản hóa của SGML (Ngôn ngữ đánh dấu tổng quát chuẩn) để trao đổi tài liệu và dữ liệu trên web. XML không có thẻ được định nghĩa sẵn, khác với HTML: mỗi ứng dụng tự định nghĩa thẻ để thể hiện ý nghĩa dữ liệu, vì vậy nhiều định dạng tệp được xây dựng trên XML, từ đồ họa SVG, nguồn tin RSS đến tài liệu Microsoft Office. Trong machine learning và thị giác máy tính, XML chủ yếu xuất hiện trong tệp gán nhãn, tệp model và các hệ thống y tế, doanh nghiệp cung cấp dữ liệu huấn luyện.

Cú pháp và xác thực XML#

Tài liệu XML có chính xác một phần tử gốc. Phần tử có thể chứa văn bản, phần tử con và thuộc tính được viết bên trong thẻ mở, như trong <box label="car" xtl="10">; các namespace được khai báo bằng xmlns giúp phân biệt thẻ thuộc những bộ từ vựng khác nhau. Tài liệu tuân theo quy tắc cú pháp, trong đó mọi thẻ đều được đóng, các phần tử được lồng đúng cách và giá trị thuộc tính được đặt trong dấu ngoặc kép, được gọi là well-formed; parser phải dừng khi gặp lỗi well-formedness đầu tiên. Tài liệu cũng hợp lệ khi khớp với schema, được viết dưới dạng Định nghĩa kiểu tài liệu (DTD) hoặc Lược đồ XML (XSD), liệt kê các phần tử được phép, thứ tự của chúng và kiểu dữ liệu. Các biểu thức XPath như size/width chọn node trong cây, còn stylesheet XSLT chuyển đổi bộ từ vựng XML này sang bộ khác.

XML trong thị giác máy tính và machine learning#

Cuộc thi PASCAL VOC, được tổ chức từ năm 2005 đến 2012, đưa XML trở thành định dạng gán nhãn kinh điển cho phát hiện đối tượng. Mỗi ảnh có một tệp XML chứa tên và kích thước tệp, cùng một phần tử <object> cho mỗi đối tượng; phần tử này lưu tên lớp, các cờ truncated và difficult, cùng một phần tử <bndbox> có các góc pixel xmin, ymin, xmax và ymax xác định bounding box. Công cụ gán nhãn LabelImg mặc định lưu theo định dạng này, nên nhiều dataset vẫn sử dụng định dạng đó và cần chuyển đổi trong quá trình tiền xử lý dữ liệu. Bản xuất CVAT for images 1.1 từ CVAT lưu mọi gán nhãn của một tác vụ trong một tệp XML duy nhất, với các box được ghi bằng những thuộc tính như xtl, ytl, xbr và ybr.

XML cũng mô tả model và bản ghi. Biểu diễn Trung gian OpenVINO của Intel lưu các lớp và kết nối của mạng trong tệp .xml, còn trọng số nằm trong tệp .bin tương ứng; các detector khuôn mặt Haar cascade pretrained của OpenCV cũng được phân phối dưới dạng XML. Hồ sơ y tế HL7 FHIR, được các dự án AI lâm sàng ghép với ảnh để phân tích ảnh y tế, có thể trao đổi dưới dạng XML hoặc JSON; các tệp Word và Excel là kho lưu trữ ZIP gồm các phần XML mà hệ thống AI đọc.

Ví dụ này phân tích cú pháp một gán nhãn VOC bằng ElementTree tích hợp sẵn trong Python rồi chuyển từng box thành tâm, chiều rộng và chiều cao đã chuẩn hóa theo định dạng nhãn 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}")

Lệnh in ra person 0.481 0.356 0.196 0.376 và horse 0.511 0.566 0.652 0.709: hai box tương tự được biểu diễn dưới dạng tỷ lệ so với kích thước ảnh, sẵn sàng ghi thành các dòng nhãn sau chỉ số lớp. Tệp dataset VOC.yaml của Ultralytics tự động thực hiện chuyển đổi này trong lần sử dụng đầu tiên: tải VOC 2007 và 2012, phân tích mọi gán nhãn XML bằng ElementTree, bỏ qua các đối tượng được đánh dấu difficult và ghi nhãn .txt của YOLO cho 16,551 ảnh huấn luyện và 4,952 ảnh validation.

XML so với JSON và YAML#

  • JSON: Đối tượng, mảng, chuỗi, số và giá trị boolean với cú pháp gọn hơn XML, ánh xạ trực tiếp sang dictionary Python và object JavaScript. API web và chú thích của bộ dữ liệu COCO sử dụng định dạng này.
  • YAML: Dùng thụt lề thay cho thẻ đóng, hỗ trợ comment và có cú pháp chấp nhận mọi tài liệu JSON kể từ YAML 1.2; nhờ vậy, YAML phổ biến cho các tệp cấu hình được chỉnh sửa thủ công, chẳng hạn tệp dataset và model YOLO.
  • XML: Dài dòng hơn, có schema, namespace, thuộc tính và nội dung hỗn hợp—tức văn bản có markup nội tuyến—phù hợp với tài liệu và các tổ chức tiêu chuẩn cần xác thực nghiêm ngặt.

Phân tích cú pháp XML không đáng tin cậy#

Tính năng entity của XML cho phép tài liệu định nghĩa văn bản có thể tái sử dụng, nhưng kẻ tấn công có thể lợi dụng tính năng này. Trong cuộc tấn công "billion laughs", khoảng mười định nghĩa entity lồng nhau, mỗi định nghĩa tham chiếu đến định nghĩa trước đó mười lần, có thể mở rộng tệp vài trăm byte thành hàng gigabyte văn bản. Tấn công thực thể bên ngoài XML (XXE) khai báo một entity trỏ đến tệp cục bộ hoặc URL nội bộ, khiến parser dễ bị tấn công đọc bí mật vào tài liệu hoặc gửi yêu cầu từ bên trong mạng. xml.etree.ElementTree của Python không mở rộng entity bên ngoài và phát sinh lỗi phân tích cú pháp khi gặp entity như vậy; parser Expat của thư viện này chống được cuộc tấn công billion laughs kể từ phiên bản 2.4.1. Gói defusedxml còn tăng cường bảo vệ bằng cách phát sinh EntitiesForbidden với mọi khai báo entity, dù là nội bộ hay bên ngoài.

Khám phá các giải pháp

Thị giác máy tính trong thể thao

Thị giác máy tính trong thể thao

Khám phá cách Ultralytics YOLO thúc đẩy thị giác máy tính trong thể thao với khả năng theo dõi cầu thủ và bóng, phân tích hiệu suất, cung cấp thông tin chuyên sâu cho huấn luyện và hỗ trợ phục hồi cho vận động viên.
Tìm hiểu thêm
Thị giác máy tính cho ảnh hàng không

Thị giác máy tính cho ảnh hàng không

Chuyển hình ảnh từ drone và ảnh hàng không thành thông tin chuyên sâu theo thời gian thực cho nông nghiệp, nuôi trồng thủy sản, bảo tồn và phân tích không gian địa lý với Ultralytics YOLO.
Tìm hiểu thêm
Thị giác máy tính trong hàng không vũ trụ

Thị giác máy tính trong hàng không vũ trụ

Ứng dụng computer vision trong ngành hàng không vũ trụ với Ultralytics YOLO cho kiểm tra máy bay, phát hiện dị vật trên đường băng (FOD), vận hành mặt đất tại sân bay và phát hiện lỗi vật liệu composite.
Tìm hiểu thêm
Computer vision trong lĩnh vực an ninh

Computer vision trong lĩnh vực an ninh

Bảo vệ mọi địa điểm bằng model Ultralytics YOLO. Vision AI hỗ trợ giám sát vành đai, phát hiện mối đe dọa, nhận dạng biển số và an toàn nơi làm việc.
Tìm hiểu thêm
Computer vision trong robotics

Computer vision trong robotics

Tăng cường năng lực cho máy móc thông minh bằng model Ultralytics YOLO. Vision AI trong lĩnh vực robotics hỗ trợ điều hướng tự động, nhận thức, theo dõi đối tượng và điều khiển theo thời gian thực.
Tìm hiểu thêm
Thị giác máy tính trong logistics

Thị giác máy tính trong logistics

Tinh giản hoạt động logistics với các model Ultralytics YOLO. Vision AI hỗ trợ kiểm tra kiện hàng, phân loại, theo dõi phương tiện và giám sát an toàn kho hàng theo thời gian thực.
Tìm hiểu thêm
Thị giác máy tính trong bán lẻ

Thị giác máy tính trong bán lẻ

Định hình lại hoạt động bán lẻ với các model Ultralytics YOLO. Vision AI hỗ trợ theo dõi hàng tồn kho, giám sát kệ hàng, quản lý hàng chờ và phân tích khách hàng thông minh hơn.
Tìm hiểu thêm
Thị giác máy tính trong chăm sóc sức khỏe

Thị giác máy tính trong chăm sóc sức khỏe

Xây dựng các giải pháp chăm sóc sức khỏe với model Ultralytics YOLO. Vision AI trong chăm sóc sức khỏe hỗ trợ xử lý hình ảnh y tế nhanh hơn, chẩn đoán thông minh hơn và theo dõi bệnh nhân.
Tìm hiểu thêm
Thị giác máy tính trong sản xuất

Thị giác máy tính trong sản xuất

Tối ưu hóa sản xuất bằng các model Ultralytics YOLO. Vision AI thúc đẩy kiểm soát chất lượng, phát hiện lỗi, tuân thủ PPE và tự động hóa dây chuyền lắp ráp.
Tìm hiểu thêm
Thị giác máy tính trong ngành ô tô

Thị giác máy tính trong ngành ô tô

Ứng dụng thị giác máy tính trong ngành ô tô với các model Ultralytics YOLO. Vision AI nâng cao an toàn giao thông, hỗ trợ người lái và tự động hóa phương tiện để tạo nên những tuyến đường thông minh hơn.
Tìm hiểu thêm
Thị giác máy tính trong nông nghiệp

Thị giác máy tính trong nông nghiệp

Ứng dụng AI thị giác vào nông nghiệp thông minh với các model Ultralytics YOLO. Hỗ trợ giám sát cây trồng, theo dõi vật nuôi và canh tác chính xác để nâng cao năng suất một cách thông minh hơn.
Tìm hiểu thêm

Hãy cùng nhau kiến tạo tương lai của AI!

Bắt đầu hành trình hướng đến tương lai của machine learning