EdgeCrafter
Vision transformer ringkas untuk prediksi dense di perangkat edge, dipublikasikan upstream sebagai tiga model bersaudara: ECDet, ECPose dan ECSeg. LibreYOLO memuat ketiganya sebagai satu family, dengan task ditentukan oleh checkpoint.
- Task
- detection, pose, instance segmentation
- Ukuran
- s, m, l, x at 640 px
- Instalasi
pip install libreyolo- Tier dukungan
- Inti, sejak v1.2.0. Detektor inti yang dapat dilatih: fitur menyusul tier unggulan dalam gelombang rilis yang sama.
- Lisensi
- Kode Apache-2.0, bobot Apache-2.0. Penggunaan komersial
Instalasi
EdgeCrafter tidak memerlukan extra opsional. Semua yang diimpornya sudah tersedia di instalasi dasar.
pip install libreyoloFine-tuning adapter dengan lora=True adalah pengecualian, dan memerlukan extra
lora.
pip install "libreyolo[lora]"Prediksi
Bobot diunduh dari Hugging Face saat pertama kali dipakai lalu disimpan di cache lokal.
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)libreyolo predict model=LibreECs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Sufiks -pose pada nama berkas memilih head keypoint, jadi argumen# task tidak diperlukan di sini.model = LibreYOLO("LibreECs-pose.pt")result = model(SAMPLE_IMAGE, save=True) print(result.keypoints.xy)print(result.boxes.conf)from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreECs-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)Task berasal dari nama berkas, jadi checkpoint -pose atau -seg memilih
head-nya sendiri dan tidak menerima argumen task. Ketiganya mengembalikan objek
Results yang dikembalikan setiap family, dengan tambahan result.keypoints
untuk pose dan result.masks untuk segmentasi. Pose mencakup satu kelas, yaitu
person, dengan 17 keypoint COCO, dan jumlahnya ditetapkan saat model dibangun.
Pose tidak punya head box, jadi setiap box pose adalah rentang batas dari
keypoint-nya sendiri, dan kanal keypoint ketiga berupa konstanta, bukan skor per
titik.
conf dan max_det menyaring pemilihan query; iou tetap diterima demi
keseragaman API tetapi tidak berpengaruh, karena ketiga head melakukan decode
atas sekumpulan query tanpa langkah NMS. Lihat prediksi untuk
source, streaming dan penanganan hasil.
Varian
Empat ukuran. Semuanya berjalan pada resolusi input yang sama, jadi tabel membedakannya lewat jumlah parameter dan akurasi.
| Checkpoint | Input (piksel) | mAP 50-95 | Parameter (juta) |
|---|---|---|---|
| LibreECl | 640 | 60.1 | 32.97 |
| LibreECm | 640 | 58.4 | 19.43 |
| LibreECs | 640 | 54.3 | 9.88 |
| LibreECx | 640 | 61.1 | 49.94 |
COCO val2017, 500 images. Diukur oleh perangkat benchmark LibreYOLO dan dipublikasikan di Vision Analysis, tempat latensi pada berbagai hardware dan runtime dibandingkan serta rekaman lengkap setiap pengujian tersedia.
Upstream memublikasikan ECDet, ECPose dan ECSeg sebagai tiga model terpisah, bukan satu model dengan tiga head. Ketiganya berbagi backbone ECViT dan encoder hybrid, dan hanya berbeda pada head, jadi LibreYOLO menyatukannya menjadi satu family dan membiarkan nama berkas checkpoint yang menentukan task. Karena itu huruf ukuran berarti backbone dan encoder yang sama di ketiganya, dan prediksi, validasi serta ekspor memakai argumen yang sama, mana pun yang dimuat.
Pelatihan
Ketiga task dilatih lewat train(), yang membaca task dari checkpoint yang
dimuat lalu memilih trainer yang cocok.
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.train( data="my-dataset.yaml", epochs=50, imgsz=640, batch=8, lr0=5e-4,)libreyolo train model=LibreECs.pt data=my-dataset.yaml epochs=50 imgsz=640 batch=8 lr0=5e-4from libreyolo import LibreYOLO # Butuh dataset keypoint satu kelas yang data.yaml-nya mendeklarasikan# kpt_shape, dan imgsz pada ukuran native checkpoint.model = LibreYOLO("LibreECs-pose.pt")model.train( data="my-pose-dataset.yaml", epochs=50, imgsz=640,)from libreyolo import LibreYOLO # Butuh label poligon, dan imgsz pada ukuran native checkpoint.model = LibreYOLO("LibreECs-seg.pt")model.train( data="my-dataset.yaml", epochs=50, imgsz=640,)from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.train( data="my-dataset.yaml", epochs=50, lora=True,)Yang sudah diperiksa untuk deteksi dan segmentasi: kesetaraan inferensi terhadap
upstream pada 1e-5, lapisan demi lapisan dan per ukuran, serta bahwa loss dan
satu langkah pelatihan berjalan pada input sintetis. Yang belum, menurut
docstring train() sendiri: konvergensi fine-tune penuh, pelatihan multi-GPU,
langkah stop-augmentation best-reload, dan remap kelas Objects365 ke COCO. Jalur
pose mengikuti resep yang dipublikasikan DETRPose, yaitu matcher Hungarian atas
biaya kelas, L1 keypoint dan OKS dengan denoising keypoint kontrastif, dan
konvergensinya juga belum diperiksa dari ujung ke ujung.
Jika dibiarkan apa adanya, trainer menjalankan 74 epoch pada lr0=5e-4 dengan
mixed precision aktif, mengikuti resep upstream: AdamW, jadwal cosine datar, EMA
pada 0.9999 dan input yang dinormalisasi ala ImageNet. Pose dan segmentasi
sama-sama mengharuskan imgsz pada ukuran native checkpoint, karena grid anchor
untuk evaluasinya dibangun saat model dikonstruksi; nilai yang berbeda akan
memunculkan error sebelum run dimulai. Pose juga mengharuskan dataset satu kelas
yang data.yaml-nya mendeklarasikan kpt_shape, dengan jumlah keypoint yang
cocok dengan head.
lora=True hanya berlaku untuk deteksi; pose dan segmentasi memunculkan
ValueError jika memakainya. Di Apple silicon, trainer mempertahankan run di GPU
dan mengirim satu operasi ke CPU, yaitu backward grid-sample di dalam deformable
attention, yang tidak diimplementasikan PyTorch di Metal.
Lihat pelatihan untuk dataset, augmentasi, multi-GPU dan logger.
Validasi
val() mengembalikan dictionary dengan key berupa nama metrik, dan mencetak
hasil per kelas jika verbose dibiarkan aktif.
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreECs.pt data=my-dataset.yamlfrom 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"])from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"]) # maskprint(metrics["metrics/mAP50-95(B)"]) # boxPose melaporkan metrik OKS keypoint di bawah metrics/keypoints_*. Segmentasi
melaporkan mask di bawah key metrics/mAP50-95 biasa dan mengulang kedua sudut
pandang dalam satu pass, box di bawah (B) dan mask di bawah (M).
Ekspor
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: didukung | Detection to TorchScript: didukung | Detection to ExecuTorch: didukung | Detection to TensorRT: didukung | Detection to OpenVINO: didukung | Detection to Paddle: didukung | Detection to MNN: didukung | Detection to RKNN: tidak didukung | Detection to ncnn: tidak didukung | Detection to TFLite: tidak didukung | Detection to CoreML: tidak didukung | Detection to Core AI: didukung |
| Pose | Pose to ONNX: didukung | Pose to TorchScript: didukung | Pose to ExecuTorch: didukung | Pose to TensorRT: didukung | Pose to OpenVINO: didukung | Pose to Paddle: didukung | Pose to MNN: tidak didukung | Pose to RKNN: tidak didukung | Pose to ncnn: tidak didukung | Pose to TFLite: tidak didukung | Pose to CoreML: tidak didukung | Pose to Core AI: tidak didukung |
| Instance segmentation | Instance segmentation to ONNX: didukung | Instance segmentation to TorchScript: didukung | Instance segmentation to ExecuTorch: didukung | Instance segmentation to TensorRT: didukung | Instance segmentation to OpenVINO: didukung | Instance segmentation to Paddle: didukung | Instance segmentation to MNN: tidak didukung | Instance segmentation to RKNN: tidak didukung | Instance segmentation to ncnn: tidak didukung | Instance segmentation to TFLite: tidak didukung | Instance segmentation to CoreML: tidak didukung | Instance segmentation to Core AI: tidak didukung |
Artefak hasil ekspor dimuat kembali lewat LibreYOLO() berdasarkan sufiks
berkasnya, jadi berkas .onnx atau .engine berperilaku seperti checkpoint dan
mengembalikan Results yang sama. Pose dan segmentasi diekspor pada input tetap
640 kali 640, bukan shape dinamis, dan beberapa target deteksi juga memakai
kanvas tetap, termasuk OpenVINO, Paddle, MNN, ExecuTorch dan Core AI.
Ekspor memuat daftar argumen yang diterima setiap format dan
tambahan yang disediakan sebagian di antaranya.
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)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=640from libreyolo import LibreYOLO, SAMPLE_IMAGE # Factory memilih jalur berdasarkan sufiks berkas, jadi artefak hasil# ekspor dimuat seperti checkpoint biasa dan mengembalikan objek# Results yang sama.model = LibreYOLO("LibreECs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoint
Semua berkas bobot yang dipublikasikan untuk family ini.
| Berkas | Input (piksel) | Lisensi bobot |
|---|---|---|
| Detection | ||
| LibreECs.pt | 640 | apache-2.0 |
| LibreECm.pt | 640 | apache-2.0 |
| LibreECl.pt | 640 | apache-2.0 |
| LibreECx.pt | 640 | apache-2.0 |
| Pose | ||
| LibreECs-pose.pt | 640 | apache-2.0 |
| LibreECm-pose.pt | 640 | apache-2.0 |
| LibreECl-pose.pt | 640 | apache-2.0 |
| LibreECx-pose.pt | 640 | apache-2.0 |
| Instance segmentation | ||
| LibreECs-seg.pt | 640 | apache-2.0 |
| LibreECm-seg.pt | 640 | apache-2.0 |
| LibreECl-seg.pt | 640 | apache-2.0 |
| LibreECx-seg.pt | 640 | apache-2.0 |
Setiap berkas di atas saat ini tersedia di organisasi LibreYOLO dan diunduh saat pertama kali digunakan.
Lisensi
Periksa lisensi di repositori Hugging Face untuk bobot tertentu yang diunduh. Setiap checkpoint di organisasi LibreYOLO memiliki lisensi, dan lisensinya tidak selalu sama dalam satu family. Repositori tersebut adalah sumber resmi. Ringkasan di bawah menjelaskan ketentuan yang berlaku saat halaman ini terakhir diverifikasi.
Ini adalah deskripsi lisensi yang terlibat, bukan nasihat hukum. Jika jawabannya penting secara komersial, baca sendiri lisensinya dan mintalah nasihat dari penasihat hukum Anda.
- Karya asli
- EdgeCrafter, Intellindust AI Lab
- Lisensi upstream
- Apache-2.0
- Sumber upstream
- github.com/Intellindust-AI-Lab/EdgeCrafter
- Kode LibreYOLO
- MIT
- Bobot
- Apache-2.0, dipublikasikan ulang di huggingface.co/LibreYOLO
- Interpretasi
- 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.
Sitasi
@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}
}Disalin dari blok sitasi penulis di github.com/Intellindust-AI-Lab/EdgeCrafter#-citation.