• 解压从Google Drive下载的分文件zip


    下载 [1] 提供的数据 [2],其中 FFHQ 下载时会 Google Drive 会自动分成 4 分下载:

    • ffhq-00i.zip,其中 i = {1, 2, 3, 4}

    每份上限 2G 左右。按以前解压 multipart 的方法 [3] 解压之后,跑它的 preprocess 过程会出错,而且有一次解压时还少了里面的两个 .csv 文件,怀疑解压有问题。

    这次从 Google Drive 下下来的这几个文件跟之前 [1] 中处理的也不太一样:[1] 中的是正经 multipart zip,有几个是 .z0* 的,还有一个单独的 .zip 文件,其中可能装着一些元信息?比如顺序、共几 parts 之类的;但这次的没有这么一个 .zip 文件。

    检测发现,有些图片居然出现在不同的 parts 中!首先用:

    for i in `seq 1 4`; do
    	unzip -Z1 ffhq-00$i.zip > $i.txt
    done
    
    • 1
    • 2
    • 3

    将各分 zip 文件中的文件列表打出来,然后查重

    import collections
    import cv2
    import numpy as np
    import os.path as osp
    
    cnt = collections.defaultdict(list)
    for i in range(1, 5):
        # print(i)
        with open("{}.txt".format(i), "r") as f:
            for line in f:
                line = line.strip()
                # print(line)
                if ".png" == line[-4:]:
                    k = int(line.split('/')[-1].split(".png")[0])
                    # print(k)
                    cnt[k].append(i)
    print("#images:", len(cnt))  # 69080
    
    print("check seperated images")
    n_seperated = 0
    for k in cnt:
        if len(cnt[k]) > 1:
            n_seperated += 1
            # print(k, "in:", cnt[k], ',', len(cnt[k]))
    print("#seperated images:", n_seperated)  # 914
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    发现一共有 914 幅图存在两 part 中!不过本地 windows 肉眼对比,似乎重复的图像大小都一样、也能正确打开,可能是重复了,而不是一张裂开两张再分存在两部分。验证:

    先几 part 分别解压、合并解压(参照 [2]):

    # 分别解压
    for i in `seq 1 4`; do
    	unzip ffhq-00$i.zip  # 解压得 `ffhq/`
    	mv ffhq ffhq-00$i
    done
    
    # 合并解压
    # `-n` 重复的文件不替换
    unzip -n 'ffhq-00*.zip'  # 解压得 `ffhq/`
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    然后对拍

    • 两个 .csv 文件的一致性
    diff ffhq/angle.csv ffhq-001/angle.csv  # 无输出,一致
    diff ffhq/attr_gender.csv ffhq-001/attr_gender.csv  # 无输出,一致
    
    • 1
    • 2
    • 同一幅图「在不同 part 的分身」和「合并解压所得之图」之间的一致性
    import collections
    import cv2
    import numpy as np
    import os.path as osp
    
    cnt = collections.defaultdict(list)
    for i in range(1, 5):
        # print(i)
        with open("{}.txt".format(i), "r") as f:
            for line in f:
                line = line.strip()
                # print(line)
                if ".png" == line[-4:]:
                    k = int(line.split('/')[-1].split(".png")[0])
                    # print(k)
                    cnt[k].append(i)
    print("#images:", len(cnt))  # 69080
    
    print("check consistency")
    for k in cnt:
        im_p = osp.join("ffhq", "images_256", "{:05d}.png".format(k))
        im = cv2.imread(im_p, cv2.IMREAD_UNCHANGED)
        assert im is not None, im_p
        for pid in cnt[k]:
            im2_p = osp.join("ffhq-00{}".format(pid), "images_256", "{:05d}.png".format(k))
            im2 = cv2.imread(im2_p, cv2.IMREAD_UNCHANGED)
            assert im2 is not None, im2_p
            assert im.shape == im2.shape and im.dtype == im.dtype and (im != im2).sum() == 0, \
                "inconsistent: {}, {}".format(k, pid)
    print("DONE")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 结论:完全一致

    Conclusion

    所以从 Google Drive 下载的文件(夹),如果被分成多份,而又发现不同份之间有重复文件,那这些重复文件之间应该是一致的,留其中一份就行。当然还是对拍一遍比较稳。

    References

    1. XuyangGuo/CtrlHair
    2. dataset_info_ctrlhair
    3. linux解压分文件(multipart)的 .zip 文件
    4. How to unzip multiple zip files into a single directory structure (e.g. Google Drive folder export
  • 相关阅读:
    第5章 课后习题实训---二维数组
    中国管理科学研究院凝聚行业专家,傅强荣获智库专家“十佳青年”称号
    AJAX---发送POST请求、Get请求、请求四步、解决低版本的缓存问题
    第8章 使用注解的方式整合MyBatis 入门详解
    09-18-k8s-二进制方式搭建
    初探富文本之React实时预览
    微信小程序登录以及获取微信用户信息
    Fiddler工具使用
    docker 命令
    PMP模拟题 | 每日一练,快速提分
  • 原文地址:https://blog.csdn.net/HackerTom/article/details/126413036