使用deeplabv3+训练自己数据集(迁移学习)

概述

在前边一篇文章,我们讲了如何复现论文代码,使用pascal voc 2012数据集进行训练和验证,具体内容可以参考《deeplab v3+在pascal_voc 2012数据集上进行训练》,在本篇文章,我们主要讲述,如何对deeplab v3+进行迁移学习,也即如何使用deeplab v3+算法来训练个人的数据集。

1. 数据集准备

首先在开始之前我们先对数据集做一个简单的说明,由于deeplabv3+使用的TensorFlow框架,并且为了提高训练的速度,因此在训练开始前,需要转换成tfrecorde类型的文件来进行训练,因此,我们直接仿照pascal voc 2012数据集的数据结构来制作数据集,这样我们在训练所需图片准备完成之后可以直接复用转换tfrecorde的脚本。

1.1 标注图片,获取json文件

古人有句话:兵马未动粮草先行,而对深度学习来说,粮草毫无疑问指的是训练的数据,毕竟我们最终的模型都是依靠数据来喂养出来的🐶!因此选择一个趁手的标注工具很重要,此处我推荐使用labelme,标注起来相当方便。

下边我简单说一下lableme安装方法(此处建议使用Anconda来实现环境隔离)。

  1. 安装Ancodna环境,

    执行如下命令:

    conda create --name=labelme python=2.7(这一步python=*选择自己的Python版本)
    activate labelme
  2. 安装软件与依赖

    conda install pyqt
    pip install labelme
  3. 启动与使用

    activate labelme
    labelme

启动完成之后可以看到如下界面:

image-20200927143131553

标注的时候,将物体用线条框起来即可,例如:

img

1.2 转换json,获取png图片

在图像标注完成之后,在我们对应设置的文件夹下有许多json,这些json文件记录了所标注图片的位置以及图片内容等信息,根据这些信息我们可以转换成训练所需要的mask图(此处是png格式的图片)。

虽然labelme中包含labelme_json_to_dataset来帮助我们将json图片转成png图片,但是该命令有一个巨大的缺点就是无法实现批量转换,因此需要我们自己写一个批量转换的脚本来辅助转换。

一个简单的转换脚本如下:

### DeepLabV3+ 训练水下数据集所需样本量分析 对于深度学习模型而言,尤其是像DeepLabV3+这样的复杂语义分割网络,训练效果高度依赖于数据的质量和数量。虽然引用中的研究[^1]并未直接涉及DeepLabV3+或水下数据集的具体需求,但可以从以下几个方面推导出合理的样本量建议。 #### 数据规模的影响因素 1. **模型参数复杂度**: DeepLabV3+是一种基于编码器-解码器架构的语义分割模型,具有大量的可训练参数。为了充分优化这些参数并避免过拟合,通常需要较大的标注数据集。一般情况下,每类目标至少需要数百到数千张高质量图像才能实现良好的泛化性能[^2]。 2. **水下环境的独特挑战**: 水下场景存在光照不均、浑浊程度高以及物体边界模糊等问题,这增加了模型的学习难度。因此,在这种特殊环境下,可能需要更多的样本来覆盖各种复杂的条件。此外,由于水下数据采集成本较高,实际可用的数据量往往有限,这就更强调了高效利用现有资源的重要性[^3]。 3. **迁移学习的作用**: 如果能够找到与目标任务相似的大规模预训练模型(例如ImageNet或其他海洋相关数据集),则可以通过迁移学习显著减少所需的原始数据量。在这种情况下,几百至一千张精心挑选且多样化的图片就足以微调整个网络[^4]。 #### 建议的最小样本量范围 综合以上考虑,以下是针对不同情况下的推荐样本量: | 场景描述 | 推荐最少样本数 | |----------|----------------| | 完全从零开始训练 | ≥5,000 张清晰标记的图像 | | 使用迁移学习技术 | ≈1,000 至 2,000 张针对性强的小型数据集 | | 极端受限条件下实验验证 | ≤500 张非常高质量且代表性的样本 | 值得注意的是,上述数值仅为理论估计值;具体项目还需依据实际情况调整策略,比如增强数据扩增手段或者采用半监督/弱监督算法来弥补不足之处。 ```python import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 示例:定义简单的数据扩充管道 datagen = ImageDataGenerator( rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True) train_generator = datagen.flow_from_directory('path_to_dataset', target_size=(224, 224), batch_size=32) ``` 此代码片段展示了一个基本的数据增强流程,它可以帮助有效增加虚拟样本数目从而缓解真实世界里获取大量优质素材的压力。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值