Meet YOLO26: next-gen vision AI.

Link to this sectionXuất Ambarella CVflow cho các model Ultralytics YOLO#

Hướng dẫn xem trước — chưa được nhà cung cấp xác thực

Hướng dẫn này là bản xem trước sớm và chưa hoàn thiện hoặc chưa được Ambarella xác thực. Các lệnh, chi tiết tương thích và các bước quy trình có thể thay đổi khi có phản hồi từ nhà cung cấp. Hiện tại không có mục tiêu xuất format="ambarella"; quy trình này sử dụng xuất ONNX tiêu chuẩn (format="onnx") kết hợp với các tham số amba_config/amba_chipset, sau đó biên dịch model ONNX kết quả sang định dạng AmbaPB có thể triển khai ngoại tuyến bằng bộ công cụ CVflow của Ambarella.

Việc triển khai các model Ultralytics YOLO trên các SoC Ambarella yêu cầu định dạng model được tối ưu hóa cho công cụ AI CVflow®. Nhánh này của Ultralytics tích hợp trực tiếp bộ công cụ nén SpongeTorch của Ambarella vào quy trình huấn luyện, xác thực và xuất, vì vậy bạn có thể tạo ra các model đã được cắt tỉa (pruned) và tối ưu hóa lượng tử hóa để chạy hiệu quả trên phần cứng Ambarella. Hướng dẫn này phác thảo quy trình phát hiện đối tượng hiện tại: huấn luyện nhận thức nén (compression-aware training), xuất ONNX, biên dịch bằng bộ công cụ CVflow và suy luận với model AmbaPB đã biên dịch.

Lưu ý

Quy trình này yêu cầu các thành phần bộ công cụ độc quyền của Ambarella (spongetorch, trình biên dịch CVflow và cvflowbackend) không có sẵn trên PyPI. Hãy đăng ký trên Ambarella Developer Zone để có quyền truy cập SDK thông qua Nền tảng nhà phát triển Cooper™.

Link to this sectionAmbarella CVflow là gì?#

Ambarella là một công ty bán dẫn có trụ sở tại Santa Clara nổi tiếng với các SoC AI vision công suất thấp, được sử dụng rộng rãi trong camera an ninh IP, camera hành trình, thiết bị bay không người lái (drone), robot và hệ thống ô tô. Các chip của hãng được xây dựng dựa trên CVflow®, một kiến trúc xử lý vector thần kinh chuyên dụng (bộ tăng tốc AI trên chip, hoặc NPU) mang lại lưu lượng suy luận cao với công suất rất thấp — CV72S chạy các tác vụ AI cho camera an ninh 4K dưới 3 W. Các model được huấn luyện trong các khung làm việc tiêu chuẩn như PyTorch được biên dịch sang định dạng gốc của CVflow bằng bộ công cụ ngoại tuyến của Ambarella trước khi triển khai.

Các dòng SoC CVflow hiện tại và các ứng dụng điển hình:

Dòng SoCỨng dụng điển hình
CV72 / CV75Camera an ninh AI 4K, camera thông minh, thị giác công nghiệp
CV5 / CV52Drone, camera hành động, robot, hệ thống đa camera
CV3-ADBộ điều khiển miền ADAS và lái xe tự động cho ô tô
N1Các thiết bị AI tạo sinh tại chỗ (on-premise) và phân tích video đa luồng

Link to this sectionTại sao lại triển khai YOLO trên Ambarella?#

  • Hiệu suất trên mỗi watt: Các SoC CVflow được thiết kế cho AI tại biên (edge AI) chạy liên tục, thực hiện phát hiện đối tượng thời gian thực trong phạm vi ngân sách điện năng cấp camera.
  • Huấn luyện nhận thức nén: SpongeTorch áp dụng cắt tỉa và tối ưu hóa nhận thức lượng tử hóa trong quá trình huấn luyện, vì vậy model học cách duy trì độ chính xác trong khi trở nên thân thiện với NPU.
  • Xác thực máy chủ chính xác từng bit: model AmbaPB đã biên dịch chạy qua predict/val của Ultralytics trên máy trạm của bạn chính xác như cách nó sẽ thực thi trên chip, vì vậy bạn có thể đo lường mAP lượng tử hóa trước khi chạm vào phần cứng.
  • Quy trình camera tích hợp: Các SoC Ambarella kết hợp công cụ AI với ISP và các bộ mã hóa video, khiến chúng trở thành giải pháp đơn chip cho camera AI.

