EdgeCrafter

Một vision transformer nhỏ gọn cho dự đoán dày đặc trên phần cứng biên, được upstream công bố dưới dạng ba mô hình cùng họ: ECDet, ECPose và ECSeg. LibreYOLO nạp cả ba thành một family, với tác vụ được xác định bởi checkpoint.

Tác vụ
detection, pose, instance segmentation
Kích thước
s, m, l, x at 640 px
Cài đặt
pip install libreyolo
Bậc hỗ trợ
Cốt lõi, từ v1.2.0. Các bộ phát hiện cốt lõi có thể huấn luyện: tính năng theo sau các mô hình chủ lực trong cùng đợt phát hành.
Thượng nguồn
EdgeCrafter của Intellindust AI Lab, Apache-2.0. Bài báo, mã nguồn
Giấy phép
Mã nguồn Apache-2.0, trọng số Apache-2.0. Sử dụng thương mại

Cài đặt

EdgeCrafter không cần thành phần tùy chọn nào. Mọi nội dung mà mô hình import đều có trong bản cài đặt cơ sở.

bash
pip install libreyolo

Tinh chỉnh adapter với lora=True là ngoại lệ và cần thành phần bổ sung lora.

bash
pip install "libreyolo[lora]"

Dự đoán

Trọng số được tải từ Hugging Face trong lần sử dụng đầu tiên và lưu vào cache cục bộ.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreECs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreECs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Tư thế
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Hậu tố -pose trong tên tệp chọn keypoint head, vì vậy không cần# đối số task ở đây.model = LibreYOLO("LibreECs-pose.pt")result = model(SAMPLE_IMAGE, save=True) print(result.keypoints.xy)print(result.boxes.conf)
Phân đoạn thực thể
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreECs-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

Tác vụ được xác định từ tên tệp, vì vậy checkpoint có -pose hoặc -seg sẽ tự chọn head và không nhận đối số task. Cả ba đều trả về đối tượng Results giống mọi family khác, với result.keypoints được thêm cho tư thế và result.masks cho phân đoạn. Tác vụ tư thế bao gồm một lớp đối tượng là người, với 17 keypoint COCO, và số lượng được cố định khi dựng mô hình. Nó không có box head, vì vậy mỗi hộp tư thế là phạm vi bao của chính các keypoint, còn kênh keypoint thứ ba là một hằng số thay vì điểm số theo từng điểm.

confmax_det lọc quá trình chọn query; iou được chấp nhận để giữ tính tương thích API nhưng không có tác dụng, vì cả ba head đều decode một tập query không có bước NMS. Xem dự đoán để biết về nguồn, stream và cách xử lý kết quả.

Biến thể

Có bốn kích thước. Tất cả đều chạy ở cùng độ phân giải đầu vào, vì vậy bảng phân biệt chúng theo số lượng tham số và độ chính xác.

CheckpointĐầu vào (px)mAP 50-95Tham số (M)
LibreECl64060.132.97
LibreECm64058.419.43
LibreECs64054.39.88
LibreECx64061.149.94

COCO val2017, 500 images. Được đo bằng bộ benchmark LibreYOLO và công bố trên Vision Analysis, nơi so sánh độ trễ giữa các phần cứng và runtime, đồng thời lưu trữ đầy đủ bản ghi của từng lần chạy.

Upstream công bố ECDet, ECPose và ECSeg dưới dạng ba mô hình riêng thay vì một mô hình có ba head. Chúng dùng chung backbone ECViT và hybrid encoder, chỉ khác ở head, nên LibreYOLO gộp chúng thành một family và để tên tệp checkpoint mang thông tin tác vụ. Do đó, một chữ cái chỉ kích thước biểu thị cùng backbone và encoder trên cả ba mô hình, còn các lệnh dự đoán, xác thực và xuất nhận cùng đối số bất kể bạn nạp mô hình nào.

Huấn luyện

Cả ba tác vụ đều huấn luyện qua train(). Phương thức này đọc tác vụ từ checkpoint đã nạp và chọn trainer tương ứng.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.train(    data="my-dataset.yaml",    epochs=50,    imgsz=640,    batch=8,    lr0=5e-4,)
CLI
libreyolo train model=LibreECs.pt data=my-dataset.yaml epochs=50 imgsz=640 batch=8 lr0=5e-4
Tư thế
from libreyolo import LibreYOLO # Cần dataset keypoint một lớp có data.yaml khai báo kpt_shape,# và imgsz bằng kích thước gốc của checkpoint.model = LibreYOLO("LibreECs-pose.pt")model.train(    data="my-pose-dataset.yaml",    epochs=50,    imgsz=640,)
Phân đoạn thực thể
from libreyolo import LibreYOLO # Cần nhãn polygon và imgsz bằng kích thước gốc của checkpoint.model = LibreYOLO("LibreECs-seg.pt")model.train(    data="my-dataset.yaml",    epochs=50,    imgsz=640,)
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.train(    data="my-dataset.yaml",    epochs=50,    lora=True,)

