VOC2012实战---模型搭建
发布网友
发布时间:2024-10-16 06:18
我来回答
共1个回答
热心网友
时间:2024-10-16 19:06
本文项目使用VOC2012数据集以及SBD增广数据集,构建的数据集包含10582张训练集图像与1449张验证集图像。考虑到ResNet50和ResNet101的预训练权重易于获取,性能更优,因此选择这两者作为Deeplabv3+模型的主干网络。Deeplabv3+于2018年提出,曾在PASCAL VOC2012和Cityscapes数据集上取得领先成果,至今依然表现出色。该网络在公开数据集上的性能处于前列。具体模型搭建细节如下:
1. **模型结构**:图片输入后,通过DCNN(本项目使用ResNet50或ResNet101)提取特征,产出分辨率为1/16和1/4的特征图。这些特征图分别经过调整通道数的1*1卷积层后,通过堆叠(concat)操作合并,再通过3*3卷积层调整通道数至实际类别数量,最终进行四倍上采样,得到预测特征图。
2. **代码实现**:以deeplabv3PlusResNet50为例,项目代码中直接从network文件下的modeling.py引入此函数,指定参数构造模型。具体包括:设置类比数(num_classes)、输出到aspp模块的特征图stride(output_stride,本项目设为16)、启用预训练backbone权重(pretrained_backbone=True)。_load_model函数依据不同backbone自动生成模型,支持mobilenetv2和ResNet系列,使用其他网络时将报错。构造deeplabv3Plus或deeplabv3结构时,arch_type参数需指定。进入_segm_resnet函数,调整ResNet的下采样卷积层为空洞卷积层,以保持图像分辨率,根据output_stride设置不同的空洞卷积层替换策略。ASPP模块的空洞率大小(aspp_dilate)、输入特征图通道数(inplanes,ResNet50和ResNet101为2048)、低分辨率特征图通道数(low_level_planes,与output_stride*4大小一致,本例为256)等关键参数均需设置。
3. **模型测试**:在VainF_Pytorch代码框架下,模型搭建部分被独立提取,并增加了对deeplabv3Plus_Xception和deeplabv3Plus_Vgg的代码支持。Xception由于未提供预训练权重,设置pretrain=True时会报错。所有代码已上传至GitHub,供参考。测试代码位于main.py文件中,运行结果未在此处展示。
至此,VOC2012数据集上Deeplabv3+模型的搭建工作完成。感谢阅读。