前言
上篇文章讲了手动去除水印的方法,下面介绍一下自动化去水印的方法,大体思路是这样子的:使用目标分割模型提取水印mask(本文用的U2net),结合mask和修复神经网络(本文用的MI-GAN)实现一键去除水印
老规矩,先上效果图:
1.目标分割任务介绍
目标分割(Object Segmentation)是计算机视觉中的一项重要任务,旨在识别图像中的目标并对其进行像素级的分割。它主要包括两种类型:语义分割(Semantic Segmentation)和实例分割(Instance Segmentation)。在语义分割中,目标被划分为不同的类别,而实例分割不仅要识别目标的类别,还要分辨同一类别中不同实例的像素。这里我们只需要用到语义分割的功能,下面是一些常见的语义分割模型:
1.1 DeepLabV3+
DeepLabV3+是DeepLab系列的改进版本,采用了空洞卷积(Atrous Convolution)和空间金字塔池化(ASPP)来捕获不同尺度的上下文信息,并通过解码器模块恢复图像的空间分辨率。
特点: 使用空洞卷积增加感受野,避免降低分辨率。空间金字塔池化(ASPP)增强了多尺度特征的捕捉。强大的多尺度上下文信息融合能力,适应复杂场景。
优势: 高精度的分割效果,适合大规模数据集和复杂场景。
应用: 自动驾驶、卫星图像分析、城市景观分析。
1.2 U-Net
U-Net是一种经典的编码器-解码器结构,采用跳跃连接(skip connections)将低级特征直接传递到解码器,以恢复图像的细节信息。最初用于医学图像分割,但广泛应用于其他领域。
特点: 编码器-解码器架构,加入跳跃连接使得低级特征能够被有效传递。适合小样本数据集,能够在少量数据上取得很好的表现。
优势: 特别适合医学图像分割及小数据集问题,细节恢复能力强。
应用: 医学图像分割、卫星图像、边缘检测等。
1.3 FCN (Fully Convolutional Network)
FCN是语义分割的先驱之一,采用全卷积结构来替代传统的全连接层,使得网络能够接受任意大小的输入并输出相同大小的分割结果。
特点: 通过卷积层进行像素级分类,避免了传统CNN的固定输入尺寸限制。利用反卷积来恢复空间分辨率。
优势: 具有较高的灵活性,适合不同大小的输入。
应用: 自动驾驶、场景分割、物体识别等。
1.4 HRNet (High-Resolution Network)
HRNet以保持高分辨率特征为核心思想,采用多分辨率并行的网络架构,在不同尺度上进行特征融合,显著提升了分割精度。
特点: 强调高分辨率特征的维护和多分辨率信息的融合。适用于高精度要求的任务。
优势: 在保留高分辨率特征的同时,提供了强大的上下文信息处理能力。
应用: 医学图像、人体姿态估计、图像分割等。
1.5 BiSeNet (Bilateral Segmentation Network)
BiSeNet设计了一个双分支结构,分别处理空间信息和语义信息,目标是提升语义分割的计算效率,特别适用于实时场景。
特点: 双分支网络结构,一分支负责捕获语义信息,另一分支负责捕获空间信息。提供了更高的计算效率,适合实时任务。
优势: 高效,尤其在计算资源有限的情况下能快速进行实时分割。
应用: 自动驾驶、视频分析、实时场景分割。
1.6 SegNet
SegNet采用编码器-解码器结构,通过使用池化索引来恢复图像分辨率。这种方法保留了编码器阶段的位置信息,避免了信息丢失。
特点: 通过池化索引传递信息,减少解码阶段的信息丢失。相对较轻,适合资源有限的环境。
优势: 计算开销较小,适用于大规模图像分割。
应用: 道路场景分割、城市景观分析等。
1.7 U2-Net
U2-Net是一种非常强大的图像分割模型,特别适合于处理前景和背景分离任务。它采用两阶段架构,结合U-Net的优势和二元分支网络的特性,进一步提升了图像分割效果。
特点: 强大的边缘检测和前景提取能力,适用于细节分割任务。结合U-Net架构和二元分支结构,通过深度学习优化。
优势: 分割精度高,尤其在处理具有显著前景与背景分离的图像时表现突出。
应用: 人像分割、物体检测、边缘检测等。
1.8 PSPNet (Pyramid Scene Parsing Network)
PSPNet引入了金字塔池化模块(PSP),通过对输入图像进行多尺度池化,来增强对不同尺度上下文信息的捕获,从而提升图像分割效果。
特点: 使用金字塔池化模块增强图像的上下文信息理解。提供多尺度特征融合,提升对复杂场景的理解能力。
优势: 对复杂场景和大场景的分割具有较强的优势。
应用: 城市场景分割、道路检测等。
目标分割模型比较
从热度上看,DeepLabV3+ 和 U-Net 依然是语义分割领域的主流且表现出色的模型,HRNet 在高精度任务中突出表现,适合高分辨率特征提取,BiSeNet 则以实时分割为优势,广泛应用于自动驾驶等实时任务;FCN 虽不再是最前沿,但仍在基础分割任务中具有历史意义,U2-Net 在细节分割上有一定优势,适用于精细化分割任务。至于我为什么选U2net,我亦无他,惟手熟尔。
2.目标分割任务训练
2.1 下载项目
git clone https://github.com/xuebinqin/U-2-Net.git
2.2 配置训练环境
进入https://github.com/xuebinqin/U-2-Net可以看到需要环境:
根据文档安装
cd U-2-Net
conda create -n u2net python=3.6
conda activate u2net
pip install -r requirements.txt
我安装的时候opencv-python安装不上,可以使用以下命令安装:
pip install opencv-python==4.5.4.60 -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.2 下载数据集
我用的公共数据集CLWD,可以在网上下,大概是这样的:
我们只需要这两个文件夹,找不到数据集的也可以问我要。
2.3 开始训练
在项目底下创建train_data文件夹,将步骤2.2图中所示文件夹复制进去,使用u2net_train.py就可以开始训练了。
因为训练数据集有6w张图片,需要很长时间模型才能收敛,我用8张Tesal P4训练了一天一夜才训练了不到50个epoch,不过好在收敛了。
3.修复神经网络
修复神经网络的的情况就不赘述了,上一篇文章有写。
图像修复(2)| 基于mask操作和图像修复的去水印、图像补全、去除瑕疵与污点
总结
我最初打算结合检测模型和修复神经网络来去除水印,然而发现这种方法的效果并不理想。对于有兴趣的研究者,完全可以尝试进一步探索这个方向。一种可能的策略是,首先使用检测模型定位出水印区域,然后通过目标分割技术提取出水印的掩码图。接着,可以将掩码图输入到修复神经网络中,利用其强大的修复能力恢复被水印覆盖的区域,从而达到去水印的效果。这种方法结合了多种技术,可能会在进一步优化后取得更好的效果。
标签:分割,修复,语义,mask,水印,池化,图像,Net From: https://blog.csdn.net/qq_29676069/article/details/145153510