Link to this sectionTổng quan về quy trình#

Quy trình này có bốn giai đoạn:

  1. Huấn luyện nhận thức nén — huấn luyện với cấu hình SpongeKit (amba_config) để SpongeTorch áp dụng việc cắt tỉa/lượng tử hóa dần dần trong quá trình huấn luyện.
  2. Xuất ONNX — xuất checkpoint đã nén với cùng một amba_config, bảo toàn cấu trúc nén trong đồ thị ONNX.
  3. Biên dịch CVflow — biên dịch model ONNX thành một artifact AmbaPB với bộ công cụ CVflow.
  4. Suy luận và xác thực — chạy model *.ambapb.ckpt.onnx đã biên dịch thông qua predict/val của Ultralytics qua backend AmbaPB, sau đó triển khai trên bo mạch.

Huấn luyện SpongeTorch và xuất nhận thức SpongeTorch có thể được thay thế bằng xuất ONNX đơn thuần nếu bạn không cần các tối ưu hóa trong thời gian huấn luyện của SpongeTorch (xem Xuất không cần SpongeTorch).

Link to this sectionĐiều kiện tiên quyết#

Link to this sectionCài đặt#

Cài đặt nhánh Ultralytics này, sau đó cài đặt các tệp wheels của bộ công cụ Ambarella từ bản phân phối SDK:

!!! Tip "Cài đặt"

# Install this Ultralytics fork from source
git clone https://github.com/Ambarella-Inc/ultralytics
cd ultralytics
git checkout amba_v8.4.46
pip install -e .

# Install Ambarella toolchain wheels from the SDK
pip install /path/to/spongetorch-*.whl
pip install /path/to/cvflowbackend-*.whl

Backend suy luận AmbaPB định vị cvflowbackend thông qua lệnh tv2 của bộ công cụ CVflow (tv2 -libpath cvflowbackend), vì vậy bộ công cụ phải được cài đặt và nằm trên PATH của bạn trước khi chạy suy luận hoặc xác thực với các model đã biên dịch.

Link to this sectionTệp cấu hình SpongeKit#

SpongeTorch được điều khiển bởi một tệp cấu hình SpongeKit (định dạng protobuf-text, .prototxt) xác định các bước nén cần áp dụng: mục tiêu thưa thớt (sparsity targets) của việc cắt tỉa, cài đặt lượng tử hóa và lịch trình nén. Lấy các cấu hình mẫu và tài liệu lược đồ phù hợp từ bản phát hành SDK Ambarella của bạn. Sử dụng cấu hình huấn luyện bất cứ khi nào xác thực cần chuẩn bị một model chưa chuẩn bị, và luôn sử dụng cùng một cấu hình khi xuất checkpoint đã nén.

Link to this sectionCác tham số Amba#

Hai tham số kiểm soát sự tích hợp SpongeTorch trên các chế độ train, valexport:

Đối sốLoạiMặc địnhMô tả
amba_configstrNoneĐường dẫn đến cấu hình SpongeKit được truyền tới spongetorch.prepare(). Cho phép huấn luyện nhận thức nén và xuất nhận thức SpongeTorch.
amba_chipsetstrNoneTên chipset mục tiêu được truyền tới spongetorch.set_target_chipset(), ví dụ: CV72.

Nhánh này cũng thêm một tham số xuất chung:

Đối sốLoạiMặc địnhMô tả
export_filestrNoneĐường dẫn/tên xuất tùy chỉnh, ví dụ: '/tmp/model.onnx' hoặc 'model.onnx'.