Những nội dung đã được kiểm tra cho phát hiện và phân đoạn: độ tương đồng inference với upstream ở mức 1e-5, theo từng lớp và từng kích thước, cùng khả năng chạy loss và một bước huấn luyện trên đầu vào tổng hợp. Những nội dung chưa được kiểm tra, theo docstring của chính train(): độ hội tụ của một lượt tinh chỉnh đầy đủ, huấn luyện multi-GPU, bước nạp lại mô hình tốt nhất sau khi dừng augmentation và ánh xạ lại lớp đối tượng từ Objects365 sang COCO. Đường dẫn tư thế tuân theo recipe đã công bố của DETRPose, dùng Hungarian matcher trên chi phí lớp đối tượng, keypoint L1 và OKS với cơ chế khử nhiễu keypoint tương phản; độ hội tụ đầu cuối của nó cũng chưa được kiểm tra.

Nếu giữ nguyên, trainer chạy 74 epoch ở lr0=5e-4 và bật mixed precision, theo recipe upstream: AdamW, lịch flat cosine, EMA ở 0.9999 và đầu vào được chuẩn hóa theo ImageNet. Cả tư thế lẫn phân đoạn đều yêu cầu imgsz bằng kích thước gốc của checkpoint vì evaluation anchor grid được dựng khi khởi tạo mô hình; giá trị khác sẽ phát sinh lỗi trước khi lượt chạy bắt đầu. Tư thế còn yêu cầu dataset một lớp có data.yaml khai báo kpt_shape, với số lượng keypoint khớp với head.

lora=True chỉ áp dụng cho phát hiện; tư thế và phân đoạn sẽ phát sinh ValueError khi dùng tùy chọn này. Trên Apple silicon, trainer giữ lượt chạy trên GPU và gửi một phép toán sang CPU, đó là phép lan truyền ngược grid-sample bên trong deformable attention mà PyTorch chưa triển khai trong Metal.

Xem huấn luyện để biết về dataset, tăng cường dữ liệu (data augmentation), multi-GPU và logger.

Xác thực

val() trả về một dictionary được lập chỉ mục bằng tên metric và in kết quả theo từng lớp đối tượng khi vẫn bật verbose.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreECs.pt data=my-dataset.yaml
Tư thế
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-pose.pt")metrics = model.val(data="my-pose-dataset.yaml") print(metrics["metrics/keypoints_mAP50-95"])print(metrics["metrics/keypoints_mAP50"])
Phân đoạn thực thể
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # mặt nạprint(metrics["metrics/mAP50-95(B)"])   # hộp

Tác vụ tư thế báo cáo metric OKS của keypoint dưới metrics/keypoints_*. Tác vụ phân đoạn báo cáo mặt nạ dưới key metrics/mAP50-95 thuần và lặp lại cả hai góc nhìn trong một lượt, hộp dưới (B) và mặt nạ dưới (M).

Xuất

Tác vụONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: được hỗ trợDetection to TorchScript: được hỗ trợDetection to ExecuTorch: được hỗ trợDetection to TensorRT: được hỗ trợDetection to OpenVINO: được hỗ trợDetection to Paddle: được hỗ trợDetection to MNN: được hỗ trợDetection to RKNN: không được hỗ trợDetection to ncnn: không được hỗ trợDetection to TFLite: không được hỗ trợDetection to CoreML: không được hỗ trợDetection to Core AI: được hỗ trợ
PosePose to ONNX: được hỗ trợPose to TorchScript: được hỗ trợPose to ExecuTorch: được hỗ trợPose to TensorRT: được hỗ trợPose to OpenVINO: được hỗ trợPose to Paddle: được hỗ trợPose to MNN: không được hỗ trợPose to RKNN: không được hỗ trợPose to ncnn: không được hỗ trợPose to TFLite: không được hỗ trợPose to CoreML: không được hỗ trợPose to Core AI: không được hỗ trợ
Instance segmentationInstance segmentation to ONNX: được hỗ trợInstance segmentation to TorchScript: được hỗ trợInstance segmentation to ExecuTorch: được hỗ trợInstance segmentation to TensorRT: được hỗ trợInstance segmentation to OpenVINO: được hỗ trợInstance segmentation to Paddle: được hỗ trợInstance segmentation to MNN: không được hỗ trợInstance segmentation to RKNN: không được hỗ trợInstance segmentation to ncnn: không được hỗ trợInstance segmentation to TFLite: không được hỗ trợInstance segmentation to CoreML: không được hỗ trợInstance segmentation to Core AI: không được hỗ trợ

