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

2017-08-08 13:07:05 +08:00
 VShawn

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

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

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

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

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

@isbarton 基本上就是浏览,看分类是否正确,不正确的要丢回去重新训练。google 的这个程序我以前有用过,但是不知道对数十万个几 kb 的图片是否还有效。
ivechan
2017-08-08 14:12:30 +08:00
@VShawn 没必要自己写这个程序, DL 很多用 numpy 数组形式保存(前提是 Python 平台)
不过如果你要经常修改, 用这个合并的方法也比较麻烦.
另外, 你所说的打开文件夹慢是指用 GUI 的文件夹浏览器 打开某个文件夹?
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
2017-08-08 14:18:55 +08:00
如果要重新标注最好用 matplotlib 显示并一键标注吧.
XiaoFaye
2017-08-08 14:32:52 +08:00
@VShawn 2KB * 500,000 / 1000 = 1000MB = 1G,你全部扔内存缓存不行吗?安卓都 8G 内存了。
hitmanx
2017-08-08 15:51:21 +08:00
海量的小文件硬盘寻道比较慢,可以试着把 10 万个图片存成一个 2 进制文件,自己定义个 header,里面包含文件的数量和每个文件起始段的索引和大小.

最好把文件的格式设计成未来 append img 比较方便的,这样不用每次添加一个新的图片,得把前面已有的 10w+的图片重新生成一遍.
VShawn
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
2017-08-08 18:28:27 +08:00
@VShawn 你这样肯定不行啊, 无论是 Linux 还是 Windows 的文件管理器对于大量文件查看都不友好的,
还是用 Shell 处理比较好.
SuperMild
2017-08-08 18:37:34 +08:00
内存盘 RAM disk
kokutou
2017-08-08 19:15:27 +08:00
@VShawn #11
你机器上 ssd 的 4k 还没机械快?
怕不是买了假固态。。。
wenzhoou
2017-08-08 21:45:23 +08:00
说 shell 处理好的,你是没见过 ls 命令导致服务器 down 掉。
rogerchen
2017-08-08 23:29:35 +08:00
2k 的图片,验证码,黑产?大家散了吧
u5f20u98de
2017-08-08 23:34:17 +08:00
/dev/shm
realpg
2017-08-09 01:22:08 +08:00
删除这么多小文件的方式是把分区内其他文件都拷出去然后格式化
inflationaaron
2017-08-09 01:52:46 +08:00
如果用 TensorFlow 的话考虑用 TFRecord,把 label 和 image 都存成二进制文件。如果是其他平台,可以用 HDF5 作为存储格式,各种语言都有相应的库。
inflationaaron
2017-08-09 01:53:15 +08:00
@wenzhoou ls 默认的时候会排序,关掉就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381323

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX