0.
$ \ begingroup $

我的目标是使用Pytorch训练和评估德国交通标志识别基准(GTSRB)数据集。

我从官方网站下载了数据集gtsrb_final_training_images.zip.zip.zip.zip.gtsrb_final_test_images.zip.zip.

但是当我训练模型时,我会得到很差的结果。

我正在使用简单的CNN模型。

编码:

进口火炬进口火炬。Nn作为Nn进口火炬。optim as optim from torchvision import datasets, transforms from torch.util .data import DataLoader device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") class Flatten(n . module): def forward(self, x): return x.view(x. view)shape[0], -1)Conv2d(3, 32, 3, padding=1), nn. relu (), nn。Conv2d(32, 32, 3, padding=1, stride=2), nn. relu (), nn。Conv2d(32, 64, 3, padding=1), nn. relu (), nn。Conv2d(64, 64, 3, padding=1, stride=2), nn. relu (), nn. flatten (), nn。线性(4096,100),nn. relu (), nn。to(device) data_transforms = transforms。Compose([transforms.Resize((32,32)), transforms.ToTensor(), #transforms.Normalize((0.5,), (1.0,))]) train_data_path = "GTSRB/Train" test_data_path = "GTSRB/Test" train_data = datasets。ImageFolder(root = train_data_path,transform = data_transforms)ImageFolder(root = test_data_path, transform = data_transforms) train_loader = DataLoader(train_data, batch_size = 100, shuffle=True) test_loader = DataLoader(test_data, batch_size = 100, shuffle=False) def epoch(loader, model, opt=None): total_loss, total_err = 0.,0。在加载器中,X,y = X.to(device), y.to(device) yp = model(X) loss = nn.CrossEntropyLoss()(yp,y) if:opt.zero_grad() loss.backward() opt.step() total_err += (yp.max(dim=1)[1] != y).sum().item() total_loss += loss.item() * X.shape[0] return total_err / len(loader.dataset), total_loss / len(loader.dataset) opt = optim_sgd (model_cnn.parameters(), lr=1e-1) for t in range(20): train_err, train_loss = epoch(train_loader, model_cnn, opt) test_err, test_loss = epoch(test_loader, model_cnn) if t == 4: for param_group in opt.param_groups: param_group["lr"] = 1e-2 print(*("{:.6f}".format(i) for i in (train_err, train_loss, test_err, test_loss)), sep="\t")

输出:

0.518248 0.851532 1.000000 11.033573 0.514448 0.821411 0.999921 12.305183 0.515213 0.801951 1.000000 12.332444 0.519358 0.787077 1.000000 12.669552 0.511706 0.775102 0.997783 12.443266 0.509730 0.732133 0.999842 13.915797 0.508263 0.724747 0.999842 14.257156 0.510163 0.722937 1.000000 14.508054 0.510980 0.722053 0.999921 14.173411 0.511617 0.721190 0.999921 14.703455

数据集包含ppm文件。他们是RGB。

我尝试了另一个包含PNG文件的数据集,但结果也很糟糕。

我在Google Colab上有整个代码:

https://colab.research.google.com/drive/1br7se2vi9ilu3yktpjdnabnvemdzenmc?hl=en#scrollto=qn3rgfroafvb.

我不知道模型是否存在问题或数据集。

有什么建议么?

$ \ endgroup $

    2个答案2

    0.
    $ \ begingroup $

    你试过使用不同的学习率吗?你的似乎很高,你可以在那个地区尝试1E-4或其他东西。

    来自电脑视觉方面,您也可以尝试提高现有灰度或模糊的图像可读性。

    以下是GTSRB上的一些Repos:https://github.com/junth/traffic-sign-classification-using-convnets.https://github.com/surmenok/gtsrb.

    $ \ endgroup $
      0.
      $ \ begingroup $

      我通过实现自定义数据加载器来解决问题。

      有关自定义数据加载器的详细信息:https://debuggercafe.com/custom-dataset-and-dataloader-in-pytorch/(链接到外部站点。)

      / outal.

      $ \ endgroup $

        你的答案

        点击“发布答案”,您同意我们的同意服务条款隐私政策Cookie政策

        不是您要找的答案?浏览其他标记的问题必威英雄联盟或者必威电竞问你自己的问题