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

查看 19|回复 0
作者:OysterQAQ   
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-∞"
        }
}
预览





项目过程中解决的问题
  • 样本类别比例失衡 将元数据导入 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 )不同导致的推理结果差异
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部