ml.utils --- Tiện ích ML

Module ml.utils chứa các lớp và hàm tiện ích cho học máy.

Hàm

ml.utils.logit(x: ndarray) ndarray

Trả về logit của tất cả các giá trị trong ndarray được truyền vào.

ml.utils.sigmoid(x: ndarray) ndarray

Trả về sigmoid của tất cả các giá trị trong ndarray được truyền vào.

ml.utils.threshold(scores: ndarray, threshold: float, scale: float, find_max: bool = False, find_max_axis: int = 1) ndarray

Áp dụng ngưỡng cho scores (một ndarray được lượng tử hóa kiểu int8, uint8, int16 hoặc uint16) theo threshold được lượng tử hóa và trả về một ndarray gồm tất cả các chỉ mục vượt qua ngưỡng.

scale được kiểm tra để xác định xem các giá trị đã khử lượng tử hóa là dương hay âm. Khi scale > 0, các chỉ mục thỏa mãn scores > threshold được trả về; ngược lại, các chỉ mục thỏa mãn scores < threshold được trả về.

find_max nếu là True, sẽ thay thế scores bên trong bằng một ndarray gồm giá trị lớn nhất (hoặc nhỏ nhất, tùy thuộc vào scale) theo trục find_max_axis.

find_max_axis là trục mà dọc theo đó phép rút gọn max/min được tính khi find_max là True.

ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray

Chuyển đổi ndarray được truyền vào bằng cách chia cho scale và cộng với zero point của mô hình (ML). Trả về value không thay đổi khi kiểu dữ liệu đầu ra của mô hình (ML) tại index là float.

model là mô hình (ML) có các tham số lượng tử hóa đầu ra được sử dụng.

valuendarray cần lượng tử hóa.

index chọn tensor đầu ra của model để lượng tử hóa theo.

ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray

Chuyển đổi ndarray được truyền vào bằng cách trừ đi zero point rồi nhân với scale của mô hình (ML). Trả về value không thay đổi khi kiểu dữ liệu đầu ra của mô hình (ML) tại index là float.

model là mô hình (ML) có các tham số lượng tử hóa đầu ra được sử dụng.

valuendarray cần khử lượng tử hóa.

index chọn tensor đầu ra của model để khử lượng tử hóa theo.

ml.utils.draw_predictions(image: image.Image, boxes: list[tuple[float, float, float, float]], labels: list[str], colors: list[tuple[int, int, int]], scores: list[float] | None = None, format: str = 'pascal_voc', font_width: int = 8, font_height: int = 10, text_color: tuple[int, int, int] = (255, 255, 255)) None

Vẽ các hộp giới hạn (hoặc các điểm đánh dấu tâm) kèm nhãn văn bản lên image.

boxes là danh sách các tuple (x, y, w, h).

labels là danh sách các chuỗi nhãn, mỗi nhãn ứng với một hộp.

colors là danh sách các tuple (r, g, b), mỗi tuple ứng với một hộp.

scores nếu không phải None, là danh sách điểm tin cậy theo từng hộp. Khi được cung cấp, mỗi nhãn được hiển thị sẽ được thêm hậu tố là điểm số định dạng theo " %.2f".

format kiểm soát cách diễn giải tọa độ hộp:

  • "pascal_voc" -- (xmin, ymin, xmax, ymax) chuẩn hóa trong khoảng 0.0 đến 1.0.

  • "point" -- điểm ảnh tuyệt đối (x, y, w, h); một vòng tròn được tô đặc được vẽ tại tâm hộp thay vì hình chữ nhật (hữu ích cho các bộ phát hiện điểm tâm).

  • bất kỳ giá trị nào khác -- điểm ảnh tuyệt đối (x, y, w, h); được vẽ dưới dạng hình chữ nhật.

font_width là chiều rộng tính bằng điểm ảnh của mỗi ký tự trong nhãn.

font_height là chiều cao tính bằng điểm ảnh của nền nhãn.

text_color là màu sắc (r, g, b) dùng cho văn bản nhãn.

ml.utils.draw_keypoints(image: image.Image, keypoints: ndarray, radius: int = 4, color: tuple[int, int, int] = (255, 0, 0), thickness: int = 1, fill: bool = False) None

Vẽ một ndarray gồm các giá trị điểm đặc trưng (x, y, ...) lên image.

