V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
OysterQAQ
V2EX  ›  分享创造

ACG2vec 系列之 Pix2Score——基于深度学习的动漫插图打分模型

  •  
  •   OysterQAQ ·
    OysterQAQ · 2023-07-25 14:41:54 +08:00 · 989 次点击
    这是一个创建于 472 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ACG2vec 系列之 Pix2Score——基于深度学习的动漫插图打分模型

    简介

    在线体验: https://cheerfun.dev/acg2vec/#Pix2Score

    github 主仓库地址( tensorflow 的 savemodel 格式可以在 release 中下载): https://github.com/OysterQAQ/ACG2vec (求 star ~)

    基于resnet101对插画的浏览数、收藏数、情色级别的分类预测,以 1e-3 的学习率在动漫插画数据集下进行训练,输入尺寸为 224x224 ,输出字典为

    {
    	"bookmark_predict": {
    		"0": "0-10",
    		"1": "10-30",
    		"2": "30-50",
    		"3": "50-70",
    		"4": "70-100",
    		"5": "100-130",
    		"6": "130-170",
    		"7": "170-220",
    		"8": "220-300",
    		"9": "300-400",
    		"10": "400-550",
    		"11": "550-800",
    		"12": "800-1300",
    		"13": "1300-2700",
    		"14": "2700-∞"
    	},
    	"view_predict": {
    		"0": "0-500",
    		"1": "500-700",
    		"2": "700-1000",
    		"3": "1000-1500",
    		"4": "1500-2000",
    		"5": "2000-2500",
    		"6": "2500-3000",
    		"7": "3000-4000",
    		"8": "4000-5000",
    		"9": "5000-6500",
    		"10": "6500-8500",
    		"11": "8500-12000",
    		"12": "12000-19000",
    		"13": "19000-35000",
    		"14": "35000-∞"
    	},
    	"sanity_predict": {
    		"0": "0-2",
    		"1": "2-4",
    		"2": "4-6",
    		"3": "6-7",
    		"4": "7-∞"
    	}
    }
    

    预览

    image-20230725131144887

    image-20230725131211563

    image-20230725131223659

    image-20230725131238024

    image-20230725131401996

    项目过程中解决的问题

    • 样本类别比例失衡 将元数据导入 clickhouse 查找 n 分位数来重新划分分段范围
    • 数据集过大 无法一次读入内存,使用 generator 逐步读取
    • 训练链路中 io 瓶颈 取数据与预处理数据造成瓶颈,将 dataset 导出成 tfrecord 二进制格式(实测可以跑满机械硬盘连续读写值,大概是 250M/s )
    • 开启混合精度导致 loss nan 调整学习率
    • 多任务梯度带偏 多任务存在简单任务与复杂任务,学习到后期,网络中的权重更新的梯度被困难任务 loss 和简单任务 loss 的加和共同所影响,为了维持简单任务的 loss 会导致复杂任务 loss 下降缓慢,后期通过手动调整 loss 权重得到改善,也实现了 pcgrad 但是没有什么改善
    • 模型训练正常推理输出 nan 排查出 bn 层 moving_mean 与 moving_variance 权重异常(这也是为什么训练正常推理异常的原因),重新使用对应层初始化器初始化异常权重后,继续训练(之前训练拟合进度慢的问题也和这个有关),出现 nan 权重大概是因为混合精度造成的,详见 https://oysterqaq.com/archives/1463
    • 部署的预处理一致性 在模型本体集成 base64 图片预处理层,无需顾虑预处理行为( resize )不同导致的推理结果差异
    charslee013
        1
    charslee013  
       2023-07-25 18:41:59 +08:00
    试了一下,发现瑟瑟程度跟浏览数、收藏数成正相关 😂
    OysterQAQ
        2
    OysterQAQ  
    OP
       2023-07-25 18:48:19 +08:00
    @charslee013 可能有微妙的联系,但是不绝对哈
    tyzandhr
        3
    tyzandhr  
       2023-07-26 11:43:28 +08:00 via Android
    pixiv 应该请你去优化他们的破搜索引擎
    OysterQAQ
        4
    OysterQAQ  
    OP
       2023-07-26 11:49:59 +08:00 via iPhone
    @tyzandhr 啊哈哈哈,半年后我会开源现代化的插画推荐系统,到时候是不是得请我去开发他们的推荐系统🐶
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2875 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:35 · PVG 10:35 · LAX 18:35 · JFK 21:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.