Link to this sectionHuấn luyện nhận thức nén#

Huấn luyện (hoặc tinh chỉnh) model của bạn với tính năng nén SpongeTorch được kích hoạt:

Cách sử dụng
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=100,
    amba_config="config.prototxt",
    amba_chipset="CV72",
)

Khi amba_config được thiết lập, trình huấn luyện sẽ bao bọc model và trình tối ưu hóa bằng spongetorch.prepare() tại bước thiết lập. Việc nén được áp dụng dần dần theo lịch trình từng bước, vì vậy mạng học cách duy trì độ chính xác trong khi trở nên thưa thớt và thân thiện với lượng tử hóa. Checkpoint đã huấn luyện lưu trữ trạng thái thưa thớt của SpongeTorch (các tensor _orig/_mask), điều mà bước xuất yêu cầu sau đó. Tệp cấu hình được sao chép vào thư mục chạy dưới dạng amba_config.prototxt để đảm bảo khả năng tái tạo.

Gating checkpoint

best.ptlast.pt được cố tình không lưu cho đến khi lịch trình nén SpongeTorch vượt qua end_step của nó — một checkpoint nén một nửa sẽ không sử dụng được. Đảm bảo epochs đủ dài để lịch trình trong cấu hình của bạn hoàn tất; nhật ký sẽ báo cáo khi bắt đầu lưu checkpoint. Nếu quá trình huấn luyện kết thúc trước khi lịch trình hoàn tất, epoch cuối cùng vẫn được lưu kèm theo cảnh báo, nhưng checkpoint như vậy không nên được triển khai.

Tinh chỉnh thay vì huấn luyện từ đầu

Để có độ chính xác tốt nhất, trước tiên hãy huấn luyện model của bạn một cách bình thường (hoặc bắt đầu từ một checkpoint đã được huấn luyện trước), sau đó chạy tinh chỉnh nén ngắn hơn với amba_config trên các trọng số đã được huấn luyện.

Link to this sectionXác thực Checkpoint đã nén#

Xác thực độ chính xác trước khi biên dịch, sử dụng cùng một cấu hình:

Cách sử dụng
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
  amba_config=config.prototxt amba_chipset=CV72

Trình xác thực áp dụng lại spongetorch.prepare() khi được yêu cầu và vô hiệu hóa hợp nhất Conv+BN để cấu trúc nén được bảo toàn. So sánh mAP với đường cơ sở không nén của bạn; nếu độ sụt giảm độ chính xác quá lớn, hãy điều chỉnh cấu hình SpongeKit và huấn luyện lại.

Link to this sectionXuất sang ONNX#

Xuất checkpoint đã nén với cùng amba_config đã sử dụng trong huấn luyện:

Cách sử dụng
from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")
model.export(
    format="onnx",
    amba_config="config.prototxt",
    amba_chipset="CV72",
)

Trình xuất xây dựng lại model, áp dụng lại spongetorch.prepare() với cấu hình của bạn, tải lại các trọng số checkpoint thưa thớt vào cấu trúc đã chuẩn bị và truy vết (trace) sang ONNX với hợp nhất Conv+BN bị vô hiệu hóa — tạo ra một đồ thị ở dạng chính xác mà trình biên dịch CVflow mong đợi.

Link to this sectionBảo toàn Metadata của model#

Xuất ONNX nhúng tác vụ model, tên lớp, stride và kích thước đầu vào vào tệp ONNX, trong khi backend AmbaPB đọc thông tin này từ sidecar metadata.yaml bên cạnh model đã biên dịch. Trừ khi trình biên dịch CVflow của bạn tạo ra sidecar này, hãy trích xuất nó từ model ONNX trước khi biên dịch:

import onnx

from ultralytics.utils import YAML

model = onnx.load("model.onnx")
YAML.save("metadata.yaml", {item.key: item.value for item in model.metadata_props})

