在前面的博客中【Mask-RCNN】 环境配置+模型训练+测试介绍了json文件转化数据集的方法,这里重新回顾下该方法:
json文件转化数据集
下载转换工具如下
链接:https://pan.baidu.com/s/1ma-xWhadRQH4Zbuce41HkQ
提取码:r8bc
将该文件放在.json文件所在的目录下:
终端进入该目录:
cd F:\AI-python\dataset\Line_dataset\line_1\json
激活labelme环境:(数据标注工具 labelme中有详细说明。重要!重要!重要!)
conda activate labelme
输入转换指令:
start "" "test.bat"
每个文件夹里面有五个文件,这些是后续训练需要读取的文件。
但是,笔者在安装新的labelme,重新执行上述方法时,发现文件夹只生成了4个文件:
缺少了info.yaml文件!!!!!!
笔者查看了当前安装的labelme的版本
(labelme) C:\Users\znjt\Desktop\loss>labelme --version
labelme 4.5.6
笔者查看了labelme安装目录下的labelme_json_to_dataset.py文件,显示如下:
# labelme 4.5.6
PIL.Image.fromarray(img).save(osp.join(out_dir, "img.png"))
utils.lblsave(osp.join(out_dir, "label.png"), lbl)
PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, "label_viz.png"))
with open(osp.join(out_dir, "label_names.txt"), "w") as f:
for lbl_name in label_names:
f.write(lbl_name + "\n")
logger.info("Saved to: {}".format(out_dir))
if __name__ == "__main__":
main()
对比之前可运行的labelme 3.20.0版本的labelme_json_to_dataset.py文件,显示如下:
# 3.20.0版labelme
PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
utils.lblsave(osp.join(out_dir, 'label.png'), lbl)
PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))
with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
for lbl_name in label_names:
f.write(lbl_name + '\n')
# 缺少的部分
logger.warning('info.yaml is being replaced by label_names.txt')
info = dict(label_names=label_names)
with open(osp.join(out_dir, 'info.yaml'), 'w') as f:
yaml.safe_dump(info, f, default_flow_style=False)
logger.info('Saved to: {}'.format(out_dir))
if __name__ == '__main__':
main()
于是,笔者直接将4.5.6版本labelme_json_to_dataset.py文件中添加缺少的部分,并保存:
# 开头引入
import yaml
# 后部分加上生成".yaml"文件的部分 一定注意位置
logger.warning('info.yaml is being replaced by label_names.txt')
info = dict(label_names=label_names)
with open(osp.join(out_dir, 'info.yaml'), 'w') as f:
yaml.safe_dump(info, f, default_flow_style=False)
再次运行转换指令:
start "" "test.bat"
此时,生成了5个转换文件,info.yaml文件不再缺少了,问题解决了。