项目工作日志(七):模型部署与预测
引言
在前一部分的工作中,我们完成了模型训练并进行了评估。接下来,我们将集中在模型的部署与预测上,确保我们的巡航系统在实际应用中能够高效运行。本部分记录了模型部署与预测的详细步骤和代码示例。
模型部署
为了确保模型在实际环境中的正确运行,我们需要将模型文件和预测代码打包成符合实际应用要求的结构,并编写相应的预测脚本。
- 目录结构
根据实际应用要求,我们需要按照以下目录结构组织模型文件和代码:
submission
├── model
│ ├── cnn_lane.pdparams
├── env
│ ├── requirements.txt
├── predict.py
└── test
├── test_image1.jpg
├── ...
- 依赖库
创建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()
结果检测
我们可以使用智能车的实际场景演示完成对结果的的检测和分析。
总结
这一部分的工作日志详细记录了模型部署与预测的过程。通过组织目录结构、编写预测脚本并生成预测结果,我们确保模型能够在实际环境中高效运行并生成准确的预测结果。
下一步
在整个项目的最后,我们将总结项目的各个阶段,从数据预处理、模型定义、模型训练与评估,到模型部署与预测,确保整个巡航系统的高效性和准确性。敬请期待更多详细内容。