窝牛号

hugging face开源的transformers模型可快速搭建图片分类任务

2017年,谷歌团队在论文「Attention Is All You Need」提出了创新模型,其应用于NLP领域架构Transformer模型。从模型发布至今,transformer模型风靡微软、谷歌、Meta等大型科技公司。且目前有模型大一统的趋势,现在transformer 模型不仅风靡整个NLP领域,且随着VIT SWIN等变体模型,成功把transformer 模型应用到计算机视觉任务。而目前最火的ChatGPT,也是基于Transformer开发的。

Transformer 模型是一种用于自然语言处理的深度学习模型,它采用了注意力机制(attention is all you need)来处理输入序列,可以同时处理长序列信息,具有较好的并行性能,逐渐成为自然语言处理领域中的重要模型。虽然 Transformer 架构已成为自然语言处理任务的标准,但其在计算机视觉中的应用仍然有限。在视觉中,注意力要么与卷积网络结合使用,要么用于替换卷积网络的某些组件,同时保持其整体模型结构不变。

为了把Transformer模型应用到计算机视觉任务上,且保持Transformer模型的整体构建,Google团队发布了VIT模型。Vision Transformer (ViT) 模型在 ImageNet-21k(1400 万张图像,21843 个类别)上以 224x224 分辨率进行预训练,并在 ImageNet 2012(100 万张图像,1000 个类别)上以 224x224 分辨率进行微调。

很多学习Transformer模型的,被Transformer的注意力机制,多头注意力机制搞的一头雾水。当然你若想从头学习一个Transformer模型,可以参考如下动图详解Transformer视频。从Transformer模型到VIT与Swin Transformer模型都有详细的动画与图文,代码实现介绍。

当然hugging face把Transformer模型进行了打包,让大家更容易的使用Transformer模型本期我们就使用hugging face开源的Transformers模型来使用VIT模型的计算机视觉任务,其Transformers模型自开源以来至今,也是收到了10w+的star,其重要程度已经跟pytorch等神经网络模型比拟。

Vision Transformer完全copy了标准的Transformer模型框架,只是在计算机视觉任务中,VIT模型只是使用了标准Transformer模型的编码器部分,从VIT模型的框架可以看出,其模型的编码器部分跟标准Transformer模型一致,只是在进行注意力机制的计算时,VIT采用了12层的结构,而标准的Transformer模型采用的是6层的结构,但是光看一层的模型结构,其2个模型的结构是一致的,毕竟官方想使用Transformer模型进行模型大一统的工作,并不希望改模型结构。

在使用Transformers模型前,我们需要在自己的环境下安装Transformers模型,其安装也很简单,只需输入如下命令即可

pip install transformers 39;&39; Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.65.0) Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (2023.4.0) Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (4.5.0) Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (1.26.15) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2022.12.7) Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.12) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.4) Installing collected packages: tokenizers, huggingface-hub, transformers Successfully installed huggingface-hub-0.14.1 tokenizers-0.13.3 transformers-4.29.2 &39;&39;http://images.cocodataset.org/val2017/000000039769.jpg&image = Image.open(requests.get(url, stream=True).raw) image = Image.open(&39;).convert(&34;) processor = ViTImageProcessor.from_pretrained(&39;) model = ViTForImageClassification.from_pretrained(&39;) inputs = processor(images=image, return_tensors=&34;) outputs = model(**inputs) logits = outputs.logits 34;Predicted class:", model.config.id2label[predicted_class_idx])

首先我们从transformers模型中导入VIT模型相关的函数,这里主要是图片处理函数ViTImageProcessor与图片分类任务函数ViTForImageClassification,当然transformer模型的注意力机制与前馈神经网络相关的模块都已经集成到了transformers模型中,这里我们至今使用以上2个函数即可。

然后我们需要提供需要识别的图片,这里我们可以使用URL提供的图片,当然也可以直接读取本地的一张图片,使用image.open函数即可,这里需要注意的是当读取本地图片时,需要使用covert转换到RGB颜色空间,否则代码会报错。

这里使用了vit-base-patch16-224预训练模型搭建VIT模型,第8行-9行,我们搭建了一个VIT模型。11-12行,我们把输入图片传递给搭建好的VIT模型,并使用预训练模型进行预测。这里,我们输入一张老虎的照片,其模型成功输出tiger标签。

Predicted class: tiger, Panthera tigris

当然,我们也可以在线体验以上过程,输入如下网站,并上传自己的图片,模型会自动识别,并输出预测的图片识别结果。

https://huggingface.co/google/vit-base-patch16-224

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1