基于CNN的海面舰船图像二分类
基于CNN的海面舰船图像二分类
1. 模型依赖的环境和硬件配置
Python3.8
Pillow==8.2.0
torch-1.5.1(cuda9.2)
torchfile==0.1.0
torchvision-0.6.1(cuda9.2)
visdom==0.1.8.9
GPU: MX150
2. 网络结构
2.1 VGG9
所有卷积层均使用3 \times 3大小的滤波器,在此架构中通过单像素扩展确保了各向同性特征图尺寸的一致性。
在每一对接的卷积操作与ReLU激活之间插入Batch Normalization模块。
采用步长为1的一系列3 \times 3可学习滤波器,在此结构中通过单像素扩展实现特征图尺寸的一致性。
最大池化操作基于大小为2×2的窗口,在每次下采样时跨越两个像素的距离进行滑动窗口处理,并确保了每一步骤后特征图的空间维度减半。
卷积和池化操作的输出特征图维度计算均采用floor运算方式,并且该过程通过右地板运算符完成。
采用大小为2048×1的全连接层作为分类器,并对输出端采用Sigmoid激活函数。由于处理的是二分类问题,在模型设计中选择BCELoss(即Binary Cross Entropy Loss)作为损失函数。
| 输出维度 | 卷积核/全连接层大小 | Normalization | 激活函数 | 池化层 | 参数数量 |
|---|---|---|---|---|---|
| 40\times40\times64 | Conv3\times64 | BN | ReLU | Max Pooling | 3276 |
| 20\times20\times128 | Conv3\times128 | BN | ReLU | Max Pooling | 73728 |
| 20\times20\times256 | Conv3\times256 | BN | ReLU | 589824 | |
| 10\times10\times256 | Conv3\times256 | BN | ReLU | Max Pooling | 589824 |
| 10\times10\times512 | Conv3\times512 | BN | ReLU | 2359296 | |
| 5\times5\times512 | Conv3\times512 | BN | ReLU | Max Pooling | 2359296 |
| 5\times5\times512 | Conv3\times512 | BN | ReLU | 2359296 | |
| 2\times2\times512 | Conv3\times512 | BN | ReLU | Max Pooling | 2359296 |
| 1 | FC2048\times1 | Sigmoid | 2049 |
参数总计10.7M
2.2 GoogLeNet11
该网络架构采用了完全基于Inception模块的设计方案,在卷积部分完全由Inception模块实现。最大池化过程采用了统一的小尺寸和固定步长策略,在每个采样点上执行特征提取操作。主分支网络通过一系列经典的线性变换步骤进行特征提取与归一化处理,并最终通过sigmoid函数完成分类决策输出。而辅助分支网络则整合了更多层次的信息融合机制,在前向传播过程中依次应用小尺寸卷积操作以增强特征表达能力,并通过引入Dropout机制来缓解深度学习模型中常见的过拟合问题,在最终输出端同样采用了sigmoid函数完成结果预测任务。该结构在保证模型性能的同时实现了对计算资源的有效优化
| 类型 | 卷积核大小/步长 | 输出维度 | 深度 | #1\times1 | #3\times3 reduce | #3\times3 | #5\times5 reduce | #5\times5 | pool proj | 3\times3比例 | 5\times5比例 | 参数数量 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Inception | 80\times80\times64 | 2 | 16 | 8 | 16 | 8 | 16 | 16 | 25% | 25% | 4764 | |
| Max Pooling | 2\times2/2 | 40\times40\times64 | ||||||||||
| Inception | 40\times40\times64 | 2 | 8 | 8 | 24 | 8 | 16 | 16 | 30% | 25% | 7488 | |
| Max Pooling | 2\times2/2 | 20\times20\times64 | ||||||||||
| Inception | 20\times20\times128 | 2 | 16 | 32 | 64 | 8 | 32 | 16 | 50% | 25% | 29440 | |
| Max Pooling | 2\times2/2 | 10\times10\times128 | ||||||||||
| Inception | 10\times10\times256 | 2 | 32 | 48 | 96 | 32 | 96 | 32 | 37.5% | 37.5% | 136704 | |
| Max Pooling | 2\times2/2 | 5\times5\times128 | ||||||||||
| Inception | 5\times5\times512 | 2 | 64 | 96 | 192 | 64 | 160 | 96 | 37.5% | 31.25% | 503808 |
主分类器结构:
该网络架构包含一个二维卷积操作(kernel size: 2\times 2, stride: 2);卷积层输出经平均池化处理后空间维度降至H \times W \times 512;网络引入一个Dropout比例为40%的随机性正则化机制;全连接层采用从输入特征图到单个单元的学习策略;最后通过Sigmoid函数实现分类器输出的概率预测
辅助分类器结构:
基于2 \times 2尺寸和步长为\mathbf{S}= \mathbf{[} [ [ 3 ] ] \mathbf{]}= [ ] 的二维平均池化操作
GoogLeNet11参数总计27.03M
2.3 ResNet18
所有卷积层均设置为3\times3尺寸、步长1、边界填充1像素的卷积核,并带有ReLU激活函数。
为了提升网络性能,在其基础架构中引入批量归一化(Batch Normalization)模块。
第一层使用普通卷积模块,在后续其他所有卷积层中引入残差块结构以增强模型深度。
最大池化模块配置为2\times2尺寸、步长2无边界填充的方式。
在跨特征图尺寸变化或通道数量增减的情况下,在残差块跳跃连接两端实施1\times1卷积进行特征变换(步长通常设为2;若通道数量不变,则保持与前一层相同;否则翻倍通道数量)。
分类器部分选用全连接结构,并应用Sigmoid函数作为输出激活函数。
损失函数选用二元交叉熵损失(BCELoss)作为评估标准。
针对卷积及池化操作后的特征图维度计算方式采用了向下取整策略以简化运算流程。
| 输出维度 | 卷积核/全连接层大小 | 归一化 | 激活函数 | 1\times1变换/步长 | 池化层 | 参数数量 |
|---|---|---|---|---|---|---|
| 80\times80\times64 | 3\times3\times64 | Batch Normalization | ReLU | 1\times1\times64/2 | Max Pooling | 5824 |
| 40\times40\times64 | 3\times3\times64 | Batch Normalization | ReLU | 36864 | ||
| 40\times40\times64 | 3\times3\times64 | Batch Normalization | ReLU | 36864 | ||
| 40\times40\times64 | 3\times3\times64 | Batch Normalization | ReLU | 36864 | ||
| 40\times40\times64 | 3\times3\times64 | Batch Normalization | ReLU | 1\times1\times128/2 | Max Pooling | 45056 |
| 20\times20\times128 | 3\times3\times128 | Batch Normalization | ReLU | 147456 | ||
| 20\times20\times128 | 3\times3\times128 | Batch Normalization | ReLU | 147456 | ||
| 20\times20\times128 | 3\times3\times128 | Batch Normalization | ReLU | 147456 | ||
| 20\times20\times128 | 3\times3\times128 | Batch Normalization | ReLU | 1\times1\times256/2 | Max Pooling | 180224 |
| 10\times10\times256 | 3\times3\times256 | Batch Normalization | ReLU | 589824 | ||
| 10\times10\times256 | 3\times3\times256 | Batch Normalization | ReLU | 589824 | ||
| 10\times10\times256 | 3\times3\times256 | Batch Normalization | ReLU | 589824 | ||
| 10\times10\times256 | 3\times3\times256 | Batch Normalization | ReLU | 1\times1\times512/2 | Max Pooling | 729896 |
| 5\times5\times512 | 3\times3\times512 | Batch Normalization | ReLU | 2359296 | ||
| 5\times5\times512 | 3\times3\times512 | Batch Normalization | ReLU | 2359296 | ||
| 5\times5\times512 | 3\times3\times512 | Batch Normalization | ReLU | 2359296 | ||
| 5\times5\times512 | 3\times3\times512 | Batch Normalization | ReLU | Max Pooling | 2359296 | |
| 2\times2\times512 | FC2048\times1 | Sigmoid | 2049 |
ResNet18参数总计12.72M
3. 实验结果
3.1网络训练参数
| 总样本数 | Epoch | Batch Size | Iteration |
|---|---|---|---|
| 4000 | 10 | 20 | 25600 |
3.2 损失函数变化曲线
VGG9


