如何使用ssd训练自己的数据(windows下)

本文介绍了在Windows下利用Caffe训练SSD模型的步骤,包括数据准备、文件格式要求,以及训练文件的修改。关键步骤包括将数据转换为PASCAL VOC格式,生成lmdb文件,调整训练配置文件ssd_pascal.py,并指定训练和测试数据路径。

可以参照前一篇文章配置windows下的ssd,本文假设ssd已经通过windows下的编译。

1.准备数据

需要根据PASCAL VOC格式 准备对应的数据,推荐一个好用的贴标签软件(https://github.com/tzutalin/labelImg)

拿VOC2012为例,VOC2012目录下需要Annotations、ImageSets、JPEGImages文件夹,Annotations存储对应的标签xml信息,JPEGImages存储图片数据,ImageSets 主要使用Main文件夹下的数据,Main文件夹保存了对应的训练、验证数据集的txt文本

然后使用caffe-ssd-microsoft\data\VOC0712目录下create_data.bat来生成所需要的lmdb文件(create_data.bat根据实际情况修改内容)

caffe-ssd-microsoft\data\VOC0712目录下get_image_size.bat用于生成test.txt中对应图片的大小映射,生成的结果写入test_name_size.txt

对于后面的训练需要准备以下文件:

test.txt  用于测试的文件集定义

labelmap_voc.prototxt   标签定义文件

test_name_size.txt 测试图片大小定义文件(可通过get_image_size.bat生成)

trainval.txt 训练验证集文件定义(数据排列为乱序,可根据实际情况设定)

train.prototxt  训练网络定义文件
test.prototxt    测试网络定义文件
deploy.prototxt    部署定义文件
solver.prototxt    训练配置文件

2.修改训练文件

caffe-ssd-microsoft\examples\ssd下的ssd_pascal.bat是用来训练数据用的程序(它是调用ssd_pascal.py运行的,ssd_pascal.py用来配置整个的训练环境),因为windows下的对 路径和linux的不同,所以对应的windows下需要找到ssd_pascal.py对应的内容进行修改:

train_data = "{}/data/VOC0712/trainval_lmdb".format(caffe_root)
test_data = "{}/data/VOC0712/test_lmdb".format(caffe_root)
save_dir = "{}/models/VGGNet/VOC0712/{}".format(caffe_root,job_name)
snapshot_dir = "{}/models/VGGNet/VOC0712/{}".format(caffe_root,job_name)
job_dir = "{}/jobs/VGGNet/VOC0712/{}".format(caffe_root,job_name)
output_result_dir = "{}/data/VOC0712/results/{}/Main".format(caffe_root,job_name)
name_size_file = "{}/data/VOC0712/test_name_size.txt".format(caffe_root)
pretrain_model = "{}/models/VGGNet/VGG_ILSVRC_16_layers_fc_reduced.caffemodel".format(caffe_root)
label_map_file = "{}/data/VOC0712/labelmap_voc.prototxt".format(caffe_root)
f.write('{}\Build\{}\Debug\caffe train ^\n'.format(caffe_root,'x64'))

### 在 Windows 系统上使用 SSD 模型训练自定义数据集 要在 Windows 系统上使用 SSD(Single Shot MultiBox Detector)模型训练自定义数据集,可以按照以下方式构建环境并实现目标。 #### 1. 构建开发环境 为了在 Windows 上运行深度学习任务,建议安装 NVIDIA CUDA 和 cuDNN 支持 GPU 加速。以下是具体步骤: - **安装 Python**:推荐版本为 Python 3.8 或更高版本[^2]。 - **安装 PyTorch/TensorFlow/Caffe**:SSD 可以基于多种框架实现,最常见的是 TensorFlow 和 Caffe。如果选择 TensorFlow,则可以通过 `pip install tensorflow` 来安装最新稳定版本[^4]。 - **配置 GPU 支持**:下载并安装与显卡兼容的 CUDA 工具包以及对应的 cuDNN 库[^2]。 #### 2. 数据预处理 对于自定义数据集,通常需要将其转换成适合 SSD 输入的形式。常见的做法如下: - 使用 Pascal VOC 或 COCO 格式的标注文件作为输入标准[^1]。 - 编写脚本将原始图片路径及其对应标签映射到上述格式中去。例如,假设每张图像都有一个 XML 文件描述其中的对象位置和类别名称,则可通过解析这些 XML 文件生成 TFRecord 文件供后续读取[^4]。 ```python import xml.etree.ElementTree as ET from pathlib import Path def parse_voc_annotation(ann_dir, img_dir): annotations = [] for ann_file in Path(ann_dir).glob('*.xml'): tree = ET.parse(str(ann_file)) root = tree.getroot() image_path = str(Path(img_dir) / f"{root.find('filename').text}") objects = [] for obj in root.findall('object'): name = obj.find('name').text bndbox = obj.find('bndbox') xmin = int(bndbox.find('xmin').text) ymin = int(bndbox.find('ymin').text) xmax = int(bndbox.find('xmax').text) ymax = int(bndbox.find('ymax').text) objects.append({ 'class': name, 'bbox': [xmin, ymin, xmax, ymax], }) annotations.append((image_path, objects)) return annotations ``` #### 3. 修改网络架构适配新数据集 由于 SSD 默认支持特定数量的目标分类数,因此当切换至新的领域时需调整最后一层输出维度大小匹配实际需求类别的总数加背景项一起考虑进去[^3]。 - 找到负责预测部分的相关代码片段重新指定 num_classes 参数值等于用户自有标签集合长度再额外增加一项代表未知区域即 background class[^3]。 ```python num_classes = len(custom_labels_set) + 1 # Add one more for the background class. ssd_model = build_ssd(phase='train', size=300, num_classes=num_classes) ``` #### 4. 调整超参数设置 依据项目具体情况微调诸如 learning rate、batch size 等关键因素有助于提升最终效果表现水平[^2]。 - 初始学习率可以从较低数值起步逐步探索最佳范围区间[^2]。 - Batch Size 大小取决于可用硬件资源状况而定,在单机多GPU环境下尝试更大批次规模往往带来性能增益[^4]。 #### 5. 开始训练过程 最后启动整个流程之前记得保存好所有修改后的源码副本以便日后维护升级之便。 执行命令类似于下面这样即可正式进入迭代优化环节直至满足收敛条件为止: ```bash python train.py --dataset_type=voc \ --datasets=path/to/custom/dataset \ --validation_datasets=path/to/validation/set \ --net=vgg16-ssd \ --freeze_base_net=True \ --lr=0.001 \ --momentum=0.9 \ --weight_decay=0.0005 \ --scheduler=cosine \ --t_max=100 \ --epochs=120 ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值