本文主要是介绍分类数据集踩坑记录,Caltech256,你礼貌吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本博客记录一下在Caltech256数据集中遇到的一些坑。
Caltech256主页,以及博主提供的免费数据集下载链接。
踩坑1:
waring:torchvision提供的标签信息与实际下载的数据集不匹配,数据集加载出错
标签文件与数据集不匹配,标签文件长达30609,但实际图片为30607张(官方数据)。判断了下所有文件是否存在,出现两个奇葩index找不到文件。
train_set = datasets.Caltech256(root=data_folder,download=True,# train=True,transform=train_transform)
for i in range(len(train_set.index)):if not os.path.exists(os.path.join(root,"256_ObjectCategories",train_set.categories[train_set.y[i]],"{:03d}_{:04d}.jpg".format(train_set.y[i] + 1, train_set.index[i]))):print(i)
解决方案:
train_set.index = train_set.index[:6307] + train_set.index[6308:22619] + train_set.index[22620:]train_set.y = train_set.y[:6307] + train_set.y[6308:22619] + train_set.y[22620:]
踩坑2:
waring:总类别为257,使用错误的类别将会导致预测概率为负,损失计算为NaN等无厘头错误。
n_cls = 256 #错误类别
n_cls = 257 #正确类别
踩坑3:
waring:部分图片为单通道,直接使用transforms进行标准化将会报错。
顺便把标准化参数也在这公布一下吧,同学们以后就不用自己再算一遍了。
# 三通道均值和标准差分别为:
0.5520 0.5336 0.5050
0.2353 0.2345 0.2372
解决方案:
通过路径读取图片后先将img转换为tensor,并判断tensor是不是单通道,如果单通道则直接复制为3通道。确保所有img为3通道之后再进行标准化和resize等操作。
img = Image.open(img_path) # 读取该图片img = transforms.Compose([transforms.ToTensor()])(img)if self.transform is not None:if img.shape[0] != 3:img = img.repeat(3, 1, 1)img = self.transform(img)
暂时记录到这啦
这篇关于分类数据集踩坑记录,Caltech256,你礼貌吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!