0.
\ begingroup美元

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

我从官方网站下载了数据集GTSRB_Final_Training_Images.zipGTSRB_Final_Test_Images.zip

但当我训练模型时,我得到的结果非常糟糕。

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

编码:

导入火炬导入torch.nn作为nn导入torch.optim作为来自torchvision导入数据集的Optim,从Torch.utils.data导入数据加载器设备= rorch.device(“CUDA:0”如果Torch.Cuda.Is_Available()否则“CPU“)类扁平(NN.Module):Def Forward(Self,x):返回x.view(x.shape [0],-1)odel_cnn = nn.sequentient(nn.conv2d(3,32,3,填充= 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.lelten(4096,100),nn.relu(),nn.linear(100,44))。到(设备)data_transforms = transforms.compe(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,transt_data = datasets.imagefolder(root = test_data_path,transform = data_transforms)train_loader= dataloader(train_data,batch_size = 100,shuffle = true)test_loader = dataloader(test_data,bate_size = 100,shuffle = false)defepoch(loader,model,opt = none):total_loss,total_err = 0.,0。对于Loader中的x,y:x,y = x.to(设备),y.to(设备)yp = model(x)丢失= nn.crossentropyloss()(yp,y)如果选择选择:opt.zero_grad()lock.Backward()opt.step()total_err + =(yp.max(dim = 1)[1]!= y).sum()。项目()total_loss + = lock.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.777102 0.997783 12.443266 0.509730 0.732133 0.999842 13.9157263 0.724747 0.999842 14.257156 0.510163 0.722937 1.000000 14.508054 0.510980 0.722053 0.99993411 0.511617 0.7211900.。999921 14.703455

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

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

我在Google Colab上有整个代码:

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

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

有什么建议吗?

$ \ endgroup $
    0.
    \ begingroup美元

    你是否尝试过使用不同的学习速率?你的好像挺高的,你可以试试1e-4或者那个区域的什么。

    从计算机视觉的角度来看,你也可以尝试通过先验的灰度化或模糊来提高图像的可读性。

    以下是一些关于GTSRB的回购:https://github.com/Junth/Traffic-Sign-Classification-using-ConvNetshttps://github.com/surmenok/gtsrb.

    $ \ endgroup $
      0.
      \ begingroup美元

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

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

      / Oualid

      $ \ endgroup $

        你的答案

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

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