Xuất CVflow cho các model YOLO của Ultralytics#
Việc triển khai các mô hình Ultralytics YOLO trên các SoC Ambarella yêu cầu biên dịch mô hình bằng các công cụ biên dịch của Ambarella, và các mô hình được tối ưu hóa cho kiến trúc CVflow sẽ đem lại hiệu năng tốt hơn tại thời điểm suy luận. Bản 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, cho phép các nhà phát triển tạo ra các mô hình được tối ưu hóa để triển khai hiệu quả trên phần cứng Ambarella.
Hướng dẫn này bao gồm quy trình triển khai phát hiện đối tượng hiện tại, từ quá trình huấn luyện nhận biết nén đến suy luận trên thiết bị (xem phần Tổng quan Quy trình để biết toàn bộ quy trình).
Định dạng điểm kiểm tra AmbaPB là một phần mở rộng dành riêng cho Ambarella của đặc tả IR ONNX hỗ trợ các nguyên hàm tính năng của CVflow và đóng gói các cấu phần phần mềm do các công cụ SDK tạo ra. Đây là cấu phần phần mềm phía máy chủ được sử dụng để xác thực độ chính xác của mô hình đã biên dịch trước khi triển khai; tệp nhị phân Cavalry riêng biệt được tạo cho thiết bị mục tiêu mới là thứ chạy trên bo mạch.
Quy trình này phụ thuộc vào các thành phần SDK độc quyền của Ambarella không có sẵn trên PyPI. Để nhận các gói SDK bắt buộc, hãy đăng ký với Khu vực Nhà phát triển Ambarella và yêu cầu quyền truy cập thông qua Nền tảng Nhà phát triển Cooper™.
Tích hợp này được duy trì bởi Ambarella. Hãy báo cáo các sự cố với bản nhánh, SpongeTorch hoặc SDK cho bộ phận hỗ trợ của Ambarella.
Ambarella là ai?#
Ambarella, có trụ sở chính tại Santa Clara, California, là một công ty bán dẫn thiết kế các SoC AI biên. Các bộ xử lý của công ty kết hợp xử lý tín hiệu hình ảnh, mã hóa video và tính toán AI trên vi mạch, đồng thời được sử dụng trong các thiết bị an ninh, ô tô, người máy, công nghiệp và tiêu dùng.
CVflow là gì?#
CVflow là kiến trúc xử lý thị giác của Ambarella. Kiến trúc này sử dụng một công cụ thị giác chuyên dụng, tách biệt với CPU và GPU, để chạy các khối lượng công việc thị giác máy tính và mạng nơ-ron. Các mô hình được huấn luyện trong các framework như PyTorch được biên dịch sang định dạng gốc của CVflow bằng SDK Ambarella trước khi chạy trên công cụ này.
Các dòng SoC CVflow hiện tại và ứ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, computer vision công nghiệp |
| CV5 / CV52 | Drone, camera hành trình, robot, hệ thống nhiều camera |
| N1-655 | Thiết bị AI tạo sinh on-premise và phân tích video đa luồng |
Tại sao nên triển khai YOLO trên Ambarella?#
- Hiệu năng trên mỗi watt: Các SoC CVflow được thiết kế cho edge AI luôn hoạt động, chạy object detection theo thời gian thực trong giới hạn công suất cấp camera.
- Huấn luyện nhận biết nén: SpongeTorch áp dụng việc tỉa thưa trong quá trình huấn luyện để giúp mô hình duy trì độ chính xác trong khi trở nên thưa hơn và hiệu quả hơn cho việc triển khai trên CVflow.
- Đường ống camera tích hợp: Các SoC Ambarella kết hợp bộ xử lý tín hiệu hình ảnh (ISP), mã hóa video siêu nét (ultra-HD) và CVflow để hỗ trợ nhiều hệ thống camera khác nhau với mức tiêu thụ điện năng thấp, nhờ đó một SoC Ambarella duy nhất xử lý toàn bộ đường ống camera AI.
Tổng quan workflow#
Đường ống này có sáu 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 tỉa thưa phi cấu trúc một cách lũy tiến trong quá trình huấn luyện. Khi độ chính xác của lượng tử hóa sau huấn luyện (PTQ) không đạt yêu cầu, SpongeTorch cũng hỗ trợ huấn luyện nhận biết lượng tử hóa (QAT), nhưng lộ trình đó chưa được tích hợp vào bản tích hợp Ultralytics này và đã được lên kế hoạch cho một phiên bản trong tương lai. - Xuất ONNX — xuất checkpoint đã nén bằng cùng
amba_config, giữ nguyên cấu trúc nén trong graph ONNX. - Biên dịch — biên dịch mô hình ONNX thành điểm kiểm tra AmbaPB bằng các công cụ biên dịch SDK, áp dụng PTQ cho công cụ CVflow.
- Xác thực máy chủ — chạy mô hình
*.ambapb.ckpt.onnxđã biên dịch thông quapredict/valcủa Ultralytics qua phần phụ trợ AmbaPB để xác minh độ chính xác trước khi triển khai. - Chuyển đổi Cavalry — chuyển đổi điểm kiểm tra AmbaPB đã được xác thực thành tệp nhị phân Cavalry bằng các công cụ SDK.
- Chạy trên thiết bị — chạy tệp nhị phân Cavalry trên thiết bị bằng thư viện thời gian chạy SDK của Ambarella.
Quy trình huấn luyện và xuất của SpongeTorch là tùy chọn và có thể được thay thế bằng một lệnh xuất ONNX thuần túy (xem phần Xuất Không Cần SpongeTorch).
Điều kiện tiên quyết#
Cài đặt#
Cài đặt bản nhánh Ultralytics này, sau đó thiết lập SDK Ambarella CVflow — bao gồm các công cụ biên dịch và thư viện cvflowbackend — và cài đặt gói wheel spongetorch được phân phối cùng với bản nhánh này:
# 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 .
# Access and set up the Ambarella SDK compilation tools
# After the environment is ready, install the spongetorch library
pip install /path/to/spongetorch-*.whlAutoBackend định vị cvflowbackend thông qua lệnh tv2 (tv2 -libpath cvflowbackend) của các công cụ biên dịch SDK, do đó các công cụ biên dịch SDK 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 mô hình đã biên dịch.
File 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 văn bản protobuf, .prototxt) định nghĩa các bước tỉa thưa, bao gồm các mục tiêu độ thưa và lịch trình nén. Nhận các cấu hình ví dụ và tài liệu lược đồ khớp từ bản phát hành SDK Ambarella của bạn. Để duy trì tính nhất quán giữa việc huấn luyện, xác thực và triển khai, hãy 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ị lại mô hình và luôn sử dụng cùng một cấu hình khi xuất điểm kiểm tra đã 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 mode train, val và export:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
amba_config | str | None | Đường dẫn đến config SpongeKit được truyền cho spongetorch.prepare(). Bật train có hỗ trợ nén và export có hỗ trợ SpongeTorch. |
amba_chipset | str | None | Tên chipset đích được truyền cho spongetorch.set_target_chipset(), ví dụ CV72. |
Fork này cũng bổ sung một tham số export tổng quát:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
export_file | str | None | Đường dẫn/tên output export tùy chỉnh, ví dụ '/tmp/model.onnx' hoặc 'model.onnx'. |
Train có hỗ trợ nén#
Train (hoặc fine-tune) model với tính năng nén SpongeTorch được bậ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 lũy tiến theo lịch trình bước, giúp mạng học cách duy trì độ chính xác trong khi trở nên thưa hơn. Điểm kiểm tra đã 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 lập.
best.pt và last.pt cố ý chưa được lưu cho đến khi lịch nén SpongeTorch vượt qua end_step — checkpoint mới nén một phần sẽ không thể sử dụng. Đảm bảo epochs đủ dài để lịch trong config hoàn tất; log sẽ báo thời điểm bắt đầu lưu checkpoint. Nếu quá trình train kết thúc trước khi lịch hoàn tất, epoch cuối vẫn được lưu kèm cảnh báo, nhưng không nên triển khai checkpoint đó.
Để đạt độ chính xác tốt nhất, trước tiên hãy train model theo cách thông thường (hoặc bắt đầu từ checkpoint pretrained), sau đó chạy một phiên fine-tune nén ngắn hơn với amba_config trên các weight đã train.
Validation checkpoint đã nén#
Xác thực độ chính xác trước khi biên dịch, bằng cùng config:
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
amba_config=config.prototxt amba_chipset=CV72Validator áp dụng lại spongetorch.prepare() khi cần và tắt fusion Conv+BN để bảo toàn cấu trúc nén. So sánh mAP với baseline chưa nén; nếu mức giảm độ chính xác quá lớn, hãy điều chỉnh config SpongeKit và train lại.
Export sang ONNX#
Export checkpoint đã nén bằng cùng amba_config được sử dụng trong quá trình train:
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 trọng số điểm kiểm tra thưa vào cấu trúc đã chuẩn bị, và dò vết sang ONNX với việc tắt tính năng hợp nhất Conv+BN — tạo ra một đồ thị ở đúng dạng mà các công cụ biên dịch SDK 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 và kích thước đầu vào vào tệp ONNX, trong khi phần phụ trợ AmbaPB đọc thông tin này từ tệp phụ metadata.yaml bên cạnh mô hình đã biên dịch. Trừ khi các công cụ biên dịch SDK của bạn tạo tệp phụ 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 file *.ambapb.ckpt.onnx hoặc *.ambapb.fastckpt.onnx đã biên dịch.
- Điểm kiểm tra phải bao gồm trạng thái nén SpongeTorch. Việc cố gắng xuất điểm kiểm tra chưa nén với
amba_configđược đặt sẽ gây ra lỗi: "Điểm kiểm tra không có trạng thái tỉa thưa SpongeTorch... Hãy sử dụng điểm kiểm tra đã nén từ quá trình huấn luyện amba trước khi xuất." - 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. Việc sử dụng một cấu hình khác có thể ngăn các trọng số của điểm kiểm tra được tải chính xác.
Biên dịch bằng các Công cụ SDK#
Biên dịch mô hình ONNX đã xuất cho chipset mục tiêu của bạn bằng các công cụ biên dịch SDK, theo hướng dẫn biên dịch của SDK. Các công cụ này ánh xạ đồ thị lên công cụ AI CVflow — áp dụng PTQ, lập lịch và lập kế hoạch bộ nhớ — và tạo ra điểm kiểm tra AmbaPB để xác thực trên máy chủ.
PTQ áp dụng lượng tử hóa INT8 bằng cách sử dụng các hình ảnh hiệu chuẩn (được chuẩn bị theo mô tả trong hướng dẫn biên dịch của SDK), và các công cụ biên dịch cân bằng giữa độ chính xác và độ trễ thời gian chạy: ánh xạ nhiều phép tính hơn sang INT8 làm giảm độ trễ nhưng có thể làm giảm độ chính xác, trong khi giữ lại nhiều phép tính hơn ở FP16 sẽ bảo toàn độ chính xác ở độ trễ cao hơn. Khi PTQ không thể đạt được mục tiêu độ chính xác ở mức INT8 cần thiết cho ngân sách độ trễ của bạn, QAT với SpongeTorch là giải pháp khắc phục dự kiến — nó huấn luyện mô hình chịu đựng lượng tử hóa INT8 mạnh mẽ hơn, khôi phục độ chính xác tại điểm vận hành có độ trễ thấp hơn. QAT hiện chưa có sẵn trong bản tích hợp này và đã được lên kế hoạch cho một phiên bản trong tương lai.
Để Ultralytics nhận diện model đã biên dịch, tên file phải kết thúc bằng .ambapb.ckpt.onnx hoặc .ambapb.fastckpt.onnx.
Chạy inference 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 như cách nó sẽ chạy trên công 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 mọi ảnh hưởng của quantization do trình biên dịch thực hiện. Nếu có file metadata.yaml nằm cạnh model đã biên dịch, backend sẽ đọc tên class, stride và thông tin task từ file đó. Theo mặc định, backend sử dụng mode inference CVflow acinf; đặt biến môi trường ULTRALYTICS_AMBAPB_DEBUG=1 để log thông tin input/output nhằm debug.
Chuyển đổi sang Tệp nhị phân Cavalry#
Sau khi điểm kiểm tra AmbaPB vượt qua quá trình xác thực trên máy chủ, hãy sử dụng các công cụ biên dịch SDK để chuyển đổi nó thành tệp nhị phân Cavalry cho thiết bị mục tiêu của bạn, theo hướng dẫn biên dịch của SDK. Tệp nhị phân Cavalry là dạng được thực thi bởi thư viện thời gian chạy SDK trên bo mạch.
Triển khai trên board#
Tải tệp nhị phân Cavalry trên thiết bị Ambarella của bạn bằng thời gian chạy SDK Ambarella. Quá trình tiền xử lý và hậu xử lý phải khớp với mô hình phát hiện được biên dịch cho: đầu vào RGB đóng khung thư (letterboxed) trong phạm vi 0–255, 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 dùng SpongeTorch#
Nếu bạn không cần tính năng tỉa thưa trong thời gian huấn luyện của SpongeTorch, quy trình Ultralytics tiêu chuẩn cũng tạo ra một mô hình mà các công cụ SDK có thể biên dịch:
yolo export model=yolo26n.pt format=onnxBiên dịch ONNX kết quả bằng các công cụ biên dịch SDK, các công cụ này tự thực hiện việc lượng tử hóa sau huấn luyện. Lộ trình này đánh đổi một phần hiệu năng thời gian chạy và độ chính xác được lượng tử hóa để đổi lấy một quy trình đơn giản hơn mà không có phần phụ thuộc spongetorch tại thời điểm huấn luyện.
Ứng dụng thực tế#
Các model Ultralytics YOLO trên SoC Ambarella CVflow cung cấp khả năng vision luôn hoạt động tại edge:
- Camera an ninh AI: detection người và phương tiện theo thời gian thực trên camera IP 4K trong giới hạn công suất dưới 3 W.
- Drone và robot: detection và tracking object trên thiết bị cho điều hướng, kiểm tra và giao hàng trên các chip cấp CV5.
- Phân tích công nghiệp và bán lẻ: đếm người đa luồng, detection PPE và giám sát kệ hàng trên các thiết bị edge.
Tóm tắt#
Hướng dẫn 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 điểm kiểm tra đã nén, biên dịch ngoại tuyến thành điểm kiểm tra AmbaPB bằng các công cụ SDK, xác thực máy chủ thông qua Ultralytics, và chuyển đổi sang tệp nhị phân Cavalry để triển khai trên thiết bị với SDK Ambarella.
Đối với các target edge AI khác, 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 export, hãy truy cập tài liệu Export mode và trang integrations.
FAQ#
Không. Không có mục tiêu
format="ambarella". Hãy xuất sang ONNX (tùy chọn với quá trình nén SpongeTorch thông quaamba_config), sau đó biên dịch mô hình ONNX thành AmbaPB ngoại tuyến bằng các công cụ biên dịch SDK Ambarella.Bất kỳ SoC dựa trên CVflow nào được hỗ trợ bởi các công cụ biên dịch SDK 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 và CV5/CV52 cho máy bay không người lái và người máy. Đối số
amba_chipsetđịnh cấ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 ký tự chipset được chấp nhận và tính khả dụng phụ thuộc vào phiên bản SDK đã cài đặt.SpongeTorch là biến thể PyTorch của thư viện nén mô hình SpongeKit của Ambarella (thư viện này cũng có các biến thể Caffe và TensorFlow), được tích hợp vào bản nhánh Ambarella của Ultralytics để tỉa thưa phi cấu trúc trong thời gian huấn luyện (huấn luyện nhận biết lượng tử hóa được lên kế hoạch cho một phiên bản trong tương lai). Nó là tùy chọn: việc xuất ONNX Ultralytics thông thường cũng có thể được biên dịch bằng các công cụ biên dịch SDK, các công cụ này tự thực hiện việc lượng tử hóa, với một số chi phí về hiệu năng thời gian chạy và độ chính xác được lượng tử hóa.
Chúng là độc quyền và không có trên PyPI. Đăng ký trên Khu vực Nhà phát triển Ambarella để yêu cầu quyền truy cập SDK; SDK bao gồm các công cụ biên dịch (với
cvflowbackend), và gói wheelspongetorchđược phân phối riêng đi kèm với nó.Chạy
yolo val model=model.ambapb.ckpt.onnx data=your_data.yamlvới bản nhánh Ambarella đã được cài đặt. Phần phụ trợ AmbaPB thực thi mô hình đã biên dịch khi nó chạy trên công 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.