【项目实训】项目工作日志(七)

项目工作日志(七):模型部署与预测

引言

在前一部分的工作中,我们完成了模型训练并进行了评估。接下来,我们将集中在模型的部署与预测上,确保我们的巡航系统在实际应用中能够高效运行。本部分记录了模型部署与预测的详细步骤和代码示例。

模型部署

为了确保模型在实际环境中的正确运行,我们需要将模型文件和预测代码打包成符合实际应用要求的结构,并编写相应的预测脚本。

  1. 目录结构
    根据实际应用要求,我们需要按照以下目录结构组织模型文件和代码:
submission
├── model
│ ├── cnn_lane.pdparams
├── env
│ ├── requirements.txt
├── predict.py
└── test
├── test_image1.jpg
├── ...
  1. 依赖库
    创建 requirements.txt 文件,列出预测代码所需的依赖库,示例如下:
paddlepaddle==2.3.0
opencv-python
预测代码

编写预测脚本 predict.py,用于加载模型和数据,并生成预测结果。以下是一个示例预测脚本:

# predict.py 示例代码
import os
import cv2
import paddle
import numpy as np
from paddle.vision.transforms import Compose, Resize, Normalize, ToTensor

# 定义模型
class CnnModel(paddle.nn.Layer):
    def __init__(self):
        super(CnnModel, self).__init__()
        self.features = paddle.nn.Sequential(
            paddle.nn.Conv2D(3, 32, 5, stride=2),
            paddle.nn.ReLU(),
            paddle.nn.MaxPool2D(2, 2),
            paddle.nn.Conv2D(32, 64, 5, stride=2),
            paddle.nn.ReLU(),
            paddle.nn.MaxPool2D(2, 2),
            paddle.nn.Conv2D(64, 128, 5, stride=2),
            paddle.nn.ReLU(),
            paddle.nn.MaxPool2D(2, 2)
        )
        self.fc = paddle.nn.Sequential(
            paddle.nn.Linear(128 * 6 * 6, 256),
            paddle.nn.ReLU(),
            paddle.nn.Dropout(0.5),
            paddle.nn.Linear(256, 128),
            paddle.nn.ReLU(),
            paddle.nn.Dropout(0.5),
            paddle.nn.Linear(128, 10)
        )

    def forward(self, x):
        x = self.features(x)
        x = x.flatten(start_axis=1)
        x = self.fc(x)
        return x

def load_model(model_path):
    model = CnnModel()
    model.set_state_dict(paddle.load(model_path))
    model.eval()
    return model

def predict(model, img_path):
    transform = Compose([Resize((128, 128)), Normalize(mean=[127.5], std=[127.5]), ToTensor()])
    img = cv2.imread(img_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = transform(img)
    img = np.expand_dims(img, axis=0)
    img = paddle.to_tensor(img, dtype='float32')
    output = model(img)
    return paddle.argmax(output, axis=1).numpy()[0]

def main():
    model_path = 'model/cnn_lane.pdparams'
    test_dir = 'test'
    result_file = 'submission/result.txt'

    model = load_model(model_path)

    with open(result_file, 'w') as f:
        for img_name in os.listdir(test_dir):
            img_path = os.path.join(test_dir, img_name)
            result = predict(model, img_path)
            f.write(f'{img_path}\t{result}\n')

if __name__ == '__main__':
    main()

结果检测
我们可以使用智能车的实际场景演示完成对结果的的检测和分析。

总结
这一部分的工作日志详细记录了模型部署与预测的过程。通过组织目录结构、编写预测脚本并生成预测结果,我们确保模型能够在实际环境中高效运行并生成准确的预测结果。

下一步
在整个项目的最后,我们将总结项目的各个阶段,从数据预处理、模型定义、模型训练与评估,到模型部署与预测,确保整个巡航系统的高效性和准确性。敬请期待更多详细内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈yi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值