精简版infer.py改写问题
Created by: wang-kangkang
为了便于我后边的改写和模块级优化,我将tools/infer.py进行了精简。代码主体已经完成,但有某个未知的小细节没处理对,导致结果不正确。希望能帮忙看下我哪里没写对:
from ppdet.modeling.backbones.mobilenet import MobileNet
from ppdet.modeling.anchor_heads.yolo_head import YOLOv3Head
from ppdet.modeling.architectures.yolo import YOLOv3
import paddle.fluid as fluid
import numpy as np
import cv2
if __name__=="__main__":
#准备输入数据
image = cv2.imread('demo/orange_71.jpg')
image = cv2.resize(image, dsize=(512, 512))
image = image.transpose((2,0,1))
image = image[np.newaxis, :, :, :].astype(np.float32)
image_size = np.array([512, 512])
image_size = image_size[np.newaxis, :]
#定义设备和program
place = fluid.core.CPUPlace()
exe = fluid.Executor(place)
startup_program = fluid.Program()
inference_program = fluid.Program()
#搭建网络结构
backbone = MobileNet()
head = YOLOv3Head(num_classes=3)
model = YOLOv3(backbone = backbone, yolo_head=head)
with fluid.program_guard(inference_program, startup_program):
data = fluid.layers.data(name = 'image', shape=[-1, 3, 512, 512], dtype='float32')
im_size = fluid.layers.data(name = 'im_size', shape=[-1, 2], dtype='float32')
test_fetches = model.test({'image':data, 'im_size':im_size})
inference_program = inference_program.clone(for_test=True)
#加载预训练模型
fluid.io.load_persistables(executor=exe, dirname='C:\\Users\\Administrator\\.cache\\paddle\\weights\\yolov3_mobilenet_v1_fruit', main_program = inference_program)
#前项预测并输出结果
output = exe.run(inference_program, fetch_list = [test_fetches['bbox']], feed={'image': image, 'im_size':image_size}, return_numpy=False)
output = np.array(output[0])
print(output)
#cv2.rectangle(...)
#cv2.putText(...)
#cv2.imwrite(...)