图像卷积初步

深度学习中的卷积运算与卷积层解析

1.卷积核和图片执行互相关运算,图片为(a,b),核为(k,l),则输出图片为(a-k+1,b-l+1),相当于核全部扫描一遍图片,每次一个局部,之后产生对应于检测某种特征的权重矩阵(比如黑白分界特征)。一般训练集会给出希望得到的特征分类,比如垂直边缘矩阵等,然后给出预期的卷积核模样,之后我们进行多次训练,然后随着损失减小,卷积核(权重矩阵)会越来越接近预期矩阵。

2.卷积层每层前向传播计算公式与全连接类似,corr2d对一个二维矩阵扫面运算得到一个输出

corr2d(x, self.weight) + self.bias

3.类定义的初始化只在第一次引用时进行,即只进行一次。注意:初始化过程对self.weight等需要修改为parameter类型

self.weight = nn.Parameter(torch.rand(kernel_size))

4.直接conv2d.weight引用的时parameter类型,.data后则是tensor类型,才可以切片赋值。

5.卷积层没有优化器也没有损失函数,所有反向求导梯度会储存在卷积层本身,所以全连接层对trainer.zero_grad()(trainer中存储梯度),而这里对卷积层。

6.感受野:输入数据对该各自数据有影响的部分,层越多,感受野随着层数叠加会越广。

### 水下图像增强中卷积神经网络 (CNN) 的实现方法 #### CNN在水下图像增强中的核心作用 卷积神经网络(CNN)因其强大的特征提取能力和对复杂模式的学习能力,在水下图像增强领域得到了广泛应用。CNN通过其多层级结构模拟了人类视觉系统的局部感知功能,能够有效捕捉图像的空间层次特性[^1]。 #### 特征提取与非线性激活 为了提升网络的表现力,CNN通常会引入非线性激活函数(如ReLU),这使得网络能够在复杂的图像处理任务中表现出更高的灵活性和适应性。此外,池化层的作用在于降低计算复杂度并减少过拟合风险,而Dropout技术则进一步增强了这一效果。 #### 双通道结构的设计思路 针对水下图像的特点,某些研究提出了基于双通道的CNN架构设计。这种设计的核心理念是分别通过两个独立的通道来捕获不同的图像特征:一个是用于提取细节特征的通道,另一个则是专注于语义信息的通道。这样的分离机制有助于更全面地理解水下环境下的图像内容,并显著提升了最终的增强效果[^3]。 #### 数据集与训练策略的重要性 在实际应用过程中,构建高质量的数据集至关重要。数据集不仅需要涵盖多种场景以提高模型泛化能力,还需要具备足够的规模支持深度学习算法的有效运行。与此同时,合理选择网络结构、定义损失函数以及制定科学的训练策略也是取得良好性能的关键因素之一。 #### 迁移学习的应用价值 除了直接训练专用的CNN外,迁移学习也被广泛应用于水下目标分类等领域。这种方法允许研究人员利用已有的大规模预训练模型作为基础框架,再根据具体应用场景微调部分参数即可快速适配新任务需求。例如,在某项研究中提到的不同海洋环境下采集到的大批量侧扫声纳(SAS)图像被用来验证多个预先训练好的CNN模型的效果差异[^4]。 ```python import tensorflow as tf from tensorflow.keras import layers, models def create_double_channel_cnn(input_shape): inputs = layers.Input(shape=input_shape) # 细节特征提取通道 detail_branch = layers.Conv2D(32, kernel_size=(3, 3), activation='relu')(inputs) detail_branch = layers.MaxPooling2D(pool_size=(2, 2))(detail_branch) # 语义特征提取通道 semantic_branch = layers.Conv2D(64, kernel_size=(5, 5), activation='relu')(inputs) semantic_branch = layers.MaxPooling2D(pool_size=(2, 2))(semantic_branch) # 合并两条路径的结果 concatenated = layers.concatenate([detail_branch, semantic_branch]) x = layers.Flatten()(concatenated) x = layers.Dense(128, activation='relu')(x) outputs = layers.Dense(num_classes, activation='softmax')(x) model = models.Model(inputs=inputs, outputs=outputs) return model ``` 上述代码展示了一个简单的双通道CNN模型创建过程,适用于初步探索阶段。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值