GoogLeNet11


ResNet18


3.3 对船舶数据集的分类结果
VGG9经过10轮训练后,在第8轮次中获得最高分类精度为99.75%。
GoogLeNet在完成11轮训练后,在第9轮次中取得最高分类精度为98.75%。
ResNet18完成一轮完整的训练周期后,在第8层达到了最佳的分类准确率水平。
| 序号 | 模型 | 正类精度(测试集) | 负类精度(测试集) | 分类精度 | 测试集上消耗时间 |
|---|---|---|---|---|---|
| 1 | VGG9 | 99.01% | 100% | 99.75% | 19.860714 sec |
| 2 | GoogLeNet11 | 99.01% | 98.66% | 98.75% | 19.382479 sec |
| 3 | ResNet18 | 97.03% | 100% | 99.25% | 24.706545 sec |
4. 总结分析
VGG和ResNet在训练过程中收敛速度更快,但随着迭代次数的增加,其过拟合现象相比GoogLeNet更为显著。
ResNet网络的层的数量大约是VGG的两倍,然而在测试集上的运算时间相当,这表明其计算开销相对较小。
GoogLeNet通过Inception Module这种巧妙设计降低了模型运算成本,尽管其卷积核数量增加且网络深度加深,但与之相比,其在测试集上的运算时间却更短。
链接:https://pan.baidu.com/s/1MbsmpdF-rSm-3Y0nIAp7Nw
提取码:7duf
