我正在通过 CNN 做一个关于手语识别的项目。
我的数据集
每个字母表有 300 张图像,空间有一个特殊符号。图像取自三个人。每个图像都有以白色背景为中心的手。分辨率为 640*480。所以总共有 27 个标签和 8100 张图像。
代码
我在 PyTorch 中使用预训练的 AlexNet,并根据项目的需要更改了全连接层。我正在训练 10 个 epoch。批量大小为 32。损失函数为 Negative Log Likelihood Loss,优化器为 Adam。
AlexNet(
(features): Sequential(
(0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))
(1): ReLU(inplace=True)
(2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
(3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(4): ReLU(inplace=True)
(5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
(6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(7): ReLU(inplace=True)
(8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(9): ReLU(inplace=True)
(10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(11): ReLU(inplace=True)
(12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(avgpool): AdaptiveAvgPool2d(output_size=(6, 6))
(classifier): Sequential(
(0): Linear(in_features=9216, out_features=1024, bias=True)
(1): ReLU()
(2): Dropout(p=0.5, inplace=False)
(3): Linear(in_features=1024, out_features=512, bias=True)
(4): ReLU()
(5): Dropout(p=0.5, inplace=False)
(6): Linear(in_features=512, out_features=27, bias=True)
(7): LogSoftmax()
)
)
问题
我面临的问题是,该模型对没有手势或包含错误手势的图像给出了 90-100% 的非常高的置信度。我尝试添加 dropout 层,训练更多的 epoch,但似乎没有什么能解决这个问题。模型有问题还是需要更改/更新数据集?