无法在Visual Studio中使用本地目标检测场景,如何用VOTT导出文件训练ML.NET模型?
基于VOTT标注文件训练ML.NET目标检测模型的实现方法
前置适配要求
VOTT导出标注时优先选择COCO格式或Pascal VOC格式,这两类格式ML.NET原生支持直接加载,无需额外做标注数据的格式转换。如果已经导出为CSV格式,需要自行完成标注字段到ML.NET目标检测要求的图像路径、边界框、分类标签三个核心字段的映射。
具体实现步骤
- 安装依赖NuGet包:
Microsoft.ML、Microsoft.ML.ImageAnalytics、Microsoft.ML.Vision,版本选择最新稳定版即可 - 加载标注与图像数据,以COCO格式为例:
using Microsoft.ML; using Microsoft.ML.Vision; // 初始化ML上下文 var mlContext = new MLContext(seed: 1); // 配置本地路径 string imageRootDir = @"你的本地图像存储目录路径"; string cocoAnnotationPath = @"VOTT导出的coco.json文件路径"; // 直接加载COCO格式标注 var rawDataset = mlContext.Data.LoadFromCoco(cocoAnnotationPath, imageRootDir);
- 拆分训练集与测试集
// 按8:2比例拆分训练、测试集 var trainTestData = mlContext.Data.TrainTestSplit(rawDataset, testFraction: 0.2);
- 构建训练管道
var trainingPipeline = mlContext.Transforms.ResizeImages( outputColumnName: "ResizedImage", imageWidth: 640, imageHeight: 640, inputColumnName: "Image") .Append(mlContext.Transforms.ExtractPixels( outputColumnName: "Pixels", inputColumnName: "ResizedImage")) .Append(mlContext.MulticlassClassification.Trainers.YoloV5( labelColumnName: "Label", boundingBoxColumnName: "Box", imageColumnName: "Pixels")); // 启动训练 var trainedModel = trainingPipeline.Fit(trainTestData.TrainSet);
常见问题处理
- 标注与图像路径不匹配:VOTT导出时勾选「复制关联图像到导出目录」选项,保证标注文件内记录的图像相对路径和本地实际存储路径一致
- 输入维度报错:ResizeImages步骤的宽高参数要和训练器要求的输入尺寸匹配,YOLOv5默认支持640*640尺寸输入
- 使用Pascal VOC格式标注:把加载方法替换为
mlContext.Data.LoadFromPascalVoc(标注文件夹路径, 图像根目录)即可,后续训练步骤完全一致
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

