V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
VShawn
V2EX  ›  程序员

数十万的小文件如何快速浏览?

  •  
  •   VShawn ·
    VShawn · 2017-08-08 13:07:05 +08:00 · 4162 次点击
    这是一个创建于 2462 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近准备 DL 训练样本,被数十万的小图片折磨得死去活来,打开文件夹慢卡、预览慢、移动慢、删除慢,慢慢慢。

    求解有没有什么好的工具可以方便浏览这些小东西的?删除的话我现在直接写程序多线程删,不知道伤不伤硬盘(不过管他的,反正硬盘是公司的)。

    23 条回复    2017-08-09 12:40:16 +08:00
    ivechan
        1
    ivechan  
       2017-08-08 13:17:02 +08:00
    用命令行会好一点把, 当然一劳永逸的办法是把这些小图片合并一下, 比如 10w 图片合并成一个,
    尽量选择紧凑点的格式.
    am241
        2
    am241  
       2017-08-08 13:24:22 +08:00 via Android
    预处理拿出来
    用一个单独的程序预处理,成 numpy 数组,然后用 numpy.save 保存,以后调用也方便
    onion83
        3
    onion83  
       2017-08-08 13:24:54 +08:00
    删除大量文件的正确姿势是 umount && mkfs
    isbarton
        4
    isbarton  
       2017-08-08 13:27:40 +08:00
    如果单纯的浏览的话,google 的照片,会批量缩略图。
    VShawn
        5
    VShawn  
    OP
       2017-08-08 13:46:38 +08:00
    @ivechan 单个小图片的平均大小估计为 2kb,格式用 BMP,目前在考虑合并为大图或者直接存二进制文件,但专门写个解包程序又太浪费精力了。

    @am241 遍历这方面倒是没什么需求,晚上下班在服务器里一开,第二天上班时候已经训练 /分类完了。

    @onion83 这些命令我不熟,会考虑一下。

    @isbarton 基本上就是浏览,看分类是否正确,不正确的要丢回去重新训练。google 的这个程序我以前有用过,但是不知道对数十万个几 kb 的图片是否还有效。
    ivechan
        6
    ivechan  
       2017-08-08 14:12:30 +08:00
    @VShawn 没必要自己写这个程序, DL 很多用 numpy 数组形式保存(前提是 Python 平台)
    不过如果你要经常修改, 用这个合并的方法也比较麻烦.
    另外, 你所说的打开文件夹慢是指用 GUI 的文件夹浏览器 打开某个文件夹?
    kokutou
        7
    kokutou  
       2017-08-08 14:17:45 +08:00
    http://www.xnview.com/en/
    http://www.xnview.com/en/xnviewmp/
    acdsee pro
    adobe bridge

    几个都可以试试,看哪个性能好

    ps.要是你的图片在机械硬盘上,那不管怎么搞都快不起来把吧= =
    不管怎么搞都不会伤硬盘,除了固态工作的时候断电,机械工作的时候踢几脚。。。
    ilotuo
        8
    ilotuo  
       2017-08-08 14:18:55 +08:00
    如果要重新标注最好用 matplotlib 显示并一键标注吧.
    XiaoFaye
        9
    XiaoFaye  
       2017-08-08 14:32:52 +08:00
    @VShawn 2KB * 500,000 / 1000 = 1000MB = 1G,你全部扔内存缓存不行吗?安卓都 8G 内存了。
    hitmanx
        10
    hitmanx  
       2017-08-08 15:51:21 +08:00
    海量的小文件硬盘寻道比较慢,可以试着把 10 万个图片存成一个 2 进制文件,自己定义个 header,里面包含文件的数量和每个文件起始段的索引和大小.

    最好把文件的格式设计成未来 append img 比较方便的,这样不用每次添加一个新的图片,得把前面已有的 10w+的图片重新生成一遍.
    VShawn
        11
    VShawn  
    OP
       2017-08-08 18:15:52 +08:00
    @ivechan 对,是在做标记跟人工校验分类结果的时候,要打开文件夹筛选
    @kokutou ACDSEE 有试过,在两三千张图片的文件夹还算好用,但图片数量级上升后依然好等待一段时间进行索引,而且在 ACDSEE 中移动文件不是很方便。至于硬盘,我一开始是用固态硬盘做的,闪迪的 extreme pro,实测没有机械硬盘快,可能是 4k 随机读取能力不足。
    @ilotuo 没有接触过 matplotlib,公司的 DL 是用 C++搞起的。
    @XiaoFaye 训练时当然是放在内存的,但查看的时候不可能一直把他们保持在内存中吧。
    @hitmanx 目前是这么考虑的。


    最后,我现在在拷贝 160w 份同图片到移动硬盘,4.54G 剩余 21 小时(我讨厌大数据 : ( 逃.....
    ivechan
        12
    ivechan  
       2017-08-08 18:28:27 +08:00
    @VShawn 你这样肯定不行啊, 无论是 Linux 还是 Windows 的文件管理器对于大量文件查看都不友好的,
    还是用 Shell 处理比较好.
    SuperMild
        13
    SuperMild  
       2017-08-08 18:37:34 +08:00 via iPhone
    内存盘 RAM disk
    kokutou
        14
    kokutou  
       2017-08-08 19:15:27 +08:00
    @VShawn #11
    你机器上 ssd 的 4k 还没机械快?
    怕不是买了假固态。。。
    wenzhoou
        15
    wenzhoou  
       2017-08-08 21:45:23 +08:00 via Android
    说 shell 处理好的,你是没见过 ls 命令导致服务器 down 掉。
    rogerchen
        16
    rogerchen  
       2017-08-08 23:29:35 +08:00 via Android
    2k 的图片,验证码,黑产?大家散了吧
    u5f20u98de
        17
    u5f20u98de  
       2017-08-08 23:34:17 +08:00
    /dev/shm
    realpg
        18
    realpg  
       2017-08-09 01:22:08 +08:00
    删除这么多小文件的方式是把分区内其他文件都拷出去然后格式化
    inflationaaron
        19
    inflationaaron  
       2017-08-09 01:52:46 +08:00
    如果用 TensorFlow 的话考虑用 TFRecord,把 label 和 image 都存成二进制文件。如果是其他平台,可以用 HDF5 作为存储格式,各种语言都有相应的库。
    inflationaaron
        20
    inflationaaron  
       2017-08-09 01:53:15 +08:00
    @wenzhoou ls 默认的时候会排序,关掉就好了。
    xenme
        21
    xenme  
       2017-08-09 06:30:06 +08:00 via iPhone
    机械盘无论 4K 还是随机读写甩机械盘几个数量级,你居然能测出更慢?

    你那是 U 盘吧?
    wenzhoou
        22
    wenzhoou  
       2017-08-09 07:36:59 +08:00 via Android
    @inflationaaron 受教了。谢谢
    VShawn
        23
    VShawn  
    OP
       2017-08-09 12:40:16 +08:00
    @kokutou
    @xenme 我也不知道为什么呀。。。。它就是慢,复制的时候快一点,也就是从 60kb 每秒涨到 80kb 每秒这样的水平,读取的时候没注意,删除的时候很慢很慢。

    @realpg 所以现在我单独用了一个硬盘装,不用以后直接格掉
    @rogerchen 160 万+的验证码收集起来怕是会死,这里全是细胞样本,再多的不透露了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2452 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:23 · PVG 18:23 · LAX 03:23 · JFK 06:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.