radius là bán kính vòng tròn điểm đặc trưng. Khi radius == 0, các điểm đặc trưng được vẽ dưới dạng điểm ảnh đơn.

color là màu sắc điểm đặc trưng (r, g, b).

thickness là độ dày viền vòng tròn.

fill nếu là True, sẽ tô đặc các vòng tròn điểm đặc trưng.

ml.utils.draw_skeleton(image: image.Image, keypoints: ndarray, lines: list[tuple[int, int]], kp_radius: int = 4, kp_color: tuple[int, int, int] = (255, 0, 0), kp_thickness: int = 1, kp_fill: bool = False, line_color: tuple[int, int, int] = (0, 255, 0), line_thickness: int = 1) None

Vẽ một ndarray gồm các giá trị điểm đặc trưng (x, y, ...) lên image rồi nối chúng bằng các đoạn thẳng.

lines là danh sách các tuple (kp0_idx, kp1_idx) chỉ định các cặp điểm đặc trưng cần nối.

kp_radius là bán kính vòng tròn điểm đặc trưng (truyền qua cho draw_keypoints).

kp_color là màu sắc điểm đặc trưng (r, g, b).

kp_thickness là độ dày viền vòng tròn điểm đặc trưng.

kp_fill nếu là True, sẽ tô đặc các vòng tròn điểm đặc trưng.

line_color là màu sắc đường thẳng (r, g, b).

line_thickness là độ dày đường thẳng.

class NMS -- Soft-Non-Maximum Suppression

Đối tượng NMS thu thập danh sách các hộp giới hạn cùng với điểm số tương ứng, lọc các hộp chồng lấp có điểm thấp hơn qua Soft-NMS, và ánh xạ lại các hộp được phát hiện trong một cửa sổ con về tọa độ ảnh gốc.

class ml.utils.NMS(window_w: int, window_h: int, roi: tuple[int, int, int, int])

Tạo một đối tượng NMS.

window_wwindow_h là chiều rộng và chiều cao của tensor đầu vào / cửa sổ của mô hình (ML).

roi là vùng quan tâm (ROI) (x, y, w, h) của ảnh gốc mà mô hình (ML) đã chạy trên đó (thường được trả về bởi đối tượng Normalization()). Dùng để ánh xạ lại các hộp được phát hiện về không gian tọa độ ảnh gốc. roi[2]roi[3] phải >= 1.

add_bounding_box(xmin: float, ymin: float, xmax: float, ymax: float, score: float, label_index: int, keypoints: ndarray | None = None) None

Thêm một hộp giới hạn vào đối tượng NMS. Các hộp có score nằm ngoài [0.0, 1.0] hoặc có chiều rộng/chiều cao bằng không hoặc âm sau khi cắt xén sẽ bị loại bỏ.

xmin, ymin, xmax, ymax là tọa độ hộp giới hạn trong không gian điểm ảnh cửa sổ, bị cắt về [0, window_w] / [0, window_h].

score là điểm tin cậy của hộp giới hạn (0.0-1.0).

label_index là chỉ mục của nhãn lớp được liên kết với hộp giới hạn.

keypoints là một ndarray tùy chọn gồm các giá trị điểm đặc trưng (x, y, ...) được liên kết với hộp giới hạn này.

get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]

Thực hiện Soft-NMS trên tất cả các hộp đã thêm và trả về danh sách các danh sách theo lớp, được lập chỉ mục bằng label_index. Mỗi danh sách con chứa các tuple ((x, y, w, h), score) được ánh xạ trở lại tọa độ ảnh gốc. Nếu keypoints được cung cấp khi thêm, tuple sẽ được mở rộng với ndarray keypoints đã được ánh xạ lại.

Sau khi gọi phương thức này, hãy tạo một đối tượng NMS mới để xử lý một tập hợp hộp giới hạn mới.

threshold là điểm tối thiểu mà một hộp phải giữ được sau khi áp dụng Soft-NMS để không bị loại bỏ.

sigma kiểm soát hàm Gaussian dùng để phạt điểm của các hộp giới hạn chồng lấp. Giá trị sigma nhỏ hơn dẫn đến triệt tiêu mạnh hơn. sigma <= 0.0 vô hiệu hóa phạt Gaussian (điểm của các hộp chồng lấp không bị giảm).