Làm việc với kết quả
Mỗi dự đoán trả về một đối tượng Results cho từng ảnh. Đối tượng có một slot được đặt tên cho mỗi loại payload; tất cả đều rỗng trừ các slot mô hình tạo ra, và artifact đã xuất cũng có cùng các slot.
Một đối tượng, một slot cho mỗi payload
Dự đoán trên một ảnh trả về một Results. Đối tượng chứa hai mươi ba slot payload,
và mô hình chỉ điền các slot do tác vụ tạo ra. Mọi slot khác là None, nên đọc
result.masks trên detector sẽ nhận None thay vì lỗi.
| Slot | Lớp | Shape | Được tạo bởi |
|---|---|---|---|
boxes | Boxes | (N, 4) cùng điểm và lớp | Phát hiện và mọi tác vụ định vị trước |
masks | Masks | (N, H, W) | Phân đoạn instance |
keypoints | Keypoints | (N, K, 2) hoặc (N, K, 3) | Tư thế |
probs | Probs | (C,) | Phân loại |
obb | OBB | (N, 7) hoặc (N, 8) | Box định hướng |
gaze | Gaze | (N, 2) pitch và yaw theo radian | Ước lượng hướng nhìn |
points | Points | (N, 4) gồm x, y, lớp, độ tin cậy | Định vị điểm |
semantic_mask | SemanticMask | (H, W) class id | Phân đoạn ngữ nghĩa |
panoptic | PanopticSegmentation | (H, W) segment id cùng segments_info | Phân đoạn panoptic |
depth_map | DepthMap | (H, W) số thực | Ước lượng độ sâu |
normal_map | NormalMap | (H, W, 3) vector đơn vị | Pháp tuyến bề mặt |
edges | EdgeMap | (H, W) số thực trong [0, 1] | Phát hiện cạnh |
restored | RestoredImage | (H, W, 3) uint8 RGB | Khôi phục và siêu phân giải |
matte | Matte | (H, W) số thực trong [0, 1] | Alpha matting và xóa nền |
ocr | OCRRegions | (N, 4, 2) đa giác cùng văn bản | Phát hiện và nhận dạng văn bản |
embeddings | Embeddings | (N, D) các hàng chuẩn hóa L2 | Tác vụ embed |
identities | Identities | N tên và điểm | Tác vụ embed với gallery |
meshes | Meshes | Tham số cơ thể và vertex tùy chọn | Khôi phục mesh cơ thể |
albedo | AlbedoMap | (H, W, 3) RGB tuyến tính | Ước lượng albedo |
boxes3d | Boxes3D | (N, 14) khối hộp trong hệ camera, căn theo hàng với boxes | Phát hiện 3D đơn mắt |
actions | Actions | (T, D) đoạn hành động | Chính sách robot |
generated | GeneratedImage | (H, W, 3) uint8 RGB cùng prompt, seed và thiết lập | Sinh ảnh |
gaussians | Gaussians | N Gaussian dưới dạng xyz, scales, rotations, opacities và sh, cùng camera và seed | Sinh 3D |
Bên cạnh đó là các trường có trong mọi kết quả: orig_shape dưới dạng
(height, width), path (đường dẫn nguồn hoặc None cho đầu vào trong bộ nhớ),
names ánh xạ class id đến tên lớp, frame_idx cho video và frame trực tiếp,
track_id khi theo dõi và restore_scale, hệ số upscale nguyên của kết quả khôi phục.
result.normals là bí danh của result.normal_map.
result.speed tồn tại trên mọi kết quả. Ensemble
điền nó bằng member_0, member_1 và fusion theo mili giây, các mô hình
LibreGen bằng inference, là số mili giây cho mỗi ảnh hoặc đối tượng được sinh
ra, và FCOS3D bằng preprocess, inference và postprocess. Các mô hình khác
để nó là dict rỗng.
Box
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9s.pt")result = model(SAMPLE_IMAGE) print(result.orig_shape) # (chiều cao, chiều rộng) của ảnh nguồnprint(result.path) # đường dẫn nguồn, None cho đầu vào trong bộ nhớ for xyxy, conf, cls in zip( result.boxes.xyxy.tolist(), result.boxes.conf.tolist(), result.boxes.cls.tolist(),): print(result.names[int(cls)], round(float(conf), 3), xyxy)from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9s.pt")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy[:1]) # pixel, x1 y1 x2 y2print(result.boxes.xywh[:1]) # pixel, tâm x, tâm y, w, hprint(result.boxes.xyxyn[:1]) # cùng box chia cho chiều rộng và chiều caoprint(result.boxes.xywhn[:1])from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9s.pt")result = model(SAMPLE_IMAGE) # Mỗi thao tác trả về Results mới; bản gốc không đổi.as_numpy = result.numpy()on_cpu = result.cpu() print(type(as_numpy.boxes.xyxy).__name__)print(type(on_cpu.boxes.xyxy).__name__)Boxes giữ tọa độ và điểm trong các mảng riêng thay vì một tensor đóng gói.
| Thuộc tính | Nội dung |
|---|---|
xyxy | (N, 4) pixel tuyệt đối, x1 y1 x2 y2 |
xywh | (N, 4) pixel tuyệt đối, tâm x, tâm y, chiều rộng, chiều cao |
xyxyn, xywhn | Các giá trị tương tự chia cho chiều rộng và chiều cao ảnh |
conf | (N,) độ tin cậy |
cls | (N,) class id dưới dạng số thực |
id | (N,) track id hoặc None |
is_track | id có được đặt hay không |
data | Mọi thứ được nối: box, id tùy chọn, conf, cls |
cls là mảng số thực, vì vậy hãy dùng dưới dạng result.names[int(cls)].
xyxyn và xywhn cần orig_shape, được Results điền cho bạn.
Payload dày đặc
Payload bao phủ toàn ảnh hoạt động khác payload theo instance, và sự khác biệt có ý nghĩa khi cắt lát.
SemanticMask chứa class id (H, W) trên canvas gốc, với 255 dành riêng làm
giá trị bỏ qua và không bao giờ được tính là lớp. classes liệt kê các id xuất
hiện và loại giá trị đó; class_mask(id) trả về boolean (H, W).
PanopticSegmentation chứa segment id (H, W), trong đó 0 là void id, cùng
danh sách dict segments_info chứa ít nhất id và category_id. segment_ids
liệt kê các id xuất hiện, còn segment_mask(id) chọn một id.
DepthMap chứa nghịch đảo độ sâu tương đối (H, W): cao hơn nghĩa là gần hơn,
và giá trị không dùng đơn vị mét. Nó cung cấp min, max, mean trên các giá
trị hữu hạn và normalized() để scale lại về [0, 1].
NormalMap chứa các vector đơn vị (H, W, 3) trong hệ tọa độ camera OpenCV,
với +x sang phải, +y hướng xuống và +z vào cảnh, nên bề mặt hướng về camera
là (0, 0, -1). assert_normalized() kiểm tra mọi pixel hữu hạn và có độ dài đơn vị.
EdgeMap chứa float32 (H, W) trong [0, 1]. Bản đồ liên tục được giữ lại thay
vì áp ngưỡng, nên binary(threshold=0.5) là nơi bạn chọn ngưỡng cắt.
Matte chứa float32 (H, W) trong [0, 1], trong đó 1 là hoàn toàn tiền cảnh.
array trả về dữ liệu đã cắt giới hạn dưới dạng float32.
RestoredImage chứa RGB uint8 (H, W, 3), với array cho ndarray thô và
save(path) để ghi dữ liệu.
Probs chứa một vector xác suất cho ảnh. top1 và top5 là chỉ mục lớp,
top1conf và top5conf là các điểm tương ứng.
Embeddings chứa các hàng (N, D) đã chuẩn hóa L2, nên độ tương đồng cosine là
một tích vô hướng. similarity(other) trả về (N, M) khi so với gallery hoặc
(N,) khi so với một vector, còn verify(i, j, threshold=0.4) so sánh hai hàng.
OCRRegions chứa các đa giác (N, 4, 2) theo thứ tự đọc, với các góc theo thứ
tự trên-trái, trên-phải, dưới-phải, dưới-trái. Văn bản nằm trong texts, điểm
nhận dạng trong conf, điểm phát hiện trong det_conf. Vì đây là đa giác xoay
thực sự, chúng không điền boxes; ocr.xyxy cung cấp bao lồi thẳng trục khi bạn
cần hình chữ nhật.
Cắt lát và di chuyển
result[i] trả về Results mới chứa một instance. Payload theo instance được
cắt lát; payload toàn ảnh được giữ nguyên, nên cắt lát kết quả phân loại không
thể cắt vector xác suất xuống một lớp, còn cắt lát kết quả độ sâu không thể làm
hỏng bố cục (H, W).
len(result) đếm instance: box, điểm, embedding, vùng OCR hoặc mesh. Mọi
payload toàn ảnh dày đặc được tính là 1, và một ảnh được sinh ra hoặc đối tượng
3D cũng vậy. Kết quả không chứa gì có giá trị 0.
to(), cpu(), cuda() và numpy() đều trả về Results mới với mọi slot đã
điền được chuyển đổi. Chúng không sửa bản gốc.
update() là phương thức duy nhất thay đổi tại chỗ, thay thế các slot được nêu tên và trả về cùng đối tượng.
JSON
import json from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9s.pt")result = model(SAMPLE_IMAGE) rows = result.summary()print(json.dumps(rows[:2], indent=2)) # Cùng nội dung dưới dạng chuỗi, với cùng các đối số từ khóa.print(result.to_json(normalize=True, decimals=3)[:200])libreyolo predict model=LibreYOLO9s.pt --json \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgsummary() trả về danh sách dict thông thường, còn to_json() là danh sách đó
được đưa qua json.dumps. Cả hai nhận cùng ba đối số: normalize=False chuyển
tọa độ sang [0, 1], decimals=5 đặt mức làm tròn và embeddings=False điều
khiển việc đưa vector embedding vào.
Shape hàng tuân theo payload. Hàng phát hiện chứa name, class, confidence
và dict box, đồng thời có thêm segments khi có mask, obb và corners cho
box định hướng, góc gaze theo cả radian lẫn độ, track_id khi theo dõi và tham
số mesh khi có mesh.
Khi không có box, một payload quyết định các hàng: OCR phát một hàng cho mỗi vùng
cùng text, điểm phát một hàng cho mỗi điểm, panoptic phát một hàng cho mỗi
segment cùng pixel_count và pixel_fraction, semantic phát một hàng cho mỗi
lớp xuất hiện, còn phân loại phát năm lớp đứng đầu. Độ sâu, pháp tuyến, cạnh, khôi
phục và matting đều phát một hàng tóm tắt mô tả bản đồ thay vì các pixel, còn một ảnh được sinh ra hoặc đối tượng 3D phát
một hàng cùng seed và thiết lập của nó.
Hai payload được cố ý rút gọn. Vector embedding chỉ được báo cáo dưới dạng
embedding_dim vì một hàng 512 số thực chiếm khoảng 2 KB cho mỗi khuôn mặt;
truyền embeddings=True để đưa các giá trị vào. Vertex mesh hoàn toàn không
được đưa vào vì có hàng chục nghìn tọa độ cho mỗi người. Hãy đọc
result.meshes.vertices hoặc gọi result.meshes.save_obj(path) để lấy hình học.
Vẽ và lưu
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9s.pt") # save=True vẽ payload và ghi vào runs/detect/predict*.result = model(SAMPLE_IMAGE, save=True)print(result.saved_path)predict(save=True) là luồng chú thích và ghi. Phương thức chọn hàm vẽ theo slot
được điền, nên kết quả semantic được ghi dưới dạng mask màu, kết quả độ sâu dưới
dạng trực quan hóa độ sâu, kết quả panoptic với các segment, matte dưới dạng PNG
RGBA nền trong suốt, còn detector dưới dạng box với mask bên dưới. Đường dẫn đã
ghi được gắn vào kết quả dưới dạng result.saved_path.
Results.save(path) cũng có phạm vi hẹp: phương thức ghi một ảnh được sinh ra
hoặc đối tượng 3D, chọn định dạng theo phần mở rộng, và ghi kết quả matte thành
ảnh cắt PNG RGBA nền trong suốt, còn lại phát sinh NotImplementedError.
Results.cutout() trả về cùng mảng RGBA mà không ghi. Với matte, cả hai cần ảnh
nguồn, lấy từ result.path hoặc được truyền dưới dạng image=.
Hai payload có trình ghi riêng: result.restored.save(path) cho ảnh đã khôi phục và result.meshes.save_obj(path, index=0) cho mesh.
Để biết tệp được đặt ở đâu và output_path cùng output_file_format hoạt động thế nào, hãy xem Nguồn dự đoán.
plot() hỗ trợ dữ liệu của mọi tác vụ. Lớp phủ ảnh mặc định trả về BGR uint8 HxWx3 liên tục; pil=True yêu cầu PIL. Bản đồ độ sâu, pháp tuyến, biên và albedo, khối hộp 3D, đoạn hành động, ảnh được sinh ra và bản render điểm của một đối tượng 3D được sinh ra mặc định trả về ảnh PIL; pil=False trả về mảng. orig_img giữ pixel BGR cho nguồn trong bộ nhớ và URL; có thể mở lại tệp cục bộ và khung hình đã thu từ video hữu hạn.
Các điều khiển gồm img, conf, labels, boxes, masks, probs, line_width, pil, show, save và filename. Ảnh phân loại đã lưu chứa năm nhãn đứng đầu. Lưu matte ghi ảnh tách nền RGBA.
Artifact đã xuất trả về cùng đối tượng
pip install "libreyolo[onnx]"from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9s.pt")path = model.export(format="onnx") # trả về đường dẫn đã ghi # LibreYOLO() định tuyến theo hậu tố tệp.exported = LibreYOLO(path)result = exported(SAMPLE_IMAGE) print(type(result).__name__, len(result.boxes))LibreYOLO() định tuyến theo hậu tố tệp, nên artifact đã xuất được tải qua cùng
lời gọi như checkpoint .pt và trả về cùng Results. Các tệp .onnx,
.torchscript, .engine, .pte, .tflite và .mnn được nhận diện theo hậu tố,
tương tự các thư mục OpenVINO, Paddle, ncnn, Core ML .mlpackage và URL mô hình
Triton. Mã đọc result.boxes.xyxy không thay đổi khi mô hình
được thay bằng bản đã xuất. Xem Xuất để biết toàn bộ định dạng.
Dùng API riêng của runtime đồng nghĩa bạn phải tự đảm nhiệm tiền xử lý, hậu xử lý và tên lớp.