海螺AI自定义模型训练突然卡壳?先别急着调参数,问题多半不在模型本身,而是数据集准备环节埋了雷。根据实战经验,失败原因高度集中在几个常见陷阱里:目录结构混乱、路径写死、标注坐标缺失或文本文件里混入非法字符。排查思路很清晰:检查列表文件的格式与编码,确认坐标标注完整,再确保图片与标注文件一一对应。
检查train_list.txt和test_list.txt是否符合ICDAR2015索引规范
打开那两个列表文件,先看每一行是否严格写成“图片相对路径 + 空格 + 标注文件相对路径”的格式。路径里千万别出现中文、括号、#、%这类特殊字符,否则解析器很容易翻车。
编码也得留个心眼。用记事本另存为UTF-8无BOM格式,那个隐藏的BOM头经常被解析器当成非法字符直接报错。
接着检查路径前缀写对了没有。第一列应该以 train_images/ 开头,第二列以 train_gts/ 开头。如果写成 ./train_images/img_1.jpg 或者直接 img_1.jpg,那训练时必然会报错,因为路径压根对不上。
最后,用命令行检查换行符和分隔符有没有搞混。运行 head -n 3 train_list.txt | cat -A,如果看到 ^M(Windows换行)或者 ^I(制表符)混进去,必须全部清理干净,只保留空格作为分隔符。
验证标注文件是否满足8坐标+文本内容格式
随便挑一个 gt_img_1.txt 打开,逐行检查。每行必须有且仅有8个数字加1段文本,中间用英文逗号隔开,结尾不能有多余空格。
这里提供两个快速排查方法。方法一:用VS Code的正则搜索,输入 ^(d+,d+){4},[^,]+$,匹配成功的行才是合格格式。不匹配的就要重写。
方法二更推荐:直接跑一行Python脚本,能精确定位出问题行号和错误类型。
python -c "for i,l in enumerate(open('train_gts/gt_img_1.txt'),1): s=l.strip().split(','); print(f'第{i}行错误:坐标数{len(s)-1}≠8') if len(s)!=9 else None"
特别提醒:文本内容部分如果包含英文逗号、双引号或换行符,必须用反斜杠转义,否则解析器会直接中断。
确认图片与标注文件命名严格一一对应
这一步操作起来很简单,但容易遗漏。先列出 train_images/ 下所有图片的文件名(去掉扩展名),再列出 train_gts/ 下所有txt文件名(去掉 gt_ 前缀和 .txt 后缀)。然后用diff命令对比两个列表:
ls train_images/ | sed 's/..*$//' | sort > img_names.txt && ls train_gts/ | sed 's/gt_//; s/.txt$//' | sort > gt_names.txt && diff img_names.txt gt_names.txt
输出为空说明完全匹配。如果有差异,缺失的文件要补上,多余的文件清理掉即可。这一步卡住,基本就是命名没对上号。
