项目工作日志(六)
引言
在前一部分的工作中,我们完成了数据预处理和巡航模型的定义。接下来,我们将集中在模型的训练与评估上,确保我们的巡航系统能够准确有效地识别道路和障碍物。本部分记录了模型训练和评估的详细步骤和代码示例。
模型训练
模型训练是整个项目的核心步骤,通过训练,我们可以得到一个能够识别道路和障碍物的巡航模型。以下是训练模型的步骤:
- 导入所需库
首先,我们需要导入PaddlePaddle及相关库:
# 导入paddle相关库
import paddle
from paddle.io import DataLoader
from paddle.vision.transforms import Compose, Resize, Normalize, ToTensor
# 导入自定义的数据集类
from my_dataset import MyDataSet
- 配置路径和获取函数
配置训练和评估的路径,定义获取数据路径和模型路径的函数:
import cv2, os, glob
# 配置相关和获取函数
train_cfg = {
"train_paths": [["./data/image_set","data.json"], ],
"eval_paths": [["./data/image_set","data.json"], ],
"num_workers": 0,
"infer_dir": "./model/cnn23/inference",
"model_save_dir": "./model/cnn23/dymic",
"model_params_name": "cnn_lane.pdparams",
"model_opt_name": "cnn_lane.pdopt",
"model_checkpoint_name": "cnn_lane.pkl",
"train_batch_size": 256,
"eval_batch_size": 256,
"lr": 0.001,
"epochs": 100,
"input_size": [128, 128],
}
def get_data_paths():
# 数据集路径
train_paths = train_cfg["train_paths"]
eval_paths = train_cfg["eval_paths"]
return train_paths, eval_paths
def get_last_model_name():
import glob
model_save_dir = train_cfg["model_save_dir"]
models_list = glob.glob(model_save_dir + "/*")
models_list.sort()
if len(models_list) == 0:
raise RuntimeError("no model to infer, at " + model_save_dir)
last_name = os.path.split(models_list[-1])[-1]
return last_name
def get_model_path(file_name):
# 模型保存路径
model_save_dir = train_cfg["model_save_dir"]
model_params_path = os.path.join(model_save_dir, file_name, train_cfg["model_params_name"])
model_opt_path = os.path.join(model_save_dir, file_name, train_cfg["model_opt_name"])
checkpoint_path = os.path.join(model_save_dir, file_name, train_cfg["model_checkpoint_name"])
return model_params_path, model_opt_path, checkpoint_path
def get_infer_path(file_name):
# 模型保存路径
infer_save_dir = train_cfg["infer_dir"]
infer_save_path = os.path.join(infer_save_dir, file_name, "cnn_lane")
return infer_save_path
3.模型定义
在数据预处理完成后,我们需要定义巡航模型。以下是模型定义的示例代码:
# 导入paddle相关库
import paddle
from paddle import nn
# 定义巡航模型
class CnnModel(nn.Layer):
# 定义模型
def __init__(self):
super(CnnModel, self).__init__()
self.features = nn.Sequential(
nn.Conv2D(3, 32, 5, stride=2),
nn.ReLU(),
nn.MaxPool2D(2, 2),
nn.Conv2D(32, 64, 5, stride=2),
nn.ReLU(),
nn.MaxPool2D(2, 2),
nn.Conv2D(64, 128, 5, stride=2),
nn.ReLU(),
nn.MaxPool2D(2, 2)
)
self.fc = nn.Sequential(
nn.Linear(128 * 6 * 6, 256),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(256, 128),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(128, 10)
)
def forward(self, x):
x = self.features(x)
x = x.flatten(start_axis=1)
x = self.fc(x)
return x
4.总结
通过以上步骤,我们完成了数据预处理和巡航模型的定义。接下来,我们将进行模型的训练和评估,以确保模型的有效性和准确性。
5.下一步
在下一篇博客中,我们将详细记录模型的训练过程和评估方法,确保模型在训练数据和验证数据上都能够取得良好的表现。敬请期待更多详细内容。