python - 用于简单字母图像的 PyTorch 分类器:CNN 模型设计问题
问题描述
寻找为每个字母只有两种可能的字体的文本的 CAPTCHA 图像构建简单图像分类器的技巧。这是一个示例图像:
迄今为止的方法是尝试将图像分解为 6 个相同大小的图像以尝试获取单个字符图像,并为这些图像构建分类器(示例如下)。
有没有更简单的方法来解决这个问题?关于如何设计实际模型的任何提示?(也许一个相对简单的 CNN 就足够了?)
编辑:关于在下面构建合适模型的问题。
我试图在 resnet50 之上构建一个粗略的模型以达到低于标准的效果……这似乎是一种应该相对微不足道的图像分类任务。
非常感谢任何有关模型设计的提示。
下面的代码:
model = models.resnet50(pretrained=True)
for param in model.parameters():
param.requires_grad = False
model.fc = nn.Sequential(nn.Linear(2048, 512),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(512, 26),
nn.LogSoftmax(dim=1))
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.fc.parameters(), lr=0.003)
model.to(device)
epochs = 10
steps = 0
running_loss = 0
print_every = 10
train_losses, test_losses = [], []
for epoch in range(epochs):
for inputs, labels in train_loader:
steps += 1
inputs, labels = inputs.to(device), labels.to(device)
optimizer.zero_grad()
logps = model.forward(inputs)
loss = criterion(logps, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if steps % print_every == 0:
test_loss = 0
accuracy = 0
model.eval()
with torch.no_grad():
for inputs, labels in val_loader:
inputs, labels = inputs.to(device), labels.to(device)
logps = model.forward(inputs)
batch_loss = criterion(logps, labels)
test_loss += batch_loss.item()
ps = torch.exp(logps)
top_p, top_class = ps.topk(1, dim=1)
equals = top_class == labels.view(*top_class.shape)
accuracy += torch.mean(equals.type(torch.FloatTensor)).item()
train_losses.append(running_loss/len(train_loader))
test_losses.append(test_loss/len(val_loader))
print(f"Epoch {epoch+1}/{epochs}.. "
f"Train loss: {running_loss/print_every:.3f}.. "
f"Test loss: {test_loss/len(val_loader):.3f}.. "
f"Test accuracy: {accuracy/len(val_loader):.3f}")
running_loss = 0
model.train()
上述结果如下所示,准确率 <50%:
解决方案
推荐阅读
- python - kivy滚动问题,滚动添加屏幕管理器?
- javascript - 调整多边形上的线条位置
- python - Pandas DataFrame KeyError 1
- angular-cli - 如何防止 Angular 在更改时重新加载我的应用程序但仍允许它保存?
- excel - 如何阻止 Excel VBA 重命名不相关模块和方法中的变量和参数?
- javascript - 在 React JS 中添加仅适用于应用程序的自定义后退按钮
- linux - Zenity:如何创建用户并更改其密码?
- swift - UNUserNotifications 方法“requestAuthorization”在 macOS Catalyst 上不显示对话
- reactjs - 我的 GIF 没有显示在子组件中
- javascript - 如何每次在 JavaScript 中创建新的唯一 ID?