def gen_ssd_globals(gen, node, qrec): qrec.set_scales(node) scores_q = qrec.in_qs[1] scores_scale, scores_norm = compute_mul_bias(scores_q.scale) cname_scales, file_name_scales = gen_constant(gen, node, node, SSD_SCALES) contents = np.array([qrec.scale_x_q.qbiases, qrec.scale_x_anc_q.qbiases, qrec.scale_y_q.qbiases, qrec.scale_y_anc_q.qbiases, qrec.scale_h_q.qbiases, qrec.scale_w_q.qbiases, qrec.scale_ao_q.qbiases, scores_scale], dtype=np.int8) scale_info = ConstantInfo(file_name_scales, QType(bits=8, q=0, signed=True), contents=contents) cname_norms, file_name_norms = gen_constant(gen, node, node, SSD_NORMS) contents = np.array([qrec.scale_x_q.qnorms, qrec.scale_x_anc_q.qnorms, qrec.scale_y_q.qnorms, qrec.scale_y_anc_q.qnorms, qrec.scale_h_q.qnorms, qrec.scale_w_q.qnorms, qrec.scale_ao_q.qnorms, scores_norm], dtype=np.int8) norms_info = ConstantInfo(file_name_norms, QType(bits=8, q=0, signed=True), contents=contents) score_threshold = scores_q.quantize(node.nms_score_threshold) cname_infos, file_name_infos = gen_constant(gen, node, node, INFOS) contents = np.array([round(node.nms_iou_threshold * 2**7), # Q7 score_threshold, # Q0 [0:255] node.max_detections, # Q0 [0:255] node.max_classes_per_detection, # Q0 [0:255] node.max_bb_before_nms >> 8, node.max_bb_before_nms], dtype=np.int8) # max_bb = Infos[4]<<8 + Infos[5] ssd_infos = ConstantInfo(file_name_infos, QType(bits=8, q=0, signed=True), contents=contents) gen.globals.append(GlobalArgInfo(qrec.scale_x_q.ctype, cname_scales, gen.opts['default_global_home_location'], gen.opts['default_global_exec_location'], const_info=scale_info)) gen.globals.append(GlobalArgInfo(qrec.scale_x_q.shift_ctype, cname_norms, gen.opts['default_global_home_location'], gen.opts['default_global_exec_location'], const_info=norms_info)) gen.globals.append(GlobalArgInfo('uint8', cname_infos, gen.opts['default_global_home_location'], gen.opts['default_global_exec_location'], const_info=ssd_infos))
def get_quantized_scale(self): scales, norms = compute_mul_bias(self.scale) return scales.astype(np.uint8), norms, self.zero_point