【AI达人特训营】多模型集成学习的艺术作品作者识别
时间:2025-08-06 10:34:23
该项目采用了多模型集成学习技术来识别艺术家。使用PaddleClas对ResNetvd、VGGPPLCNetV模型进行训练,并基于一个包含艺术家和图片的Art数据集进行了数据处理,将数据分为训练集和验证集。通过硬投票集成多个模型的结果来提高识别准确率,成功识别了Edgar Degas和Rembrandt的作品。

多模型集成学习的艺术作品作者识别
0 项目背景
AI能够解读艺术品,从中提取关键元素或借助GAN技术创作新颖绘画,从而通过训练模型来辨识艺术家和鉴定名作。
比如下图是法国印象派画家Edgar Degas的作品

接下来,我们将利用PaddleClas对AI进行训练,使它能识别艺术家作品并理解他们的创作手法。
本项目利用PaddleClas训练了ResNetvd、VGGPPLCNetV型,接着对艺术品图片应用这三个不同模型进行识别。每个模型分别给出识别结果,并通过硬投票方法将它们的预测综合在一起,实现多模型集成识别。
至于为什么需要使用多模型集成学习?
在面对复杂数据集时,单一模型可能无法提供全面和准确的答案。为了解决这个问题,我们需要采用多模型集成学习方法。通过利用不同分类器的优势,即使个别模型出现错误,其他模型也能纠正这些错误,从而提高整体预测的准确性。此项目选择硬投票作为多模型集成学习的一种方式,即每个分类器的结果独立地进行加权组合以得出最终决策。
1 简介
1.1项目如何实现
采用paddleclas进行图像分类任务。 paddleclas官方文档连接如下:
https://gitee.com/paddlepaddle/PaddleClas/blob/release/2.2/docs/zh_CN/tutorials/quick_start_new_user.md
1.2 多模型集成学习
当单一模型可能产生偏差时,通过结合多个人工智能系统可以显著提升预测准确性。这种方法的核心在于将多个分类器的结果整合起来,确保整体的可靠性与稳定性。具体来说,使用的是“硬投票”策略,即每个子系统的输出直接决定最终结果,没有权重考虑。这种机制有助于在面对不确定数据时保持模型的一致性和有效性,从而提供更加精准和可靠的预测结果。
2 数据集介绍
在艺术领域,我们有一个包含艺术家和艺术品图片的数据集。为了便于使用这些数据进行训练、测试和分析,我们需要将其转换为更易处理的形式。首先,需要创建一个名为author_id_to_name.txt的文件,其中包含了作者ID(与对应作者姓名之间的映射关系。此外,另一个关键文件是data/train.csv,它包含两个列:filename(图片文件名)和label(对应的艺术家ID)。通过这些信息,我们可以在训练、测试或分析模型时快速地找到每张艺术品的原始描述,并根据其艺术家ID轻松查找数据集中的相关信息。这样可以大大简化数据处理流程,提高工作效率。
友情提示:数据集仅供学习和个人使用
Data directory: ├── name_list.txt├── test │ ├── jpg│ ├── jpg │ └── ... ├── train │ ├── jpg├── train.csv├── name_list.txt└── train分布.pngAfter logging in, copy this content.
3 数据处理
In [1]
# 先导入所需要的库from sklearn.utils import shuffleimport osimport pandas as pdimport numpy as npfrom PIL import Imageimport paddleimport random登录后复制 In [2]
忽略警告信息在编程时,你可能经常遇到代码能正常运行但会提示警告的情况。有时这些警告特别让人讨厌。解决这个问题非常简单:通过调用`warnings.warn`函数来控制警告输出。首先,你需要导入`warnings`模块并调用其`filterwarnings`方法。你可以传入一个参数,指定你希望忽略的警告类型:```python import warnings# 忽略所有的警告信息 warnings.filterwarnings(ignore)# 或者忽略特定类型的警告 warnings.filterwarnings(error, category=NameError) ```通过这种方式,你可以根据需要控制警告消息是否显示,从而提高代码的可读性和效率。
3.1 解压数据集
In [3]
!unzip -qo /home/aistudio/data/data151473/Art.zip -d ./data/Art登录后复制
3.2读取数据
由于图片分散在train文件和test文件夹中,不方便统一管理,因此我将根据data/Art/train.csv文件中的所有图片名及其标签生成all_list.txt。此列表中有每张图片的路径(包括作者ID),格式为Art/img/[filename].jpg 其中对应作者的ID。数据集总共包含图片和标签。In [
import csvimport osdef get_all_txt(): with open("data/Art/train.csv") as cfile: i=0 reader = csv.DictReader(cfile) f = open("all_list.txt", "w") all_list = [] for row in reader: i=i+1 all_list.append("Art/img/"+row.get("filename")+".jpg"+" "+row.get("label") + "\n") allstr = ''.join(all_list) f = open('all_list.txt','w',encoding='utf-8') f.write(allstr) return all_list , i all_list,all_lenth = get_all_txt()print(all_lenth)登录后复制
- 录后复制
3.3 打乱数据
先把数据打乱,然后按照比例划分数据集 In [5]
# 把数据打乱all_list = shuffle(all_list) allstr = ''.join(all_list) f = open('all_list.txt','w',encoding='utf-8') f.write(allstr)print("打乱成功,并重新写入文本")登录后复制
打乱成功,并重新写入文本登录后复制
3.4划分数据集
我们总共是7227张图片,按照经典的划分方式0.9:0.1
train_list.txt(训练集,6504张图)
val_list.txt(验证集,723张图 In [6]
# 按照比例划分数据集Art的数据有7227张图片,不算大数据,一般9:1即可train_size = int(all_lenth * 0.9) train_list = all_list[:train_size] val_list = all_list[train_size:]print(len(train_list))print(len(val_list))登录后复制
- 723登录后复制
生成train_list.txt和val_list.txt文件 In [7]
- 使用Python脚本,创建训练集txt为train_list.txt并写入内容,随后验证集txt名为val_list.txt并存储。完成步骤,确保文件生成和显示信息准确。
train_list.txt 生成成功! val_list.txt 生成成功!登录后复制
4 安装环境
解压我放在work目录下已经修改好的PaddleClas.zip文件 In [8]
!unzip -qo ./work/PaddleClas.zip -d ./PaddleClas/登录后复制 In []
# 更新一下依赖!pip install --upgrade -r PaddleClas/requirements.txt -i https://mirror.baidu.com/pypi/simple登录后复制 In [10]
%cd PaddleClas !ls登录后复制
/home/aistudio/PaddleClas dataset __init__.py output ppcls result.txt tools hubconf.py MANIFEST.in paddleclas.py requirements.txt setup.py work登录后复制
5 移动数据集和修改配置文件
5.1 移动数据集
In [11]
!mkdir ../data/Art/img登录后复制 In [12]
!mv ../data/Art/train/* ../data/Art/img !mv ../data/Art/test/* ../data/Art/img登录后复制 In [13]
# 移动list.txt文件到对应目录!mv ../all_list.txt ../data/Art !mv ../train_list.txt ../data/Art !mv ../val_list.txt ../data/Art/登录后复制 In [14]
# 移动标签文件到对应目录!cp ../data/Art/name_list.txt ../data/Art/label_list.txt登录后复制
5.3 移动修改好的配置文件到对应目录
In [15]
!cp ../work/ResNet50_vd.yaml ./ppcls/configs/quick_start/ResNet50_vd.yaml !cp ../work/VGG16.yaml ./ppcls/configs/ImageNet/VGG/VGG16.yaml !cp ../work/PPLCNetV2_base.yaml ./ppcls/configs/ImageNet/PPLCNetV2/PPLCNetV2_base.yaml登录后复制
5.4 使用已经训练好的权重(可选)
若使用已经训练好的权重,可以执行这部分语言,并且跳过下面模型训练部分 In [16]
!mkdir output/ !mkdir output/ResNet50_vd/ !mkdir output/VGG16/ !mkdir output/PPLCNetV2_base/登录后复制
mkdir: 无法创建目录"output/": 文件已存在 mkdir: 无法创建目录"output/ResNet50_vd/": 文件已存在 mkdir: 无法创建目录"output/VGG16/": 文件已存在 mkdir: 无法创建目录"output/PPLCNetV2_base/": 文件已存在登录后复制 In [17]
!cp ../work/ResNet50_vd/best_model.pdparams ./output/ResNet50_vd/ !cp ../work/VGG16/best_model.pdparams ./output/VGG16/ !cp ../work/PPLCNetv2/best_model.pdparams ./output/PPLCNetV2_base/登录后复制
6 模型训练
若使用上面已经训练好的模型,可以跳过模型训练部分
以`work/PPLCNetVbase.yaml`为例,针对单卡训练场景下的模型配置调整,特别是当引入预训练模型时,学习率应降低至原值的四分之一到五分之一。与此同步,增加的线程数应设置为简化训练过程。Art数据集包含作者,因此对应类别数量应该设为标签信息应保存在`class_id_map_file: /home/aistudio/data/Art/label_list.txt`中,并确保与之匹配的标签文本配置妥当。- TopkAcc指标设置为[,这将有助于更好地评估模型性能。
# global configsGlobal: checkpoints: null pretrained_model: ../work/PPLCNetv2/PPLCNetV2_base_pretrained output_dir: ./output/ device: gpu save_interval: 1 eval_during_train: True eval_interval: 1 epochs: 480 print_batch_step: 10 use_visualdl: False # used for static mode and model export image_shape: [3, 224, 224] save_inference_dir: ./inference# model architectureArch: name: PPLCNetV2_base class_num: 49# loss function config for traing/eval processLoss: Train: - CELoss: weight: 1.0 epsilon: 0.1 Eval: - CELoss: weight: 1.0Optimizer: name: Momentum momentum: 0.9 lr: name: Cosine learning_rate: 0.016 warmup_epoch: 5 regularizer: name: 'L2' coeff: 0.00004# data loader for train and evalDataLoader: Train: dataset: name: MultiScaleDataset image_root: ../data/ cls_label_path: ../data/Art/train_list.txt transform_ops: - DecodeImage: to_rgb: True channel_first: False - RandCropImage: size: 224 - RandFlipImage: flip_code: 1 - NormalizeImage: scale: 1.0/255.0 mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225] order: '' # support to specify width and height respectively: # scales: [(160,160), (192,192), (224,224) (288,288) (320,320)] sampler: name: MultiScaleSampler scales: [160, 192, 224, 288, 320] # first_bs: batch size for the first image resolution in the scales list # divide_factor: to ensure the width and height dimensions can be devided by downsampling multiple first_bs: 500 divided_factor: 32 is_training: True loader: num_workers: 0 use_shared_memory: True Eval: dataset: name: ImageNetDataset image_root: ../data/ cls_label_path: ../data/Art/val_list.txt transform_ops: - DecodeImage: to_rgb: True channel_first: False - ResizeImage: resize_short: 256 - CropImage: size: 224 - NormalizeImage: scale: 1.0/255.0 mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225] order: '' sampler: name: DistributedBatchSampler batch_size: 64 drop_last: False shuffle: False loader: num_workers: 0 use_shared_memory: TrueInfer: infer_imgs: ../data/Art/img/974.jpg batch_size: 10 transforms: - DecodeImage: to_rgb: True channel_first: False - ResizeImage: resize_short: 256 - CropImage: size: 224 - NormalizeImage: scale: 1.0/255.0 mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225] order: '' - ToCHWImage: PostProcess: name: Topk topk: 5 class_id_map_file: /home/aistudio/data/Art/label_list.txtMetric: Train: - TopkAcc: topk: [1, 49] Eval: - TopkAcc: topk: [1, 49]登录后复制
默认使用已经训练好的权重,如若自己训练模型,取消下面部分代码注释
6.1训练ResNet50_vd模型
In [18]
#!python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml -o Global.device=gpu登录后复制
6.2练VGG16模型
In [19]
#!python3 tools/train.py -c ./ppcls/configs/ImageNet/VGG/VGG16.yaml -o Global.device=gpu登录后复制
6.3训练PPLCNetV2模型
In [20]
#!python3 tools/train.py -c ./ppcls/configs/ImageNet/PPLCNetV2/PPLCNetV2_base.yaml -o Global.device=gpu登录后复制
7 模型评估
7.1 ResNet50_vd模型评估
In []
!python tools/eval.py \ -c ./ppcls/configs/quick_start/ResNet50_vd.yaml \ -o Global.pretrained_model=./output/ResNet50_vd/best_model登录后复制
最新研究表明,ResNetvd在验证集上的准确率为,误差范围有限,接近目标值。
7.2 VGG16模型评估
In []
!python tools/eval.py \ -c ./ppcls/configs/ImageNet/VGG/VGG16.yaml \ -o Global.pretrained_model=./output/VGG16/best_model登录后复制
最新研究成果显示,VGG型在验证集上的表现优异,达到的高准确率。尽管如此,实际应用中仍需注意误差与识别精度之间的平衡,并期待未来技术的进步和完善。
7.3 PPLCNetV2模型评估
In []
!python tools/eval.py \ -c ./ppcls/configs/ImageNet/PPLCNetV2/PPLCNetV2_base.yaml \ -o Global.pretrained_model=./output/PPLCNetV2_base/best_model登录后复制
最终证明了PPLCNetV型在测试集上的表现超过了,实际效果略高于此值。
8 艺术品作者识别
从网上上下载一副Edgar Degas的作品进行识别

8.1 多模型分别进行预测
首先使用PaddleClas加载预先训练好的模型。接着,通过这三个预训练模型分别对输入图片进行特征提取。最后,将它们的预测结果整合到一起,并将其保存至名为result.txt的文件中,以便于后续的多模型集成学习。
# 修改Infer.infer_imgs为待识别艺术品图片路径file = open("result.txt", 'w').close() !python3 tools/infer.py \ -c ./ppcls/configs/quick_start/ResNet50_vd.yaml \ -o Infer.infer_imgs=../images/EdgarDegas.jpeg \ -o Global.pretrained_model=output/ResNet50_vd/best_model !python3 tools/infer.py \ -c ./ppcls/configs/ImageNet/VGG/VGG16.yaml \ -o Infer.infer_imgs=../images/EdgarDegas.jpeg \ -o Global.pretrained_model=./output/VGG16/best_model !python3 tools/infer.py \ -c ./ppcls/configs/ImageNet/PPLCNetV2/PPLCNetV2_base.yaml \ -o Infer.infer_imgs=../images/EdgarDegas.jpeg \ -o Global.pretrained_model=./output/PPLCNetV2_base/best_model登录后复制
从result.txt文件中分别读取每个模型对艺术作品的识别结果 In [25]
SaveList=[]with open("result.txt", "r", encoding='utf-8') as file: for line in file: line = line.strip('\n') SaveList.append(line) file.close() list_temp=[SaveList[0],SaveList[1],SaveList[2]]print("ResNet50_vd模型预测结果:{0},VGG16模型预测结果:{1},PPLCNetV2模型预测结果:{2}".format(SaveList[0],SaveList[1],SaveList[2]))登录后复制
ResNet50_vd模型预测结果:Edgar Degas,VGG16模型预测结果:Edgar Degas,PPLCNetV2模型预测结果:Edgar Degas登录后复制
8.2 多模型融合部分
通过多模型集成学习能够克服单个模型的局限性,实现更准确的识别效果。这种方法通常使用硬投票的方式进行决策,此外还可以尝试更高效的方法来提高集成学习的效果。例如,在[中进行了相关研究和应用。
import collections m=collections.Counter(list_temp) temp_max,key_max=0,0for k,v in m.items(): if v>temp_max: temp_max=v key_max=kprint("多模型集成学习后的预测结果是:"+key_max)登录后复制
多模型集成学习后的预测结果是:Edgar Degas登录后复制
可见三个模型都给出了一样的预测结果,最后多模型集成的预测结果也是Edgar Degas,符合预期 In []
# 修改Infer.infer_imgs为待识别艺术品图片路径file = open("result.txt", 'w').close() !python3 tools/infer.py \ -c ./ppcls/configs/quick_start/ResNet50_vd.yaml \ -o Infer.infer_imgs=../images/Rembrandt.jpeg \ -o Global.pretrained_model=output/ResNet50_vd/best_model !python3 tools/infer.py \ -c ./ppcls/configs/ImageNet/VGG/VGG16.yaml \ -o Infer.infer_imgs=../images/Rembrandt.jpeg \ -o Global.pretrained_model=./output/VGG16/best_model !python3 tools/infer.py \ -c ./ppcls/configs/ImageNet/PPLCNetV2/PPLCNetV2_base.yaml \ -o Infer.infer_imgs=../images/Rembrandt.jpeg \ -o Global.pretrained_model=./output/PPLCNetV2_base/best_model登录后复制
8.3 多模型集成学习的纠正预测
接下来测试一下从网上获取的Rembrandt的作品

当你使用ResNetvd、PPLCNetVVGG三个模型来识别作品时,它们的预测结果如下:ResNetvd模型预测是Rembrandt,PPLCNetV型也预测是Rembrandt,而VGG型则预测为Titian。然而,根据文章所述,VGG型实际上应得到的是Rembrandt的结果。这说明VGG型在预测时出现了错误。尽管VGG型单独出现错误预测的可能性,通过多模型集成学习技术(如ResNetvd和PPLCNetV可以有效纠正这些错误,从而最终得到正确的预测结果:Rembrandt。由此可见,采用多模型集成学习的方法在识别效果上具有显著提升作用。最后,为了进一步验证模型的综合性能,即使VGG型单独存在错误预测的可能性,其他模型也能通过相互补充帮助来矫正问题,保证了整体识别的准确性。注释:[ 是文章中提到的具体实验或讨论部分。
```pythonimport collections SaveList=[]with open('result.txt', 'r', encoding='utf-) as file: for line in file: line = line.strip('\n') SaveList.append(line) file.closelist_temp=[SaveList[,SaveList[,SaveList[]print(fResNetvd模型预测结果:{SaveList[},VGG型预测结果:{SaveList[},PPLCNetV型预测结果:{SaveList[})m=collections.Counter(list_temp) temp_max,key_max=or k,v in m.items: if v>temp_max: temp_max=v key_max=k print(f多模型集成学习后的预测结果是:{key_max}) ```
ResNetvd预测:Rembrandt;VGG测:Titian;PPLCNetV测:Rembrandt。集成后,预测为Rembrandt。
以上就是【AI达人特训营】多模型集成学习的艺术作品作者识别的详细内容,更多请关注其它相关文章!
热门推荐
-
【AI达人特训营】多模型集成学习的艺术作品作者识别该项目采用了多模型集成学习技术来识别艺术家。使用PaddleClas对ResNetvd、VGGPPLCNetV模型进行训练,并基于一个包含艺术家和图片的Art数据
-
【AI达人创造营第二期】 一文读懂双向循环神经网络 BRNN本研究全面解析了RNN与BRNN的基础知识、架构及各自的利弊,并通过一个案例展示了基于vanillaRNN、LSTM、BiLSTM、GRU以及BiGRU模型的谣言
-
【AI达人特训营第三期】:PaddleSeg助力自动驾驶场景分割本文介绍使用PaddleSeg工具处理基于ADE数据集场景解析的过程。首先,解压相关软件及数据集,并加载并预处理它们
-
永劫无间无法进入大厅 老司机教你几招,秒变排队达人铁友们,不要急着吐槽“永劫无间无法进入大厅”的困扰了!别忘了喝杯热茶暖暖身子,我们坐下来好好聊聊。今天,我打算把这事儿说透彻,绝对干货满满,让你看得懂、记得住
-
无需密钥 / 控制台:GitHub 用户现可免费使用 / 部署 GPT-4o、DeepSeek-R1 等 AI 模型 A新闻速递!GitHub今日宣布开源模型API,对所有用户免费开放,支持OpenAI规范,带来极大便利
-
多项力压 Grok 4、OpenAI o3,谷歌推出 Gemini 2.5 Deep Think 模型谷歌今日宣布GeminiDeepThink模型已正式推出,并可在GoogleAIUltra订阅者应用中访问,表现远超OpenAI的oxAI的Grok在多项基准测试
-
FLUX.1 Krea [dev] 黑森林联合Krea AI开源的文生图模型FLUX.1Krea[dev]是什么flux.krea[dev]是由黑森林实验室联合KreaAI共同开发的新一代文本生成图像模型
-
如何使用BigDL训练AI模型 BigDL分布式深度学习框架入门bigdl是一个基于ApacheSpark的分布式深度学习框架,非常适合熟悉Spark或需在大数据环境下进行深度学习的人群
-
如何将豆包AI接入企业办公系统 豆包AI企业级集成应用指南集成豆包AI到企业办公系统的核心步骤包括以下几个环节:首先,明确业务目标并选择合适的应用场景;其次,梳理豆包AI的API能力,并调用相应的适配接口;接着,打通数据
-
Gemini如何接入自动驾驶系统 Gemini车载AI集成方案在这篇文章中,我将详细介绍如何将Gemini接入您的自动驾驶系统,为您提供清晰的集成路线图。我们将探讨Gemini在汽车智能化中的应用案例,并深入讲解实现这一功能
-
集成Steam的Xbox界面疑似意外泄露 真的要来了最近,在微软官网的一篇名为“让十亿玩家走进游戏的大门”的官方博客中,他们详细阐述了自己成功的策略,如跨平台玩法和订阅服务等
-
集成镜像文件是什么集成镜像文件的优势集成镜像文件的主要优点是便捷性和高效性。简化安装过程,节省时间并减少出错可能。确保系统的兼容性和稳定性,避免后期的兼容问题
-
背单词最好用的app是哪个 学习模式多样的背单词软件介绍那么,在学习语言的过程中,丰富词汇量是大家掌握英语的基本条件。因此,市面上用来背单词的最佳应用是什么呢?市面上的背单词应用程序种类繁多,它们可以满足不同用户的需求
-
《不,我要学习》 手残和大佬的体验两极分化在当下激烈竞争的游戏市场中,独立游戏以其独特的设定与挑战性玩法吸引着大量玩家的关注。然而,随着游戏热度攀升,出现了对“手残党”和“技术大佬”体验极端分化的问题
-
《传说之下》作者新作《三角符文》IGN 9分 剧情精彩绝伦 配乐一流贡献者:Tobyfox#发布时间:#游戏类型:动作角色扮演游戏(RPG)#现在已发售的游戏为:三角符文(Deltarune),游戏包含,后续章节将免费更新
-
为避免违反日内瓦公约 《传说之下》作者新作《三角符文》做出修改传说之下作者TobyFox的新书三角符文现已上市;官方正在努力解决游戏中常见问题。Steam商城界面>>>最近,游戏推出了首个热修复补丁,解决了
-
小鸡宝宝考考你:我国古代小说《儒林外史》的作者是谁 蚂蚁庄园今日答案5月6日蚂蚁庄园5月6日答案是什么?蚂蚁庄园完成每日答题可以获得18g饲料,每天会有各种题目出给大家,那么蚂蚁庄园小鸡宝宝考考你:我国古代小说儒林外史的作者是谁的答案是什
-
番茄免费小说作者收益计算方法一览-番茄免费小说如何对稿费收入进行结算番茄免费小说若何对稿费收益进行结算?有好多小说平台上都有专属的作者签约,他们有着自个的稿费结算式样,每个平台都是不一样,按照规则结算完成后就会将金额发放给作者们,
-
小米米家扫拖机器人 5 Pro 预售:AI 三摄全景识别,售 3999 元起xiayx8月1日消息,小米米家扫拖机器人5Pro今日1点在京东等平台预售,经典水箱版本3999元,薄嵌上下水版4699元,叠加国补后分别为3399.15元、39
-
沃尔沃全新 XC70 车机系统公布:四音区独立识别、AI 大模型上车,8 月预售今日,吉利宣布推出全新车型星越L智能驾驶辅助系统,通过多种方式提升行车安全和便利性。新车现已开始接受预订,未来将提供更多的配置选择和更好的用户体验
-
vivo X200 Ultra有支持3D人脸识别吗近年来,人脸识别技术越来越普及,几乎无处不在。尤其是在手机领域中,“”识别功能已经成为高端机型的标准配置,例如知名厂商vivoX系列
-
vivo S30 Pro mini是什么类型的指纹识别在解锁体验方面,尽管指纹是一种常用且备受重视的方式,但不同的手机品牌对于指纹识别技术的选择和配置是有所区别的