2024《人工智能导论》大作业
任务名称: 不良内容图像检测
完成组号: 14
小组人员:
完成时间: 6/12/2024
一、任务目标
基于暴力图像检测数据集,构建一个检测模型。该模型可以对数据集的图像
进行不良内容检测与识别。要求:
1)模型是 2 分类(0 代表正常图像、1 代表不良图像),分类准确率越高越好;
2)模型具有一定的泛化能力,不仅能够识别与训练集分布类似的图像,对于 AIGC
风格变化、图像噪声、对抗样本等具有一定的鲁棒性;
3)有合理的运行时间。
二、具体内容
1.实施方案
1)数据集选择与预处理
首先,我们选取了暴力图像检测数据集作为训练和测试模型的数据来源。这
个数据集包含了大量标注好的暴力图像和正常图像,适用于我们的二分类任务。
在预处理阶段,我们对图像进行了标准化处理,以使模型能够更好地处理图像数
据。
2)模型选择与训练
针对任务需求,我们选择了 ResNet 深度学习模型作为我们的模型架构。
ResNet 系列模型通过数据的预处理以及在网络中使用 BN(Batch Normalization)
层解决了梯度消失或梯度爆炸问题,通过 residual 结构(残差结构)减轻了退化
问题,在图像处理领域有着良好的表现。我们采用了经典的 ResNet34 结构,并
根据实验结果对其进行了调整和优化,以提高模型的准确率和泛化能力。
3)模型评估与优化
在模型训练完成后,我们使用验证集对模型进行评估,以确保其性能符合要
求。同时,我们还针对实际应用场景中可能出现的 AIGC 风格变化、图像噪声、
对抗样本等情况进行了模拟和测试,以验证模型的鲁棒性。在评估过程中,我们
采用了常见的性能指标,如准确率、损失函数等。
2.核心代码分析
ResNet 类的定义(model.py):
1)__init__方法:初始化 ResNet 类,设置了模型的参数和各个层的组件。
参数包括 block(瓶颈块的类型)、blocks_num(每个阶段的瓶颈块数量)、
num_classes(输出类别数量,默认为 1000)、 include_top(是否包含顶部的全连
接层,默认为 True)、 groups(分组卷积的组数,默认为 1)、 width_per_group(每
组的通道数,默认为 64)等。在__init__方法中,首先定义了模型的初始输入通
道数为 3(RGB 图像),然后创建了一系列卷积、批归一化、ReLU 激活函数和
池化层,构建了模型的初始卷积部分(self.conv1 到 self.maxpool)。
class ResNet(nn.Module):
def __init__(
self,
block,
blocks_num,
num_classes=1000,
include_top=True,
groups=1,
width_per_group=64,
):
super(ResNet, self).__init__()
self.include_top = include_top
self.in_channel = 64
self.groups = groups
self.width_per_group = width_per_group
self.conv1 = nn.Conv2d(
3, self.in_channel, kernel_size=7, stride=2, padding=3,
bias=False
)