deepfacelab中文网

 找回密码
 立即注册(仅限QQ邮箱)
查看: 212|回复: 3

关于相似排序(直方图),以及为什么不能更快?

[复制链接]

5

主题

43

帖子

452

积分

初级丹师

Rank: 3Rank: 3

积分
452
 楼主| 发表于 6 天前 | 显示全部楼层 |阅读模式
星级打分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分:NAN  参与人数:0  我的评分:未评
本帖最后由 caiji132156 于 2025-7-11 13:24 编辑

原版代码:
在_internal\DeepFaceLab\mainscripts\Sorter.py 的类class HistSsimSubprocessor 中:

def __init__(self, img_list ):
    self.img_list = img_list
    self.img_list_len = len(img_list)

    slice_count = 20000
    sliced_count = self.img_list_len // slice_count

    if sliced_count > 12:
        sliced_count = 11.9
        slice_count = int(self.img_list_len / sliced_count)
        sliced_count = self.img_list_len // slice_count

    self.img_chunks_list = [ self.img_list[i*slice_count : (i+1)*slice_count] for i in range(sliced_count) ] + \
                           [ self.img_list[sliced_count*slice_count:] ]

    self.result = []
    super().__init__('HistSsim', HistSsimSubprocessor.Cli, 0)

#override
def process_info_generator(self):
    cpu_count = len(self.img_chunks_list)
    io.log_info(f'Running on {cpu_count} threads')
    for i in range(cpu_count):
        yield 'CPU%d' % (i), {'i':i}, {}



将图像列表按每份 slice_count=20000 的大小切分为多个小块,保存在 self.img_chunks_list 中;
若总块数超过 12 块,则调整分块策略以控制线程数量;
好处是使aligned图像大体上排序过渡自然,但是2万张图片要过渡自然其实没什么意义

这就是分块太粗,而导致排序效率低下。

如果分块太细,会出现块内排序准确,块间排序无序的情况

分块越细,块越多,全局排序的连贯性越差。
排序结果会呈现“局部有序、全局无序”的特点。

例如
块 A 的最后一张图像和块 B 的第一张图像可能是最相似的一对,但由于"不在同一块中,无法正确地将他们排序在一起"

分块大一点的

好处就是:
四不像的图片会被排在每一个块的最后面,通常这些图片都是因为风格差异大所以没有和他们相似的图片才被排除在最后
坏处就是:
2w张图片才一个块一个线程,排序效率慢

我们来假设一个情景:
我们在获得一堆aligned素材的时候
为了提升些许训练速度,我们进行了去重
此时相同画面的脸减少,数据集总量变少,假设此时少于2w张
2w张一块的排序效率太慢了,我们试试细分呢?
由于我们已经进行了去重,
每对相似的图像的总数都变少了,所以每对图像处于分块边缘的概率变小了
我们此时进行细分,出现"不在同一块中,无法正确地排序在一起"的情况变少
所以特定情景下,2w一个分块的直方图排序比进行细分的直方图排序效率低下

以下是我更改过的版本:
游客,如果您要查看本帖隐藏内容请回复


这个代码解释起来就是:无论数据集多大,都按照逻辑处理器总数进行分块排序

比如你有12个逻辑处理器(=线程,cpu1个大核心=2个逻辑处理器),那么就将数据集分为12个
以确保你cpu是吃满的。
当数据集的总数
小于20000*你的线程数的时候,这个比原版快
等于20000*你的线程数的时候,这个和原版一样
大于20000*你的线程数的时候,这个比原版慢
当你进行去重的时候,这个效果和原版一样
没有去重的时候,效果比原版乱一点,我自己用的时候没有什么实际上的感觉
通常情况下,没人会有4W张图片的情况下不去重进行排序的,所以一般情况下,这个代码和原版一样,只是更快
小于1000张图片的情况下,这个效果比较差。

有错误请指出,看到速改
回复

使用道具 举报

14

主题

3425

帖子

1万

积分

高级丹圣

Rank: 13Rank: 13Rank: 13Rank: 13

积分
18520

真我风采勋章万事如意节日勋章

发表于 6 天前 | 显示全部楼层
本帖最后由 wtxx8888 于 2025-7-11 21:38 编辑

这么无用的东西,都开始改了。
可见DFL,是真的没什么,可改的了。
早期的筛选用途,也就没学会 Machine_Video_Editor 那会,先用用。

强化,除噪的那些命令,也是废的功能。
回复 支持 1 反对 0

使用道具 举报

5

主题

43

帖子

452

积分

初级丹师

Rank: 3Rank: 3

积分
452
 楼主| 发表于 6 天前 | 显示全部楼层
本帖最后由 caiji132156 于 2025-7-11 16:44 编辑

反正我深变用户都说用起来没什么问题
回复 支持 反对

使用道具 举报

1

主题

15

帖子

1244

积分

初级丹圣

Rank: 8Rank: 8

积分
1244

万事如意节日勋章

发表于 5 天前 | 显示全部楼层
看看 参考参考
回复 支持 反对

使用道具 举报

QQ|Archiver|手机版|deepfacelab中文网 |网站地图

GMT+8, 2025-7-17 01:56 , Processed in 0.099186 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表