【实战指南】从零构建YOLACT自定义数据集:标注、转换与训练全流程
1. 环境准备与工具安装第一次接触YOLACT实例分割模型时最让人头疼的就是环境配置。我清楚地记得去年做智能货架项目时光是配环境就折腾了两天。为了让各位少走弯路我把踩过的坑都总结在这里。首先需要安装的是Python 3.7环境建议使用Anaconda管理。实测发现PyTorch 1.7和CUDA 11.0的组合最稳定。安装命令很简单conda create -n yolact python3.7 conda activate yolact conda install pytorch torchvision cudatoolkit11.0 -c pytorch接下来安装标注工具Labelme这个工具对多边形标注特别友好pip install labelme最后克隆YOLACT官方代码库。这里有个小技巧建议使用--depth1参数只克隆最新版本能节省不少时间git clone --depth1 https://github.com/dbolya/yolact.git cd yolact pip install -r requirements.txt注意如果遇到OpenCV版本冲突可以尝试指定版本pip install opencv-python4.5.3.56。我在三台不同机器上都遇到过这个问题。2. 数据标注实战技巧标注数据是整个过程最耗时的环节。去年标注2000张货架图片时我总结出几个提升效率的方法第一是建立规范的标注流程。建议先创建classes.txt定义所有类别比如商品外包装 价签 促销标志然后用Labelme批量标注时指定类别文件labelme --labels classes.txt --nodata第二是多边形标注技巧。遇到复杂形状时先用矩形框大致圈定目标按W键进入编辑模式用Ctrl鼠标左键添加关键点按Enter完成标注实测发现每个目标保持15-20个关键点既能保证精度又不至于太耗时。标注完成后会生成大量.json文件建议按以下结构组织dataset/ ├── images/ │ ├── 001.jpg │ └── 002.jpg └── labels/ ├── 001.json └── 002.json3. 格式转换核心操作将Labelme格式转为COCO格式是最大的技术难点。网上很多转换脚本都有bug我修改后的稳定版本主要解决三个问题类别ID映射错误内存泄漏中文路径支持关键修改点在classname_to_id字典和路径处理部分# 修改1完整类别映射 classname_to_id { 商品外包装: 1, 价签: 2, 促销标志: 3 } # 修改2安全路径处理 def read_jsonfile(self, path): with open(path, r, encodingutf-8) as f: return json.load(f)转换脚本执行时建议分步验证# 第一步检查JSON文件完整性 python -m json.tool dataset/labels/001.json # 第二步试转换单文件 python labelme2coco.py --input dataset/labels/001.json # 第三步批量转换 python labelme2coco.py --input dataset/labels/ --output coco/转换完成后用COCO API验证数据集是否有效from pycocotools.coco import COCO coco COCO(coco/annotations/instances_train2017.json) print(coco.dataset[categories])4. 模型训练参数调优配置文件调整是影响模型性能的关键。以yolact_base_config.py为例必须修改的核心参数包括# 类别数实际类别1背景 dataset coco_base_config.copy({ name: My Dataset, train_images: coco/images/train2017, train_info: coco/annotations/instances_train2017.json, valid_images: coco/images/val2017, valid_info: coco/annotations/instances_val2017.json, has_gt: True, class_names: (商品外包装, 价签, 促销标志) }) # 训练参数RTX 3060实测配置 train dataset.copy({ lr: 1e-3, max_iter: 80000, batch_size: 8, # 根据显存调整 num_workers: 2 # 建议设为GPU数量的2倍 })启动训练时推荐使用--resume参数实现断点续训python train.py --configyolact_base_config \ --batch_size8 \ --save_folderweights/ \ --save_interval2000训练过程监控有个实用技巧用watch命令实时查看GPU利用率watch -n 1 nvidia-smi5. 常见问题解决方案5.1 内存不足问题当看到CUDA out of memory错误时按这个顺序排查降低batch_size从8→4→2关闭数据预加载num_workers0添加--keep_latest参数限制保存的检查点数量5.2 标注与训练不一致遇到预测框偏移时检查三个地方标注文件中的imageData字段是否完整COCO JSON中的bbox格式是否为[x,y,width,height]类别ID是否从1开始0保留给背景5.3 验证集指标异常如果验证mAP始终为0检查valid_info路径是否正确确认验证集标注质量调整validation_epoch参数建议设为5最后分享一个压箱底的调试技巧在data/config.py中添加以下代码可以实时查看数据加载情况def _print_dataset_stats(dataset): print(f\nDataset: {dataset.name}) print(fTotal images: {len(dataset.ids)}) print(fClass distribution:) for i, name in enumerate(dataset.class_names): print(f {name}: {np.sum(dataset.gt_labels i)})
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2619022.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!