You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLO格式目标检测数据集标注批量原地处理:保留前5字段

高效批量处理YOLO标注文件:保留前5个字段

针对170万个YOLO格式标注文件的批量修改需求(每行仅保留类别+xywh的前5个字段,移除后续分割数据),以下是比cut更高效的bash实现方案,核心思路是流处理工具+多进程并行,大幅提升处理速度:

单文件处理命令

方案1:使用sed原地修改(推荐)

利用sed的正则匹配替换,直接原地修改文件,无需生成临时文件:

sed -i 's/^\(\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\).*/\1/' your_label_file.txt
  • 正则解释:^\(\S\+\s\+\)重复5次,匹配行首的5个非空白字段(每个字段后跟空格),.*匹配后续所有内容,最终替换为仅保留前5个字段。
  • 注意:macOS系统需添加空参数:sed -i '' 's/^\(\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\).*/\1/' your_label_file.txt

方案2:使用awk生成临时文件替换

如果对sed正则不熟悉,也可以用awk提取前5个字段,再替换原文件:

awk '{print $1, $2, $3, $4, $5}' your_label_file.txt > temp.txt && mv temp.txt your_label_file.txt

批量并行处理(核心提速手段)

单线程处理170万文件效率极低,通过find+xargs开启多进程并行处理,可将速度提升数倍:

基于sed的并行脚本

# 替换为你的标注文件根目录,后缀根据实际情况调整(比如*.txt)
find /path/to/your/labels -type f -name "*.txt" | xargs -P 8 -n 100 sed -i 's/^\(\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\).*/\1/'
  • 参数说明:
    • -P 8:开启8个并行进程(可根据CPU核心数调整,比如16核可设为12)
    • -n 100:每个进程每次处理100个文件,平衡进程调度和IO负载

基于awk的并行脚本

find /path/to/your/labels -type f -name "*.txt" | xargs -P 8 -I {} sh -c 'awk "{print \$1,\$2,\$3,\$4,\$5}" {} > {}.tmp && mv {}.tmp {}'

注意事项

  1. 先小范围测试:挑选少量标注文件,先执行不带-i的sed命令(或仅生成临时文件),确认输出符合预期后再批量处理,避免数据损坏。
  2. IO资源限制:如果存储设备是机械硬盘,不要设置过高的并行进程数(建议不超过8),避免IO瓶颈导致速度下降;SSD可适当提高。
  3. 备份重要数据:批量修改前建议备份部分核心数据,防止意外情况。

内容的提问来源于stack exchange,提问作者foemre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:20:47