Xuất Ambarella CVflow cho các model Ultralytics YOLO#
Hướng dẫn này là bản xem sớm và chưa hoàn thiện hoặc được xác thực bởi Ambarella. Các câu lệnh, chi tiết tương thích và các bước quy trình làm việc có thể thay đổi khi phản hồi từ nhà cung cấp có sẵn. Hiện không có mục tiêu xuất format="ambarella"; quy trình làm việc sử dụng tính nă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 mô hình ONNX kết quả thành đị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 mô hình Ultralytics YOLO trên các SoC Ambarella yêu cầu định dạng mô hình được tối ưu hóa cho bộ tăng tốc AI CVflow®. Bản fork 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 pipeline huấn luyện, xác thực và xuất, vì vậy bạn có thể tạo ra các mô hình đã đượ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 làm việc object detection hiện tại: huấn luyện nhận biết nén, xuất ONNX, biên dịch bằng bộ công cụ CVflow và suy luận với mô hình AmbaPB đã biên dịch.
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 để nhận quyền truy cập SDK thông qua Nền tảng nhà phát triển Cooper™.
Ambarella 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 thị giác AI công suất thấp, được sử dụng rộng rãi trong camera an ninh IP, camera hành trình, drone, robot và hệ thống ô tô. Các con chip của hãng được xây dựng xung quanh CVflow®, một kiến trúc xử lý véc-tơ thần kinh chuyên dụng (bộ tăng tốc AI trên chip, hay NPU) mang lại thông lượng suy luận cao ở mức công suất rất thấp — CV72S chạy các tác vụ AI camera an ninh 4K dưới 3 W. Các mô hình được huấn luyện trong các framework 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 / CV75 | Camera an ninh AI 4K, camera thông minh, thị giác công nghiệp |
| CV5 / CV52 | Drone, camera hành động, robot, hệ thống đa camera |
| CV3-AD | Bộ điều khiển miền ADAS và lái xe tự động cho ô tô |
| N1 | Các thiết bị AI tạo sinh tại chỗ (on-premise) và phân tích video đa luồng |
Tạ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 edge AI luôn bật, chạy object detection thời gian thực trong ngân sách công suất cấp độ camera.
- Huấn luyện nhận biết nén: SpongeTorch áp dụng tối ưu hóa nhận biết pruning và quantization trong quá trình huấn luyện, nhờ đó mô hình học cách giữ nguyên độ chính xác trong khi trở nên thân thiện với NPU.
- Xác thực máy chủ khớp từng bit: mô hình AmbaPB đã biên dịch chạy qua
predict/valcủa Ultralytics trên máy trạm của bạn chính xác như cách nó thực thi trên chip, do đó 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.
Tổng quan về quy trình#
Quy trình này có bốn giai đoạn:
- Huấn luyện nhận biết 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 tiến triển trong quá trình huấn luyện. - Xuất ONNX — xuất checkpoint đã nén với cùng
amba_config, bảo toàn cấu trúc nén trong đồ thị ONNX. - Biên dịch CVflow — biên dịch model ONNX thành một artifact AmbaPB với bộ công cụ CVflow.
- Suy luận và xác thực — chạy mô hình
*.ambapb.ckpt.onnxđã biên dịch thông quapredict/valcủa Ultralytics qua backend AmbaPB, sau đó triển khai trên bo mạch.
Quá trình huấn luyện SpongeTorch và tính năng xuất nhận biết SpongeTorch có thể được thay thế bằng lệnh xuất ONNX thông thường 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 phần Exporting Without SpongeTorch).
Điều kiện tiên quyết#
Cài đặt#
Cài đặt bản fork Ultralytics này, sau đó cài đặt các wheel của bộ công cụ Ambarella từ 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-*.whlBackend suy luận AmbaPB định vị cvflowbackend thông qua lệnh tv2 (tv2 -libpath cvflowbackend) của bộ công cụ CVflow, vì vậy bộ công cụ phải được cài đặt và nằm trên biến môi trường PATH của bạn trước khi chạy suy luận hoặc xác thực với các mô hình đã biên dịch.
Tệ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 (sparsity) khi 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 đồ (schema) 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 việc xác thực cần chuẩn bị một mô hình chưa được chuẩn bị, và luôn sử dụng cùng một cấu hình khi xuất checkpoint đã nén.
Các tham số Amba#
Hai tham số điều khiển việc tích hợp SpongeTorch trên các chế độ train, val và export:
| Đối số | Loại | Mặc định | Mô tả |
|---|---|---|---|
amba_config | str | None | Đường dẫn đến cấu hình SpongeKit được truyền tới spongetorch.prepare(). Kích hoạt huấn luyện nhận biết nén và xuất nhận biết SpongeTorch. |
amba_chipset | str | None | Tê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ại | Mặc định | Mô tả |
|---|---|---|---|
export_file | str | None | Đường dẫn/tên đầu ra xuất tùy chỉnh, ví dụ '/tmp/model.onnx' hoặc 'model.onnx'. |
Huấ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:
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 đặt, trình huấn luyện sẽ bọc mô hình và bộ tối ưu hóa bằng spongetorch.prepare() tại bước thiết lập. Quá trình nén được áp dụng tiến triển theo lịch trình bước, do đó mạng học cách giữ nguyên độ chính xác trong khi trở nên thưa 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 của SpongeTorch (các tensor _orig/_mask), 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 tính tái tạo.
best.pt và last.pt cố ý không được lưu cho đến khi lịch trình nén SpongeTorch vượt qua end_step — một checkpoint nén một nửa sẽ không thể 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 thành; tệp nhật ký sẽ thông báo khi quá trình lưu checkpoint bắt đầu. Nếu việc huấn luyện kết thúc trước khi lịch trình hoàn thành, 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.
Để có độ chính xác tốt nhất, trước tiên hãy huấn luyện mô hình của bạn bình thường (hoặc bắt đầu từ một checkpoint đã 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ố đã huấn luyện.
Xá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:
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
amba_config=config.prototxt amba_chipset=CV72Trình xác thực áp dụng lại spongetorch.prepare() khi cần thiết và vô hiệu hóa việc hợp nhất Conv+BN để cấu trúc nén được bảo tồn. So sánh mAP với đường cơ sở chưa nén của bạn; nếu độ giảm accuracy quá lớn, hãy điều chỉnh cấu hình SpongeKit và huấn luyện lại.
Xuất sang ONNX#
Xuất checkpoint đã nén với cùng amba_config được sử dụng trong quá trình huấn luyện:
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 mô hình, á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 vào cấu trúc đã chuẩn bị, và trace sang ONNX với việc 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.
Bảo toàn Metadata của model#
Việc xuất ONNX nhúng tác vụ mô hình, tên lớp, sải bước (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ừ tệp phụ trợ metadata.yaml bên cạnh mô hình đã biên dịch. Trừ khi trình biên dịch CVflow của bạn tạo ra tệp phụ trợ này, hãy trích xuất nó từ mô hình 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.
- Checkpoint phải chứa trạng thái nén SpongeTorch. Việc xuất một checkpoint thông thường khi đã đặt
amba_configsẽ 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.
Biê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.
Để Ultralytics nhận dạng mô hình đã 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.
Chạy suy luận với model đã biên dịch#
Mô hình 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 mô hình khớp từng bit như cách nó chạy trên bộ tăng tốc AI:
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 mô hình đã biên dịch, backend sẽ đọc tên lớp, sải bước và thông tin tác vụ từ đó. Backend sử dụng chế độ suy luận CVflow acinf theo mặc định; hãy đặt biến môi trường ULTRALYTICS_AMBAPB_DEBUG=1 để ghi nhật ký chi tiết đầu vào/đầu ra nhằm mục đích gỡ lỗi.
Triển khai trên bo mạch#
Tải mô hình đã biên dịch trên thiết bị Ambarella của bạn bằng môi trường thời gian chạy (runtime) SDK Ambarella. Quá trình tiền xử lý và hậu xử lý phải khớp với những gì mô hình phát hiện được biên dịch cho: đầu vào RGB letterbox trong phạm vi 0–255 (backend Ultralytics AmbaPB cung cấp đầu vào RGB 0–255 cho mô hình đã 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 để biết các API thời gian chạy.
Xuấ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:
yolo export model=yolo26n.pt format=onnxBiên dịch ONNX kết quả bằng bộ công cụ CVflow, bộ công cụ này tự thực hiện việc lượng tử hóa sau huấn luyện. Con đường này đánh đổi một số hiệu suất NPU và độ chính xác lượng tử hóa để đổi lấy một quy trình làm việc đơn giản hơn không có phụ thuộc spongetorch tại thời điểm huấn luyện.
Ứ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.
Tó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 mô hình Ultralytics YOLO trên các SoC Ambarella CVflow: huấn luyện nhận biết nén với SpongeTorch (amba_config/amba_chipset), xuất ONNX của checkpoint đã nén, biên dịch ngoại tuyến thành AmbaPB bằng bộ công cụ CVflow, và xác thực khớp từng bit của mô hình đã biên dịch thông qua Ultralytics trước khi triển khai lên bo mạch.
Đối với các mục tiêu edge AI khác, hãy xem các hướng dẫn liên quan về Hailo, Rockchip RKNN, Sony IMX500, Qualcomm QNN, DEEPX và Axelera. Để xem danh sách đầy đủ các định dạng xuất, hãy truy cập tài liệu Export mode và trang tích hợp.
Câu hỏi thường gặp#
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 quaamba_config), sau đó biên dịch mô hình ONNX thành AmbaPB ngoại tuyến bằng bộ công cụ CVflow của Ambarella từ SDK.Bất kỳ SoC dựa trên CVflow nào được hỗ trợ bởi bộ công cụ CVflow của bạn đề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_chipsetcấu hình mục tiêu tối ưu hóa của SpongeTorch; hãy 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ó tùy thuộc vào phiên bản SDK được cài đặt.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.
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 wheel
spongetorchvàcvflowbackendcùng trình biên dịch CVflow được đi kèm trong phân phối SDK.Chạy
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlvới bản fork Ambarella đã được cài đặt. Backend AmbaPB thực thi mô hình đã biên dịch khớp từng bit như cách nó chạy trên bộ tăng tốc AI CVflow, do đó 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.