ml.utils --- ML 工具¶
ml.utils 模块包含用于机器学习的实用类和函数。
函数¶
- ml.utils.threshold(scores: ndarray, threshold: float, scale: float, find_max: bool = False, find_max_axis: int = 1) ndarray¶
用量化后的
threshold对scores(一个由 int8、uint8、int16 或 uint16 组成的量化ndarray)进行阈值处理,并返回一个包含所有通过阈值的索引的ndarray。会测试
scale以判断反量化后的值为正还是为负。当scale > 0时返回scores > threshold的索引;否则返回scores < threshold的索引。find_max如果为 True,会在内部将scores替换为沿find_max_axis取最大值(或最小值,取决于scale)的ndarray。find_max_axis是当find_max为 True 时,沿其计算最大值/最小值归约的轴。
- ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
将所传入的
ndarray除以缩放系数并加上模型的零点进行转换。当index处的模型输出 dtype 为 float 时,返回未改变的value。model是其输出量化参数被使用的模型。value是要量化的ndarray。index用于选择针对model的哪个张量输出进行量化。
- ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
将所传入的
ndarray减去零点再乘以模型的缩放系数进行转换。当index处的模型输出 dtype 为 float 时,返回未改变的value。model是其输出量化参数被使用的模型。value是要反量化的ndarray。index用于选择针对model的哪个张量输出进行反量化。
- 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¶
在
image上绘制带文本标签的边界框(或中心点标记)。boxes是一个(x, y, w, h)元组的列表。labels是一个标签字符串的列表,每个边界框对应一个。colors是一个(r, g, b)元组的列表,每个边界框对应一个。scores如果不为None,则是一个每个边界框的置信度分数列表。提供时,每个绘制的标签会附加上以" %.2f"格式化的分数。format控制如何解释边界框坐标:"pascal_voc"—— 范围在0.0到1.0之间的归一化(xmin, ymin, xmax, ymax)。"point"—— 绝对像素(x, y, w, h);会在边界框中心绘制一个实心圆标记而非矩形(对中心点检测器很有用)。任何其他值 —— 绝对像素
(x, y, w, h);绘制为矩形。
font_width是标签中每个字符的宽度(以像素为单位)。font_height是标签背景的高度(以像素为单位)。text_color是用于标签文本的(r, g, b)颜色。
- 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¶
在
image上绘制一个由关键点(x, y, ...)值组成的ndarray。radius是关键点圆的半径。当radius == 0时,关键点会被绘制为单个像素。color是关键点的(r, g, b)颜色。thickness是圆的轮廓粗细。fill如果为 True,则填充关键点圆。
- 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¶
在
image上绘制一个由关键点(x, y, ...)值组成的ndarray,然后用线段将它们连接起来。lines是一个(kp0_idx, kp1_idx)元组的列表,指定要连接哪些关键点对。kp_radius是关键点圆的半径(传递给draw_keypoints)。kp_color是关键点的(r, g, b)颜色。kp_thickness是关键点圆的轮廓粗细。kp_fill如果为 True,则填充关键点圆。line_color是线条的(r, g, b)颜色。line_thickness是线条的粗细。
class NMS —— 软非极大值抑制¶
NMS 对象收集一系列带有关联分数的边界框,通过 Soft-NMS 过滤掉分数较低的重叠边界框,并将在子窗口中检测到的边界框重新映射回原始图像坐标。
- class ml.utils.NMS(window_w: int, window_h: int, roi: tuple[int, int, int, int])¶
创建一个
NMS对象。window_w和window_h是模型输入张量/窗口的宽度和高度。roi是运行模型所针对的原始图像的(x, y, w, h)感兴趣区域(ROI)(通常由Normalization()对象返回)。用于将检测到的边界框重新映射回原始图像坐标空间。roi[2]和roi[3]必须 >= 1。- add_bounding_box(xmin: float, ymin: float, xmax: float, ymax: float, score: float, label_index: int, keypoints: ndarray | None = None) None¶
向
NMS对象添加一个边界框。score超出[0.0, 1.0]范围,或裁剪后宽度或高度为零/负值的边界框会被丢弃。xmin、ymin、xmax、ymax是窗口像素空间中的边界框坐标,被裁剪到[0, window_w]/[0, window_h]。score是边界框的置信度分数(0.0-1.0)。label_index是与该边界框关联的类别标签的索引。keypoints是一个可选的、与该边界框关联的关键点(x, y, ...)值的ndarray。
- get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]¶
对所有已添加的边界框执行 Soft-NMS,并返回一个按
label_index索引的、每个类别一个列表的列表。每个内层列表包含映射回原始图像坐标的((x, y, w, h), score)元组。如果在添加时提供了keypoints,则元组会扩展为包含重新映射后的keypointsndarray。调用此方法后,请创建一个新的
NMS对象来处理一组新的边界框。threshold是边界框在 Soft-NMS 抑制后必须保留的最低分数,方能被保留。sigma控制用于惩罚重叠边界框分数的高斯函数。sigma越小,抑制越激进。sigma <= 0.0会禁用高斯惩罚(重叠边界框的分数不会衰减)。