ml.utils --- ML Utils¶
โมดูล ml.utils มีคลาสและฟังก์ชันยูทิลิตีสำหรับการเรียนรู้ของเครื่อง
ฟังก์ชัน¶
- ml.utils.threshold(scores: ndarray, threshold: float, scale: float, find_max: bool = False, find_max_axis: int = 1) ndarray¶
ทำการ threshold
scores(ndarrayแบบ quantized ของ int8, uint8, int16 หรือ uint16) ด้วยthresholdแบบ quantized และคืนค่าndarrayของดัชนีทั้งหมดที่ผ่านค่าขีดแบ่งscaleจะถูกทดสอบเพื่อพิจารณาว่าค่าที่ dequantize แล้วเป็นบวกหรือลบ เมื่อscale > 0จะคืนดัชนีที่scores > threshold; มิฉะนั้นจะคืนดัชนีที่scores < thresholdfind_maxถ้าเป็น True จะแทนที่scoresภายในด้วยndarrayของค่าสูงสุด (หรือต่ำสุด ขึ้นอยู่กับscale) ตามfind_max_axisfind_max_axisคือแกนที่ใช้คำนวณการลด max/min เมื่อfind_maxเป็น True
- ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
แปลง
ndarrayที่ส่งเข้ามาโดยการหารด้วย scale และบวก zero point ของโมเดล คืนค่าvalueไม่เปลี่ยนแปลงเมื่อ dtype ของ output โมเดลที่indexเป็น floatmodelคือโมเดลที่ใช้พารามิเตอร์ quantization ของ outputvalueคือndarrayที่ต้องการ quantizeindexเลือก tensor output ใดของmodelที่จะ quantize ด้วย
- ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
แปลง
ndarrayที่ส่งเข้ามาโดยการลบ zero point แล้วคูณด้วย scale ของโมเดล คืนค่าvalueไม่เปลี่ยนแปลงเมื่อ dtype ของ output โมเดลที่indexเป็น floatmodelคือโมเดลที่ใช้พารามิเตอร์ quantization ของ outputvalueคือndarrayที่ต้องการ dequantizeindexเลือก tensor output ใดของmodelที่จะ dequantize ด้วย
- 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¶
วาดกรอบล้อมรอบ (หรือเครื่องหมายจุดกึ่งกลาง) พร้อมป้ายกำกับข้อความลงบน
imageboxesคือรายการของ tuple(x, y, w, h)labelsคือรายการของสตริงป้ายกำกับ หนึ่งรายการต่อกล่องcolorsคือรายการของ tuple(r, g, b)หนึ่งรายการต่อกล่องscoresถ้าไม่ใช่Noneคือรายการคะแนนความเชื่อมั่นต่อกล่อง เมื่อระบุ ป้ายกำกับที่แสดงผลแต่ละอันจะมีคะแนนต่อท้ายในรูปแบบ" %.2f"formatควบคุมวิธีตีความพิกัดกล่อง:"pascal_voc"--(xmin, ymin, xmax, ymax)แบบ normalized ในช่วง0.0ถึง1.0"point"-- พิกเซลสัมบูรณ์(x, y, w, h); วาดเครื่องหมายวงกลมแบบเต็มที่จุดกึ่งกลางกล่องแทนสี่เหลี่ยม (มีประโยชน์สำหรับตัวตรวจจับแบบ centerpoint)ค่าอื่น ๆ -- พิกเซลสัมบูรณ์
(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¶
วาด
ndarrayของค่าจุดสำคัญ(x, y, ...)ลงบนimageradiusคือรัศมีวงกลมจุดสำคัญ เมื่อ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¶
วาด
ndarrayของค่าจุดสำคัญ(x, y, ...)ลงบนimageแล้วเชื่อมต่อด้วยเส้นตรงlinesคือรายการของ tuple(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 -- Soft-Non-Maximum Suppression¶
ออบเจ็กต์ NMS รวบรวมรายการกรอบล้อมรอบพร้อมคะแนนที่เกี่ยวข้อง กรองกล่องที่ซ้อนทับกันซึ่งมีคะแนนต่ำกว่าด้วย Soft-NMS และแปลงพิกัดกล่องที่ตรวจพบในหน้าต่างย่อยกลับไปยังพิกัดภาพต้นฉบับ
- class ml.utils.NMS(window_w: int, window_h: int, roi: tuple[int, int, int, int])¶
สร้างออบเจ็กต์
NMSwindow_wและwindow_hคือความกว้างและความสูงของ tensor input ของโมเดล / หน้าต่างroiคือบริเวณที่สนใจ (ROI)(x, y, w, h)ของภาพต้นฉบับที่โมเดลถูกรันอยู่ (โดยทั่วไปส่งคืนโดยออบเจ็กต์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คือndarrayเสริมของค่าจุดสำคัญ(x, y, ...)ที่เชื่อมโยงกับกรอบล้อมรอบนี้
- get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]¶
ดำเนิน Soft-NMS กับกล่องที่เพิ่มทั้งหมดและคืนรายการของรายการต่อคลาส โดยจัดดัชนีตาม
label_indexรายการภายในแต่ละรายการมี tuple ของ((x, y, w, h), score)ที่แปลงกลับเป็นพิกัดภาพต้นฉบับแล้ว หากมีการระบุkeypointsไว้ตอนเพิ่ม tuple จะถูกขยายด้วยndarraykeypointsที่แปลงพิกัดแล้วหลังจากเรียกวิธีนี้ ให้สร้างออบเจ็กต์
NMSใหม่เพื่อประมวลผลชุดกรอบล้อมรอบใหม่thresholdคือคะแนนขั้นต่ำที่กล่องต้องคงไว้หลังการ Soft-NMS suppression เพื่อให้ถูกเก็บไว้sigmaควบคุม Gaussian ที่ใช้ลงโทษคะแนนของกรอบล้อมรอบที่ซ้อนทับกันsigmaที่เล็กกว่าจะส่งผลให้การ suppression รุนแรงมากขึ้นsigma <= 0.0จะปิดใช้งาน Gaussian penalty (คะแนนของกล่องที่ซ้อนทับกันจะไม่ถูกลดทอน)