Giữ metadata.yaml trong cùng thư mục với tệp *.ambapb.ckpt.onnx hoặc *.ambapb.fastckpt.onnx đã biên dịch.

Cảnh báo
  • Checkpoint phải chứa trạng thái nén SpongeTorch. Việc xuất một checkpoint đơn thuần với amba_config được thiết lập sẽ gây ra lỗi: "Checkpoint has no SpongeTorch pruning state... Use a compressed checkpoint from amba training before export."
  • Cấu hình phải khớp với cấu hình được sử dụng trong quá trình huấn luyện, nếu không việc tải lại trọng số sẽ thất bại.

Link to this sectionBiên dịch với bộ công cụ CVflow#

Biên dịch model ONNX đã xuất cho chipset mục tiêu của bạn bằng trình biên dịch CVflow từ SDK, tuân theo hướng dẫn biên dịch của SDK. Trình biên dịch ánh xạ đồ thị lên công cụ AI CVflow (lượng tử hóa, lập lịch, lập kế hoạch bộ nhớ) và tạo ra artifact AmbaPB có thể triển khai.

Lưu ý

Để Ultralytics nhận diện được model đã biên dịch, tên tệp của nó phải kết thúc bằng .ambapb.ckpt.onnx hoặc .ambapb.fastckpt.onnx.

Link to this sectionChạy suy luận với model đã biên dịch#

Model AmbaPB đã biên dịch tải trực tiếp thông qua API Ultralytics — AutoBackend phát hiện hậu tố .ambapb và định tuyến suy luận qua cvflowbackend, thực thi model chính xác từng bit như cách nó sẽ chạy trên công cụ AI:

Cách sử dụng
from ultralytics import YOLO

model = YOLO("model.ambapb.ckpt.onnx")

# Inference
results = model("https://ultralytics.com/images/bus.jpg")

# Validation
metrics = model.val(data="coco8.yaml")

Đây là bước kiểm tra độ chính xác cuối cùng trước khi triển khai phần cứng, bao gồm tất cả các hiệu ứng lượng tử hóa của trình biên dịch. Nếu tệp metadata.yaml nằm cạnh model đã biên dịch, backend sẽ đọc tên lớp, stride và thông tin tác vụ từ đó. Backend sử dụng chế độ suy luận acinf của CVflow theo mặc định; đặt biến môi trường ULTRALYTICS_AMBAPB_DEBUG=1 để ghi nhật ký chi tiết đầu vào/đầu ra cho việc gỡ lỗi.

Link to this sectionTriển khai trên bo mạch#

Tải model đã biên dịch trên thiết bị Ambarella của bạn bằng runtime SDK Ambarella. Tiền xử lý và hậu xử lý phải khớp với những gì model phát hiện đã được biên dịch: đầu vào RGB letterboxed trong phạm vi 0–255 (backend AmbaPB của Ultralytics cung cấp RGB 0–255 cho model đã biên dịch), và giải mã phát hiện YOLO tiêu chuẩn trên các đầu ra. Tham khảo tài liệu triển khai SDK cho các API runtime.

Link to this sectionXuất không cần SpongeTorch#

Nếu bạn không cần các tối ưu hóa cắt tỉa và nhận thức lượng tử hóa trong thời gian huấn luyện của SpongeTorch, quy trình tiêu chuẩn của Ultralytics cũng tạo ra một model có thể biên dịch bằng CVflow:

Cách sử dụng
yolo export model=yolo26n.pt format=onnx

Biên dịch ONNX kết quả bằng bộ công cụ CVflow, tự thực hiện lượng tử hóa sau huấn luyện. Con đường này đánh đổi một phần hiệu suất NPU và độ chính xác lượng tử hóa để có quy trình đơn giản hơn mà không có phụ thuộc spongetorch tại thời điểm huấn luyện.

Link to this sectionỨng dụng trong thực tế#

