【论文阅读】Enhancing Underwater Imagery using Generative Adversarial Networks

本文介绍了一种利用生成对抗网络(GAN)提升水下视觉场景质量的技术,通过CycleGAN生成配对图像,用于训练恢复模型,以改善视觉驱动行为的输入。与WaterGAN相比,该方法无需深度信息,只需在不同域中拍摄物体图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论文:Enhancing Underwater Imagery using Generative Adversarial Networks
作者:Cameron Fabbri
年份:2018
期刊:IEEE International Conference on Robotics and Automation (ICRA)

摘要

本文提出了一种使用生成对抗网络来改善水下视觉场景质量的方法,使用CycleGAN生成配对图像的数据集,为恢复模型提供训练集。目标是改善视觉驱动行为的输入,进一步降低自主性。

与WaterGAN比较

(1)WaterGAN使用GAN生成水下图像,并使用欧几里得损失(欧氏距离)进行色彩校正;本文同时使用GAN来进行颜色校正。
(2)WaterGAN训练过程中需要深度信息,对于水下自主机器人应用通常很难获得;本文仅需要在两个单独的域(例:水下和陆地)中拍摄物体的图像。
本文使用CycleGAN作为失真模型,以生成用于训练的配对图像。分别给出无失真和有失真的水下图像域,CycleGAN能够执行样式转换。给定一个未失真的图像,CycleGAN会将其失真,以使其似乎来自失真图像的域,这些在本文算法中用于图像重建。

A.数据集生成

IC:没有失真的水下图像,ID:失真的同一图像。目标是学习功能f:ID→IC。由于难以收集水下数据,通常不仅ID或IC存在,而且两者都不存在。为了避免图像对不足的问题,本文使用CycleGAN从IC生成ID,从而提供了成对的图像数据集。

B.对抗性网络

在最初的GAN公式中,目标是解决minimax问题:
在这里插入图片描述
本文用WGAN公式,本文采用具有梯度惩罚的Wasserstein GAN(WGAN-GP),而不是裁剪网络权重,而是通过对鉴别器输出相对于其输入的梯度范数进行软约束,确保了Lipschitz约束。
原本cycleGan的损失函数:
在这里插入图片描述
在这里,直接使用本公式会产生gan网络模式崩溃的问题,所以作者找到了更加适合水下图像的损失函数(loss采用了Wasserstein距离,也就是EM距离,不是欧式距离,EM距离主要是用于衡量两个分布之间的距离,可以获得更多细节信息,即LWGAN):
在这里插入图片描述
Pxˆ:沿着来自真实数据分布和发生器分布的成对点之间沿直线的样本,λGP:加权因子。为了使G具有基本的真实感,并捕获图像中的低电平频率,(因为水下图像增强的后一个阶段是生物识别等功能的增强),所以在这里考虑了L1loss:
在这里插入图片描述
加一个L1正则化项可以避免过拟合。loss总公式Underwater GAN (UGAN):
在这里插入图片描述

C.图像梯度差异损失

本文提出一个UGAN-P loss,在UGAN的基础上加了一项Gradient Diffrence Loss(梯度差损失),用来锐化图像来避免生成的图像模糊。作者用这两个loss分别训练了两个网络,进行对比(地面真实图像IC,预测图像IP = G(ID)且α为大于或等于1的整数)
在这里插入图片描述
在这里插入图片描述

D.网络架构和训练细节

在这里插入图片描述
unet网络可以简单看为先下采样,经过不同程度的卷积,学习了深层次的特征,在经过上采样回复为原图大小,上采样用反卷积实现。最后输出类别数量的特征图,如分割是两类(是或不是),典型unet也是输出两张图,最后要说明一下,原网络到此就结束了,其实在最后还要使用激活函数softmax将这两个类别转换为概率图,针对某个像素点,如输出是[0.1,0.9],则判定这个像素点是第二类的概率更大。
网络结构可以看成3个部分:
•下采样:网络的红色箭头部分,池化实现
•上采样:网络的绿色箭头部分,反卷积实现
•最后层的softmax:在网络结构中,最后输出两张fiture maps后,其实在最后还要做一次softmax,将其转换为概率图。
本文UGAN的kernalsize是4x4,步长是2.encoder部分的网络层都会跟在一个batch normalization和一个斜率为0.2的激活函数leakyRELU后面。Decoder部分则是跟在激活函数RELU后,没有Batch Normalization(原因:WGAN-GP会针对每个输入单独惩罚判别器梯度的范数,该批归一化将无效,层归一化也没有明显的改进)。最后一层的激活函数用的是tanh。判别部分的网络用了一个叫patchgan的设计,大意就是判别网络输出的是一个32x32x1的特征矩阵,
本文判别器被建模为PatchGAN ,它在图像块级别上进行判别。与常规判别器不同,PatchGAN鉴别器输出的是一个32×32×1特征矩阵,不是0或者1,这样可以获得更多的细节信息,为高阶频率提供了一个度量。

### 实现水下图像和视频增强的融合方法 为了实现水下图像和视频的增强,一种常见的做法是采用基于多尺度特征融合的方法。这种方法能够有效提升水下场景中的对比度、色彩还原以及细节保留。 #### 多尺度特征融合算法概述 该算法主要分为三个阶段:预处理、特征提取与融合、后处理。预处理阶段用于去除噪声并调整亮度;特征提取则利用不同尺度下的图像特性来捕捉更多细节信息[^1]。最后,在后处理部分会对融合后的图像做进一步优化以达到更好的视觉效果。 #### Python代码示例 下面是一个简单的Python脚本,它实现了上述提到的基础框架: ```python import cv2 import numpy as np def preprocess(image): """ 对输入图片进行初步处理 """ gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0) return blurred def extract_features(image): """ 提取多个尺度上的特征图层 """ scales = [cv2.resize(image, None, fx=i / 4.0, fy=i / 4.0) for i in range(1, 5)] features = [] for scale in scales: laplacian = cv2.Laplacian(scale, cv2.CV_64F) resized_lap = cv2.resize(laplacian, image.shape[:2][::-1]) features.append(resized_lap) stacked_features = np.stack(features, axis=-1) max_feature = np.max(stacked_features, axis=-1) normalized_max = cv2.normalize(max_feature, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) return normalized_max def postprocess(fused_image): """ 后期处理步骤 """ enhanced_img = cv2.equalizeHist(fused_image) final_result = cv2.applyColorMap(enhanced_img, colormap=cv2.COLORMAP_JET) return final_result if __name__ == "__main__": input_path = 'path_to_your_underwater_image.jpg' img = cv2.imread(input_path) processed_img = preprocess(img) feature_map = extract_features(processed_img) result = postprocess(feature_map) output_file = './output_enhanced.png' cv2.imwrite(output_file, result) ``` 此段程序展示了如何读入一张水底照片,并对其进行一系列操作最终得到增强版的结果。需要注意的是这只是一个基础版本,在实际应用中可能还需要针对具体情况进行参数调优或是引入更复杂的模型来进行改进[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值