三个部分
1模型载入
2图片经过怎样处理,预处理
3图片后处理,前向传播
colors = [[random.randint(0, 255) for _ in range(3)] for _ in names]
img = cv2.imread('1.jpg')
image, ratio, dwdh = letterbox(img, auto=False)
image = image.transpose((2, 0, 1))[::-1]
image = np.expand_dims(image, 0)
image = np.ascontiguousarray(image)
im = torch.from_numpy(image).float()
im /= 255
print(im.shape)
-
创建一个二维数组colors,其中包含了名字names的长度个列表,每个列表包含三个随机生成的0到255之间的整数。
-
使用OpenCV库的imread函数读取名为'1.jpg'的图像,并存储在变量img中。
-
调用名为letterbox的函数,对img进行处理,并将结果存储在变量image中。这个函数可能是用来调整图片大小以适应某个特定尺寸的工具函数。
-
将image的维度转置为(2, 0, 1),并沿纵轴进行翻转。
-
使用numpy的expand_dims函数在第0维上添加一个维度。
-
使用numpy的ascontiguousarray函数将数组转换为连续的内存布局。
-
使用torch.from_numpy函数将数组转换为torch的张量。
-
将im的数值范围从0到255归一化到0到1。
model = torch.jit.load(r'weight/yolov7_tiny.pt') result = model(im)[0] result = non_max_suppression(result, 0.5, 0.65)[0] result[:, :4] = scale_coords(im.shape[2:], result[:, :4], img.shape) for *xyxy, conf, cls in result: label = f'{names[int(cls)]} {conf:.2f}' plot_one_box(xyxy, img, label=label, color=colors[int(cls)], line_thickness=1) cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows()
-
使用torch.jit.load函数加载名为'yolov7_tiny.pt'的模型,并将其存储在变量model中。
-
使用加载的模型model对im进行推断,得到输出结果,存储在变量result中。
-
使用非极大值抑制(non_max_suppression)函数对result进行处理,去除低置信度的预测框,保留高置信度的预测框,并将结果存储在result中。
-
使用scale_coords函数将result中预测框的坐标缩放到原始图像的尺寸上。
-
对每个预测框执行以下操作: - 获取预测框的坐标(xyxy)、置信度(conf)和类别(cls)。 - 根据类别索引cls获取对应的类别名字,并结合置信度生成label。 - 使用plot_one_box函数在img上绘制包围预测框的矩形框,并显示label,设置框的颜色为对应类别的颜色,设置框的线宽为1。
-
使用cv2.imshow函数显示img图像。
-
使用cv2.waitKey函数等待用户按下任意键。
-
使用cv2.destroyAllWindows函数关闭所有打开的窗口。
视频链接YoloV7-pyqt5 2. 导出模型的讲解和避坑、如何把推理代码整合成一个class的讲解_哔哩哔哩_bilibili