Artifact đã xuất được nạp lại qua LibreYOLO() dựa trên hậu tố tệp, vì vậy tệp .onnx hoặc .engine hoạt động như một checkpoint và trả về cùng một đối tượng Results. Tư thế và phân đoạn xuất ở đầu vào cố định 640 x 640 thay vì shape động, và một số target phát hiện cũng dùng canvas cố định, gồm OpenVINO, Paddle, MNN, ExecuTorch và Core AI. Phần Xuất liệt kê các đối số mà mọi định dạng chấp nhận và những thành phần bổ sung mà một số định dạng yêu cầu.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreECs.pt format=onnx imgsz=640libreyolo export model=LibreECs-pose.pt format=onnx imgsz=640libreyolo export model=LibreECs-seg.pt format=onnx imgsz=640
Dùng tệp đã xuất
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Factory định tuyến theo hậu tố tệp, vì vậy artifact đã xuất được nạp# như mọi checkpoint khác và trả về cùng một đối tượng Results.model = LibreYOLO("LibreECs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoint

Tất cả tệp trọng số đã công bố cho family này.

TệpĐầu vào (px)Giấy phép trọng số
Detection
LibreECs.pt640apache-2.0
LibreECm.pt640apache-2.0
LibreECl.pt640apache-2.0
LibreECx.pt640apache-2.0
Pose
LibreECs-pose.pt640apache-2.0
LibreECm-pose.pt640apache-2.0
LibreECl-pose.pt640apache-2.0
LibreECx-pose.pt640apache-2.0
Instance segmentation
LibreECs-seg.pt640apache-2.0
LibreECm-seg.pt640apache-2.0
LibreECl-seg.pt640apache-2.0
LibreECx-seg.pt640apache-2.0

Mọi tệp ở trên hiện đều có trong tổ chức LibreYOLO và được tải xuống trong lần sử dụng đầu tiên.

Giấy phép

Hãy kiểm tra giấy phép trong repo Hugging Face của trọng số cụ thể mà bạn tải xuống. Mỗi checkpoint trong tổ chức LibreYOLO đều có giấy phép riêng và giấy phép có thể khác nhau trong cùng một họ. Repo đó là nguồn có thẩm quyền; phần tóm tắt dưới đây mô tả các điều khoản áp dụng khi trang này được kiểm chứng lần gần nhất.

Đây là phần mô tả các giấy phép liên quan, không phải tư vấn pháp lý. Nếu câu trả lời có ý nghĩa về mặt thương mại, hãy tự đọc các giấy phép và tham khảo cố vấn của riêng bạn.

Công trình gốc
EdgeCrafter, Intellindust AI Lab
Giấy phép thượng nguồn
Apache-2.0
Mã nguồn LibreYOLO
MIT
Trọng số
Apache-2.0, được phát hành lại tại huggingface.co/LibreYOLO
Diễn giải
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. One license covers all three upstream models, so the detection, pose and segmentation weights carry identical terms, and weights you train yourself on your own data are yours.

Trích dẫn

@article{liu2026edgecrafter,
  title={EdgeCrafter: Compact ViTs for Edge Dense Prediction via Task-Specialized Distillation},
  author={Liu, Longfei and Hou, Yongjie and Li, Yang and Wang, Qirui and Sha, Youyang and Yu, Yongjun and Wang, Yinzhi and Ru, Peizhe and Yu, Xuanlong and Shen, Xi},
  journal={arXiv},
  year={2026}
}

Được sao chép từ khối trích dẫn của tác giả tại github.com/Intellindust-AI-Lab/EdgeCrafter#-citation.

Đã kiểm chứng với LibreYOLO v1.5.0. Các bảng hỗ trợ, checkpoint và số liệu benchmark trên trang này được tạo từ thư viện đã phát hành và trọng số đã công bố, không phải viết thủ công.