用deeplabV3+训练自己的数据集并导出.pb模型进行可视化测试

本文详细指导如何配置环境,处理VOC数据集,训练DeepLabV3+模型,从ckpt转为tflite并在Android部署,以及可视化测试过程。

用deeplabV3+训练自己的数据集并导出.pb模型进行可视化测试

本文介绍deeplabv3+训练模型并做可视化测试,这里有一篇ckpt模型转tflite并在Android端部署的文章可供参考

一.环境配置和前期准备

1.下载tensorflow的deeplabV3+开源项目
2.安装CUDA10.0
3.安装cudnn7.6.5(需和CUDA的版本对应)
4.安装anaconda3
5.用anaconda3新建虚拟环境(python用3.7),教程
6.在虚拟环境中安装tensorflow-gpu
pip install tensorflow-gpu==1.15.3
7.在虚拟环境中进到第一步下载的项目的*/research/slim文件夹下删除BUILD文件,运行:

python setup.py build
python setup.py install

并添加环境变量:运行export PYTHONPATH=$PYTHONPATH:pwd:pwd/slim

二.数据集的处理

1.数据集文件夹格式:
在这里插入图片描述
其中train.txt文件为训练的图片的名称,不带后缀名
val.txt文件为验证的图片的名称,不带后缀名
trainval.txt文件为所有的图片的名称,不带后缀名
JPEGImages存放所有的RGB图片(.jpg格式)
SegmentationClass存放所有与JPEGImages对应的标签图片(.png格式,单通道)
2.在VOC下新建tfrecord文件夹
3.修改build_data.py文件的image_format的pngjpg,如下:

tf.app.flags.DEFINE_enum('image_format', 'jpg', ['jpg', 'jpeg', 'png'],
                         'Image format.')

4.修改build_voc2012_data.py

tf.app.flags.DEFINE_string('image_folder',
                           './VOC/JPEGImages',
                           'Folder containing images.')

tf.app.flags.DEFINE_string(
    'semantic_segmentation_folder',
    './VOC/SegmentationClass',
    'Folder containing semantic segmentation annotations.')

tf.app.flags.DEFINE_string(
    'list_folder',
    './VOC/ImageSets/Segmentation',
    'Folder containing lists for training and validation')

tf.app.flags.DEFINE_string(
    'output_dir',
    './VOC/tfrecord',
    'Path to save converted SSTable of TensorFlow examples.')


_NUM_SHARDS = 4	#生成tfrecord文件夹中的文件数

三.模型的训练

1.下载预训练模型
2.修改data_generator.py 文件,将自己的数据集加入到里面

_MYDATA = DatasetDescriptor(
   splits_to_sizes={
   
   
        'train': 20281,  # num of samples in images/training
        'val': 2798,  # num of samples in images/validation
        'trainval': 23079

    },
    num_classes=2,
    ignore_label=255,
)

_DATASETS_INFORMATION = {
   
   
    'cityscapes': _CITYSCAPES_INFORMATION,
    'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,
    'ade20k': _ADE20K_INFORMATION,
    'mydata':_MYDATA,
}

3.修改train_utils.py

  exclude_list = ['global_step', 'logits']
  if not initialize_last_layer:
    exclude_list.extend(last_layers)

4.修改train.py

flags.DEFINE_string('train_logdir', "./datasets/VOC/trainout",
                    'Where the checkpoint and logs are stored.')
flags.DEFINE_integer('training_number_of_steps', 5000,
                     'The number of steps used for training')  ###########  迭代次数
flags.DEFINE_integer('train_batc
### 数据准备与预处理 在使用 DeepLabV3+ 构建遥感图像语义分割模型时,数据集的构建和预处理是关键步骤。首先,需要收集具有高质量标注的遥感图像,这些图像通常包含多光谱或RGB波段信息。标注文件应精确标出每种地物类别的区域,确保像素级的一致性[^3]。 为了提高模型的泛化能力,建议对图像进行增强操作,包括随机裁剪、旋转、颜色抖动等。此外,由于遥感图像可能存在尺度变化较大的问题,可以采用多尺度训练策略,使模型适应不同大小的目标物体[^1]。 ```python from torchvision import transforms transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) ``` ### 模型构建与配置 DeepLabV3+ 的核心组件包括空洞卷积(Atrous Convolution)和空间金字塔池化模块(ASPP),它们能够有效扩大感受野提升多尺度特征提取能力[^1]。可以基于 PyTorch 或 TensorFlow训练DeepLabV3+ 模型进行迁移学习,根据自定义数据集调整输出类别数。 对于遥感图像任务,可选用 ResNet-50 或 MobileNet 作为骨干网络,以平衡精度与计算效率。如果目标物体边界模糊或小目标较多,可以在解码器部分引入注意力机制(如 CBAM)来增强边缘细节恢复能力[^2]。 ```python import torch from torchvision.models.segmentation import deeplabv3_resnet50 model = deeplabv3_resnet50(pretrained=True) model.classifier[4] = nn.Conv2d(256, num_classes, kernel_size=1) # 修改输出通道数 ``` ### 训练流程与优化策略 训练过程中,需合理设置损失函数和优化器。交叉熵损失(CrossEntropyLoss)常用于多类语义分割任务,同时可结合 Dice Loss 提升小目标识别效果。优化器推荐使用 AdamW 或 SGD 配合学习率调度器(如 CosineAnnealingLR)实现更稳定的收敛过程[^1]。 为避免过拟合,可在训练初期冻结主干网络参数,仅微调解码器部分,随后逐步解冻整个网络。此外,使用混合精度训练(AMP)能有效降低内存消耗加速训练过程。 ```python criterion = nn.CrossEntropyLoss() optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4) scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50) ``` ### 评估与部署 完成训练后,应在验证集上评估模型性能,主要指标包括平均交比(mIoU)、准确率(Accuracy)和召回率(Recall)。测试阶段可采用滑动窗口或全图推理方式,确保预测结果保持原始图像分辨率[^5]。 部署方面,可将训练好的模型导出为 ONNX 格式,便于在不同平台(如 TensorRT、OpenCV DNN 模块)中高效运行。若需进一步优化推理速度,可考虑量化模型或采用轻量级变体(如 MobileNet-Backbone DeepLabV3+)。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值