当前位置: 首页 > news >正文

维基艺术图片: 构建模型 (3)

完整的项目地址: https://github.com/buxuele/wiki_art

1. 其他地方

todo

  • 此时最大的问题, 即,爬虫,为什么一直在搜集网页内容,但是就是下载图片??令人蛋疼!
  • 其实我觉得,前面爬虫有问题, 应该使用 uuid 来命名!!!
  • 文件名太长了,导致匹配出错。

做的过程

聊天记录:https://aistudio.google.com/prompts/1F2vFWo3KMz5ZQ-TTxJ5dPWlf2mJa7qbI

我决定,先不加 元信息。

直接使用 图片本身来训练。
先试试看效果。

整体思路和计划

  1. 爬虫,爬取 大概 1000 张图片,并保存到本地。
  2. 标注,即删掉不喜欢的图片
  3. 训练模型。

人人都在追着 AI 跑。
如果赶不上火车,那么蹬着我的摩托车,走小路,走斜坡, 照样能跑。

scrapy 文件夹的名称,

外层文件夹:可以改名,但改了要同步更新 scrapy.cfg 的 project 字段。
内层文件夹:不建议改名,因为 Scrapy 默认按模块路径加载,容易出错。

对比: 小模型 vs 大模型

  • 你让高中生(小模型)做100套题(多训练几轮),他能把高中的知识点掌握得滚瓜烂熟,考到很高的分数,比如95分。
  • 你让大学教授(大模型)也来做这套题,他可能只看了几眼(少训练几轮),就已经理解了背后的所有原理,轻松考到99分。

2. 过程记录

在完成了数据标注,并准备好goodbad两个分类明确的图片文件夹后,我们进入了项目最核心的阶段:选择、训练并评估一个能理解我个人审美的AI模型。

一、 初步尝试与遇到的挑战

我们最初的计划是采用一个经典且强大的预训练模型,如eva02_base,来进行微调(Fine-tuning)。在训练过程中,我们遇到了几个典型的机器学习问题:

  1. 数据不平衡:我“喜欢”的图片数量(正样本)远少于“不喜欢”的图片(负样本)。为了解决这个问题,我们在损失函数中引入了“类别权重(Class Weights)”,在算法层面给予了少数类(good)更高的“话语权”,从而迫使模型更努力地去学习如何识别我喜欢的图片。

  2. 过拟合(Overfitting):在训练的早期阶段,模型的验证集准确率一度达到一个高峰,但随着训练的继续,准确率反而开始下降。这表明模型已经学完了普适的规律,开始去记忆训练集里那些偶然的、不具推广性的细节。我们通过引入“早停(Early Stopping)”机制——即在验证集性能不再提升时自动停止训练——来确保我们能保存下模型性能最好的那个状态。

  3. 硬件瓶颈:在探索更强大的模型时,我们发现,像vit_large_patch14_..._dinov2这样的“巨兽级”模型,即使只是很小的批量大小(Batch Size),它所需要的显存也超出了我12G显卡的承受极限。这让我们意识到,选择模型不能只看理论性能,还必须考虑硬件资源的现实约束。

二、 核心任务:模型选型与对比

为了找到最适合我们任务的“引擎”,我决定进行一次“模型擂台赛”,系统性地对比几个备选模型的实际表现。我从Hugging Face的timm模型库中,挑选了几个备受推崇的、基于Vision Transformer(ViT)架构的模型。

  • timm模型库地址:https://huggingface.co/collections/timm/timm-backbones-6568c5b32f335c33707407f8

我的对比主要围绕两个核心模型展开:

  1. facebook/dino-vitb16 (DINO Base):作为自监督学习的开创性工作,它对图像的结构和语义有深刻的理解。
  2. timm/vit_base_patch14_dinov2.lvd142m (DINOv2 Base):作为DINO的“究极进化版”,它在更庞大、更多样化的数据集上进行了预训练,理论上拥有更强的泛化能力。

我为这两个模型分别编写了独立的、公平的训练脚本,在完全相同的硬件、数据和训练参数下,对它们进行了微调。

三、 最终选择:vit_base_patch14_dinov2.lvd142m

经过多轮的训练和评估,实验结果清晰地表明:

timm/vit_base_patch14_dinov2.lvd142m 是本次选型中表现最好的模型。

  • 性能表现:在最终的测试中,DINOv2 Base模型的验证集准确率最高达到了近80%,显著优于DINO Base模型(约74%)。这证明了它更强大的预训练权重和更先进的架构,确实转化为了在我的个人审美分类任务上更强的实际性能。
  • 资源平衡:虽然它对显存的占用不小(在BATCH_SIZE=8时,占用了我12G显存中的9G),但它依然在我的硬件能力范围之内,实现了性能与资源消耗的最佳平衡。
  • 社区认可度:它在Hugging Face上每月超过百万的下载量,也从侧面印证了其作为顶级视觉特征提取器的行业地位。

因此,我最终决定,将timm/vit_base_patch14_dinov2.lvd142m作为我们整个项目的基石模型,后续所有的预测和应用,都将基于这个经过我个人数据微调过的、强大的AI大脑来展开。

http://www.dtcms.com/a/276874.html

相关文章:

  • 应用层协议和JSON的使用
  • 文心大模型4.5开源测评:轻量化部署实践与多维度能力验证
  • 贝尔量子实验设想漏洞
  • 云服务器的基础使用
  • [Dify]-基础入门8- 使用 Dify 创建文档问答机器人(零代码实现)
  • 39.Sentinel微服务流量控制组件
  • .NET + WPF框架开发聊天、网盘、信息发布、视频播放功能
  • [Subtitle Edit] 字幕格式处理 | .Net依赖管理(NuGet)
  • opencv python 基本操作
  • 前端面试十二之vue3基础
  • redis汇总笔记
  • 日志系统 on Linux C/C++
  • UE5多人MOBA+GAS 21、给升龙添加连段攻击,从角色的按下事件中传递事件给GA
  • Action-Agnostic Point-Level Supervision for Temporal Action Detection
  • 一扇门铃,万向感应——用 eventfd 实现零延迟通信
  • QCustomPlot绘图保存成PDF文件
  • 网络安全的基本练习
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十九天
  • 行测速算之假设分配法
  • ROS2中的QoS(Quality of Service)详解
  • v-show和v-if的区别
  • 算法复杂度分析:大O表示法详解
  • 婚后才明白,原来结婚真需要一点冲动!
  • 编程与数学 03-001 计算机组成原理 04_非数值数据表示与校验码
  • 解码冯・诺依曼:操作系统是如何为进程 “铺路” 的?
  • 002_Claude模型与定价
  • java进阶(二)+学习笔记
  • Qt 3D模块加载复杂模型
  • Cesium初探-CallbackProperty
  • 开发语言中关于面向对象和面向过程的笔记