本文主要是介绍PaddleDetection算法分析(4),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2021SC@SDUSC
接上篇
run yolo_video.pydef detect_img(yolo):while True:img = input('Input image filename:') #输入一张图片try:image = Image.open(img)except:print('Open Error! Try again!')continueelse:r_image = yolo.detect_image(image) #进入yolo.detect_image 进行检测r_image.show()yolo.close_session()detect_image()函数在yolo.py第102行def detect_image(self, image):start = timer()if self.model_image_size != (None, None): #判断图片是否存在assert self.model_image_size[0]%32 == 0, 'Multiples of 32 required' assert self.model_image_size[1]%32 == 0, 'Multiples of 32 required'#assert断言语句的语法格式 model_image_size[0][1]指图像的w和h,且必须是32的整数倍boxed_image = letterbox_image(image, tuple(reversed(self.model_image_size))) #letterbox_image()定义在utils.py的第20行。输入参数(图像 ,(w=416,h=416)),输出一张使用填充来调整图像的纵横比不变的新图。 else:new_image_size = (image.width - (image.width % 32),image.height - (image.height % 32))boxed_image = letterbox_image(image, new_image_size)image_data = np.array(boxed_image, dtype='float32')print(image_data.shape) #(416,416,3)image_data /= 255. #归一化image_data = np.expand_dims(image_data, 0) #批量添加一维 -> (1,416,416,3) 为了符合网络的输入格式 -> (bitch, w, h, c)out_boxes, out_scores, out_classes = self.sess.run([self.boxes, self.scores, self.classes], #目的为了求boxes,scores,classes,具体计算方式定义在generate()函数内。在yolo.py第61行feed_dict={ #喂参数self.yolo_model.input: image_data, #图像数据self.input_image_shape: [image.size[1], image.size[0]], #图像尺寸K.learning_phase(): 0 #学习模式 0:测试模型。 1:训练模式})print('Found {} boxes for {}'.format(len(out_boxes), 'img'))
继续算法分析
(3)在yolo_eval()函数中调用yolo_boxes_and_scores()得到目标框、目标框得分和类别。而在yolo_boxes_and_scores()函数中,先调用yolo_head()函数计算每一个网格的目标对象的中心点坐标box_xy和目标框的宽与高box_wh,以及目标框的置信度box_confidence和类别置信度box_class_probs;然后调用yolo_correct_boxes(),将box_xy, box_wh转换为输入图片上的真实坐标,输出boxes是框的左下、右上两个坐标(y_min, x_min, y_max, x_max):
(4)完整的流程图如下图所示:
OK, that's all!
关于yolov3代码分析全部结束了 下面将要进行人脸检测模型相关算法的分析
这篇关于PaddleDetection算法分析(4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!