Các model Ultralytics YOLO trên các SoC Ambarella CVflow thúc đẩy thị giác chạy liên tục tại biên:

  • Camera an ninh AI: phát hiện người và phương tiện thời gian thực trên camera IP 4K trong phạm vi ngân sách điện năng dưới 3 W.
  • Drone và robot: phát hiện và theo dõi đối tượng trên bo mạch cho điều hướng, kiểm tra và giao hàng trên các chip dòng CV5.
  • Ô tô: các tác vụ nhận thức ADAS như phát hiện người đi bộ và phương tiện trên các bộ điều khiển miền CV3-AD.
  • Phân tích bán lẻ và công nghiệp: đếm người đa luồng, phát hiện PPE và giám sát kệ hàng trên các thiết bị tại biên.

Link to this sectionTóm tắt#

Hướng dẫn xem trước này đã phác thảo quy trình hiện tại để triển khai các model Ultralytics YOLO trên các SoC Ambarella CVflow: huấn luyện nhận thức nén với SpongeTorch (amba_config/amba_chipset), xuất ONNX checkpoint đã nén, biên dịch ngoại tuyến sang AmbaPB với bộ công cụ CVflow và xác thực chính xác từng bit của model đã biên dịch thông qua Ultralytics trước khi triển khai bo mạch.

Đối với các mục tiêu AI tại biên khác, hãy xem các hướng dẫn liên quan về Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPXAxelera. Để biết danh sách đầy đủ các định dạng xuất, hãy truy cập tài liệu Chế độ xuấttrang tích hợp.

Link to this sectionCâu hỏi thường gặp#

Link to this sectionTôi có thể xuất model YOLO trực tiếp sang định dạng Ambarella với model.export() không?#

Không. Không có mục tiêu format="ambarella". Hãy xuất sang ONNX (tùy chọn với nén SpongeTorch qua amba_config), sau đó biên dịch model ONNX sang AmbaPB ngoại tuyến bằng bộ công cụ CVflow của Ambarella từ SDK.

Link to this sectionNhững chip Ambarella nào có thể chạy các model Ultralytics YOLO?#

Bất kỳ SoC dựa trên CVflow nào được bộ công cụ CVflow của bạn hỗ trợ đều có thể được nhắm mục tiêu, bao gồm các dòng CV72/CV75 cho camera AI, CV5/CV52 cho drone và robot, và CV3-AD cho ô tô. Tham số amba_chipset định cấu hình mục tiêu tối ưu hóa của SpongeTorch; chọn mục tiêu khớp riêng biệt khi biên dịch. Các chuỗi chipset được chấp nhận và khả năng sẵn có phụ thuộc vào bản phát hành SDK đã cài đặt.

Link to this sectionSpongeTorch là gì và tôi có cần nó không?#

SpongeTorch là bộ công cụ nén model của Ambarella, được tích hợp vào nhánh Ambarella của Ultralytics để cắt tỉa và huấn luyện nhận thức lượng tử hóa. Nó là tùy chọn: một model xuất ONNX đơn thuần của Ultralytics cũng có thể được biên dịch với bộ công cụ CVflow sử dụng lượng tử hóa sau huấn luyện, với một cái giá về hiệu suất NPU và độ chính xác lượng tử hóa.

Link to this sectionTôi lấy SDK Ambarella, SpongeTorch và bộ công cụ CVflow ở đâu?#

Chúng là độc quyền và không có trên PyPI. Hãy đăng ký trên Ambarella Developer Zone để yêu cầu quyền truy cập SDK; các tệp wheels spongetorchcvflowbackend cùng trình biên dịch CVflow được vận chuyển cùng bản phân phối SDK.

Link to this sectionLàm thế nào để kiểm tra độ chính xác của model đã biên dịch trước khi triển khai?#

Chạy yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml với nhánh Ambarella đã cài đặt. Backend AmbaPB thực thi model đã biên dịch chính xác từng bit như cách nó chạy trên công cụ AI CVflow, vì vậy mAP được báo cáo bao gồm tất cả các hiệu ứng lượng tử hóa của trình biên dịch.

Người đóng góp

Bình luận