【导读】近日,何恺明团队所在的Facebook AI推出ResNeXt-101模型,利用Instagram上的使用者标记图片作为预训练资料集,省去了人工标记资料的钜额成本,而且使用中只需微调,效能即超越了ImageNet任务的SOTA水平。
目前,几乎所有最先进的视觉感知演算法都依赖于相同的正规化:(1)在手动注释的大型影象分类资料集上预训练卷积网络,(2)在较小的特定任务的资料集上微调网络。这个模式已经广泛使用了好多年,并取得了明显的进展。比如:物体检测,语义分割,姿势估计,视讯识别,单眼深度估计等。
事实上,如果没有有监督式预训练,很多方法现在还被认为是一种蛮干 ImageNet资料集实际上是预训练资料集。我们现在实际上对资料集的预训练了解相对较少。其原因很多:比如现存的预训练资料集数量很少,构建新资料集是劳动密集型的工作,需要大量的计算资源来进行实验。然而,鉴于预训练过程在机器学习相关领域的核心作用,扩大我们在这一领域的科学知识是非常重要的。
本文试图通过研究一个未开发的资料体系来解决这个复杂的问题:使用外部社交媒体上数十亿的带有标签的影象作为资料来源。该资料来源具有大而且不断增长的优点,而且是“免费”注释的,因为资料不需要手动标记。显而易见,对这些资料的训练将产生良好的迁移学习结果。
本文的主要成果是,在不使用手动资料集管理或复杂的资料清理的情况下,利用数千个不同主题标签作为标记的数十亿幅Instagram影象进行训练的模型,表现出了优异的传输学习效能。在目标检测和影象分类任务上实现了对当前SOTA效能的提升。在ImageNet-1k影象分类资料集上获得single-crop 最高准确率达到了85.4%,AP达到了45.2%。当在ImageNet-1k上训练(或预训练)相同模型时,分数分别为79.8%和43.7%。然而,我们的主要目标是提供关于此前未开发的制度的新实验资料。为此,我们进行了大量实验,揭示了一些有趣的趋势。
表1:影象分类资料集的摘要。每个资料集标明资料来源和功能(训练集,验证集,测试集),影象数量I和标签数量L。
ImageNet资料集和模型
除了标准的IN-1k资料集之外,我们还尝试了包含1420万幅影象和22000标签的完整ImageNet2011完整版本的更大子集。我们构建了包含5k和9k标签的训练集和验证集。
对于5k标签集组,我们使用现在标准的IN-5k(6.6M训练影象)。对于9k标签集,我们遵循用于构建IN-5k资料集的相同协议,采用下一个最频繁的4k标签和所有相关影象(10.5M训练影象)。在两种情况下,均使用50个影象进行验证。
我们使用具有分组卷积层的残差网络ResNeXt 。实验中使用ResNeXt-101 32×Cd,它有101层,32组,组宽分别为:4(8B乘加FLOPs,43M引数),8(16B,88M),16(36B,193M), 32(87B,466M)和48(153B,829M)。我们认为实验结果可以推广到其他架构。
与ImageNet相比,我们使用的Instagram资料集可能包含每个影象的多个标签(因为使用者指定了多个主题标签)。每个影象的平均标签数量因资料集而异;例如,train-IG-1B-17k每个影象最多包含2个主题标签。
表2:使用不同规模、不同引数配置的ResNeXt-101模型获得的不同效能结果比较
图1:使用不同规模和引数配置的ResNeXt-101模型在ImageNet和Instagram标记资料集的分类效能的比较
# Download an example image from the pytorch website
importurllib
url,filename=(https://github.com/pytorch/hub/raw/master/dog.jpg,dog.jpg)
try:urllib.URLopener.retrieve(url,filename)
except:urllib.request.urlretrieve(url,filename)
# sample execution (requires torchvision)
fromPILimportImage
fromtorchvisionimporttransforms
input_image=Image.open(filename)
preprocess=transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor,
transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]),
])
input_tensor=preprocess(input_image)
input_batch=input_tensor.unsqueeze(0)# create a mini-batch as expected by the model
# move the input and model to GPU for speed if available
iftorch.cuda.is_available:
input_batch=input_batch.to(cuda)
model.to(cuda)
withtorch.no_grad:
output=model(input_batch)
# Tensor of shape 1000, with confidence scores over Imagenets 1000 classes
print(output[0])
# The output has unnormalized scores. To get probabilities, you can run a softmax on it.
print(torch.nn.functional.softmax(output[0],dim=0))
https://pytorch.org/hub/facebookresearch_WSL-Images_resnext/
https://arxiv.org/pdf/1805.00932.pdf
来源:PyTorch,arxiv,新智元