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

[开源]ACG2Vec——ACG 相关深度学习应用(以图搜图、插画评分、文本搜图等)

  •  8
     
  •   OysterQAQ ·
    OysterQAQ · 278 天前 · 6564 次点击
    这是一个创建于 278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ACG2vec全称为Anime Comics Games to vector 。本 repo 会持续维护一些基于二次元相关的深度学习领域实践与探索。

    在线预览(目前包含文本搜索、以图搜图、文本搜图、图片分数预测):https://cheerfun.dev/acg2vec/

    开源仓库:https://github.com/OysterQAQ/ACG2vec

    演示页前端开源仓库:https://github.com/wewewe131/acg2vec-frontend

    以上两个仓库求个 star QAQ🌟🌟🌟

    目前模块包括:

    • model:深度神经网络模型模块,目前包括

      • acgvoc2vec:基于从维基百科动漫列表、萌娘百科、Bangumi 、pixiv 、AnimeList 等来源获取清洗处理抽取的 510w 语句对微调的 sentence-transformers 模型,生成二次元相关文本的特征向量,用于各种下游任务(标签推荐,标签搜索,推荐系统等)

        可以使用 Huggingface 在线体验:https://huggingface.co/OysterQAQ/ACGVoc2vec

      • dclip:使用 danburoo2021 数据集对 clip ( ViT-L/14 )模型进行微调。

        可以使用 Huggingface 在线体验:https://huggingface.co/OysterQAQ/DanbooruCLIP

      • pix2score:基于 resnet101 的多任务模型,用于预测动漫插图的收藏数、浏览数与琴瑟级别

      • illust2vec:从DeepDanbooru模型去除预测头并对末尾层做均值池化的图片语义特征抽取模型

    • webapp:对外提供 web 服务模块。目前包括开箱即用的二次元插画标签预测服务、以图搜图服务、插画特征抽取服务、文本特征抽取服务

    • docker:基于容器化的部署模块,包括了部署所需要的配置文件与资源文件

    💡预览

    语义文本搜索

    image-20230725185441532

    语义图像搜索

    image-20230725190057379

    插画综合评分预测

    image-20230725185608823

    以图搜图

    image-20230725185702808

    42 条回复    2023-08-06 09:09:16 +08:00
    zoharSoul
        1
    zoharSoul  
       278 天前
    大佬 nb!!!
    OysterQAQ
        2
    OysterQAQ  
    OP
       278 天前   ❤️ 1
    @zoharSoul 还是比较浅层的一些实践,当作研一一年学习的总结😁
    tanranran
        3
    tanranran  
       277 天前
    研一就这么强了,大佬牛批
    OysterQAQ
        4
    OysterQAQ  
    OP
       277 天前
    @tanranran 研一要结束了,还有一些实践在论文中,还没发出去所以没办法开源
    tanranran
        5
    tanranran  
       277 天前
    @OysterQAQ #4 大佬太适合读博了,继续深造下去吧
    OysterQAQ
        6
    OysterQAQ  
    OP
       277 天前
    @tanranran 不考虑读博了,现在深度学习应用科研消耗不是一般人能承受的了,而且更喜欢工业界的一些东西(实用,有意义),学术界上缝合的太多了(包括我自己)。而且硕士运气好老师挺不错的,也见到很多其他的老师,读博还得再 roll 一次🐶
    Aloento
        7
    Aloento  
       277 天前
    太强了,愿意贡献一张 A100 给大佬助助兴
    OysterQAQ
        8
    OysterQAQ  
    OP
       277 天前
    @Aloento 感谢大佬,不过目前没啥需求了,也没想到什么合适的新项目。以上项目主要是数据集都很大 需要本地存储,我自己组的 3080+3090 ,本地机械 80t ,有很大一部分都被数据集占了(特别是为了训练时候不预处理,提前存储好二进制的已经预处理好的数据集文件)
    LancerComet
        9
    LancerComet  
       277 天前
    acgvoc2vec 有点意思,我给自己做了一套收图的图库跑在了群晖上,图片有 tag 和 tag 同义词,不过同义词都是手动关联的,acgvoc2vec 可以做到自动化;另外 dclip 是不是也可以反着来,通过图片生成 tag
    OysterQAQ
        10
    OysterQAQ  
    OP
       277 天前
    @LancerComet dclip 通过图片生成 tag 可以用向量检索方式实现,不过类似 BLIP 这种生成式可能更好一些
    xiaoxiao168
        11
    xiaoxiao168  
       276 天前
    @OysterQAQ 有考虑像 生成 模特儿吗? 有些公司在搞了, 更新不同产品 ,目标消费者 生成不同的模特,这个算“工业界”吗? 不是很懂,
    (有兴趣做(跨境)电商的朋友 欢迎交流
    https://discord.gg/VjWJbTjNWQ
    跨境电商 合作共赢)
    maocat
        12
    maocat  
       276 天前
    #11 @Livid 速 ban
    DeltaSix
        13
    DeltaSix  
       276 天前
    @OysterQAQ 谢谢,我需要研究研究,我的水平也就是简单调用一下 Resnet 跑跑识别什么的😢
    LancerComet
        14
    LancerComet  
       276 天前
    @OysterQAQ

    简单试了一下 acgvoc2vec 还行,给自己的小图库晒同义词合并是够了,随便试了一下:

    The similarity between '赤井心' and '赤井はあと' is 0.7822584509849548
    The similarity between '虚拟主播' and 'VTB' is 0.5672250986099243
    The similarity between '虚拟主播' and 'VTuber' is 0.5994329452514648
    The similarity between 'VTuber' and 'VTB' is 0.7549457550048828
    The similarity between 'JK' and '高中女生' is 0.6553347706794739
    The similarity between 'Maid' and '女仆' is 0.7300522327423096

    不过还没想好怎么集成,目前只想到做成选择某个标签的时候将评分高的同义词都列出来然后自己筛选,平时只需要往里填同义词之后再筛选就可以,感谢楼主开源

    PS:果然最宝贵的还是数据,只看到一条数据库 connect string
    OysterQAQ
        15
    OysterQAQ  
    OP
       276 天前
    @LancerComet 统计科学是这样的,数据是基础😬
    wentx
        16
    wentx  
       275 天前
    啥时候可以以图搜片?
    OysterQAQ
        17
    OysterQAQ  
    OP
       275 天前
    @wentx 有数据集就可以做
    charslee013
        18
    charslee013  
       275 天前
    赞美大佬开源~

    有个问题想请教一下,我自己搭建试了一下,发现 web-app 里面没有 `/similarityImages` 路由
    这是要自己搭建一个向量库存储全部图片的特征,然后根据上传图片的特征值(阈值为 0.5)来做匹配么 🤨
    OysterQAQ
        19
    OysterQAQ  
    OP
       275 天前
    @charslee013 yes 本来有打算集成,但是太臃肿了,自己搭建更加自由一些。
    OysterQAQ
        20
    OysterQAQ  
    OP
       275 天前
    @charslee013 额 看错了 相似度搜索没有阈值的说法,是直接搜出 topk 相似的
    lopssh
        21
    lopssh  
       273 天前 via Android
    谢谢分享。
    zzzlight
        22
    zzzlight  
       271 天前
    厉害的,虽然我研究生是做向量搜索的,曾经也有过做这个的想法,可惜行动力不足+实验室折磨导致彻底被恶心到了。楼主研一虽然都是开源库,把这一套搞出来真的很不容易了。
    OysterQAQ
        23
    OysterQAQ  
    OP
       271 天前
    @zzzlight 感谢认可🙏,没有啥模型创新能力,喜欢用受得住工业界检验的,例如分类模型用 ResNet 而不去魔改 vit 之类的。可能代码上有帮助的就是一些模型应用经验,例如大的生产数据集如何去训练,以及大数据集训练过程出现的问题解决🥳。
    zzzlight
        24
    zzzlight  
       271 天前
    这玩意核心还是数据,我还记得以前实验室师弟高强度爬数据的日子 5555555555 。以及被硬盘爆满支配的恐惧。
    zzzlight
        25
    zzzlight  
       271 天前
    @OysterQAQ resnet 够用了(这方面真的越经典的越好用,确实是有原因的,很多灌水的或者好像很火的论文在工业应用上是大粪)
    zzzlight
        26
    zzzlight  
       271 天前
    检索上 milvus 的集成了不少算法,可以都试试(最后会发现还是经典的 HNSW 最好用)。工业上主流还是 ivfpq 、HNSW 这些,milvus 好像把 diskann 这种超大规模的集成了,但是还是不如经典的 HNSW (听说 milvus 最近魔改进 Diskann 了)。反正检索方面是这个情况。
    OysterQAQ
        27
    OysterQAQ  
    OP
       271 天前
    @zzzlight #26 我现在近似度量用的是预先 L2+dot ( milvus 文档示例也是这种方式)来等效 Cos Similarity 的方式,milvus 默认聚类索引好像是 faiss ,没有比较过 faiss 和 ann 的差别
    zzzlight
        28
    zzzlight  
       271 天前   ❤️ 1
    @OysterQAQ faiss 是 Facebook 的一个库,里面有常见的一些算法比如 pq 、ivfpq 、HNSW 这些,ann 是近似最近邻搜索的意思(现在换了个皮叫向量检索),faiss 是 ann 的搜索算法库。是这么个关系。
    zzzlight
        29
    zzzlight  
       271 天前   ❤️ 1
    除了用 faiss 的话,没事你可以看看 milvus 的配置,换换别的方法,底层用基于图的一些算法或者聚类量化+图结合的应该能提高不少检索精度(不过这个也看你数据量,上亿如果一亿数据还能勉强用用图,更多就只能 pq 算法(又叫基于量化的算法)或者他们的魔改版 diskann 了)。
    zzzlight
        30
    zzzlight  
       271 天前
    距离度量的话 l2 是没啥毛病的。
    @OysterQAQ
    zzzlight
        31
    zzzlight  
       271 天前
    检索上就是速度和精度的权衡,根据你的数据量、内存大小的取舍。
    zzzlight
        32
    zzzlight  
       271 天前
    向量检索是个大坑,发论文啥的就别碰这个了,对 c++实力要求太高了,而且很多现在的论文也是想尽办法水(属于水都不好水了)
    zzzlight
        33
    zzzlight  
       271 天前
    不过 milvus 上那些已经算是能用的算法可以都了解一下,就那么几篇论文,应该对你提高搜索精度上能有所帮助。名字就是我上面提到的一些,考虑到你主要估计是做学习的,省事可以直接看知乎,勤快点就看看论文原文。
    OysterQAQ
        34
    OysterQAQ  
    OP
       271 天前
    @zzzlight #33 好的,感谢前辈指路🥳
    zzzlight
        35
    zzzlight  
       271 天前   ❤️ 1
    解释一下为啥 milvus 里面有 faiss ,因为所谓的 milvus 核心的代码还是从 faiss 的开源库里面拿过来魔改的,反正现在就是啥开源啥拿来魔改缝合,我不知道你是用的哪个语言接口,里面提供的方法还有哪些,但是这个玩意核心还是用 c++实现的,提供的 mode 溯源的核心算法应该就是那几个(抱歉好久没看 milvus 的调用接口了,现在也不记得了)。
    LancerComet
        36
    LancerComet  
       270 天前
    @zzzlight 您好打扰了,想向您请教一下,我现在准备更新图库的相似图片搜索功能,之前用的是图片哈希这种传统方式,现在打算用 pgvector 直接在 postgres 上存储并索引 Resnet 152 的特征来实现这个功能,查询就打算直接用 pgvector 提供的 L2 distance 方法,非常简陋的一套,不知道您是否能评估类似这样的方案一般能应对多大的数据量的查询
    zzzlight
        37
    zzzlight  
       269 天前   ❤️ 1
    @LancerComet 你好,我稍微看了下 pgvector 的 git ,好像他们提供的 l2 距离的搜索是直接用的 faiss 的 ivfflat 方法(也就是是聚类大致分几个桶之后查询点和图库中数据暴力遍历的思路)(也叫倒排索引)。具体的 pgvector 的表现情况可以看: https://ann-benchmarks.com/pgvector.html 这里用常用的一些数据集(基本就是手写数字和一些经典图像转换过来的究极经典数据集)评估了 qps 情况,查询量可以参考这个的 qps ,理论上来说这些数据集都是被算法极大适应的数据类型,真实世界的查询情况只会差不会好(单由于你这个本来也就是暴力遍历,我估计会和真实环境下差不多)。大致达到 90 多的召回率在 10-100 的 qps 这个范围。
    LancerComet
        38
    LancerComet  
       269 天前
    @zzzlight 非常感谢您的指点,我去看看
    GoRoad
        39
    GoRoad  
       267 天前
    还记得当年认识你的时候 买你自己搭的服务 现在都这么强了
    OysterQAQ
        40
    OysterQAQ  
    OP
       267 天前
    @GoRoad 哈哈老哥,认识得有四年了吧,一直在折腾,没得安定下来
    fengxiangwan
        41
    fengxiangwan  
       267 天前
    生蚝!
    OysterQAQ
        42
    OysterQAQ  
    OP
       266 天前
    @fengxiangwan 大佬是哪位👀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1089 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:38 · PVG 02:38 · LAX 11:38 · JFK 14:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.