解决labelme_json_to_dataset批量多类别转化遇到的问题

使用 labelme 批量标注时会遇到一个问题:
labelme 的 json 只保存一张图中存在的标注,这意味着一张图中不包含所有类别的时候,它的标注颜色(值)不一样,相当于类别标注错误了,这样的数据肯定是不能送去训练的。
(比如这批数据总共有类别 [ ‘a’, ‘b’, ‘c’, ‘d’, ‘e’],分别对应值[1,2,3,4,5]而这张图只包含[ ‘a’, ‘c’, ‘e’],json中只保存ace,在转化成mask图时图中类别和对应的值会变成{ ‘a’->1 , ‘c’->2 , ‘e’->3 },这样类别就错误了)

解决方法

:json中保存的类别是标注时输入的字符串,因此只需要修改 labelme_json_to_dataset 指令执行的文件,使字符串和类别值对应上就可以了。

先看看 labelme_json_to_dataset 指令的入口在哪里

which labelme

得到

/anaconda3/bin/labelme_json_to_dataset

从 /anaconda3/bin 里找到

labelme_json_to_dataset

打开看到

from labelme.cli.json_to_dataset import main

接下来需要找到labelme.cli

打开python,输入

import labelme
print(labelme.__file__)

得到 labelme 路径

/anaconda3/lib/python3.8/site-packages/labelme/__init__.py

从labelme路径进入cli
修改 json_to_dataset.py 文件
找到

label_name_to_value = {"_background_": 0}

在字典中自定义自己的类别就行了

label_name_to_value = {"_background_": 0,
                           'dam':1,
                           'water':2,
                           'mountain':3,
                           'shore':4,
                           'sky':5,
                           'tree':6}
                          

批量转化方法

写一个shell脚本,我这里是把 .json 文件全部放到一个 json 文件夹中,新建一个 data 文件夹存放解压 .json 的数据,data 文件夹中有 train_imgs 和 train_labels 两个文件夹,将原图和mask图解压分别存入两个文件夹。

#!/bin/bash

path='./json'
files=$(ls $path)
for filename in $files
do
	a=${filename%.*}
	labelme_json_to_dataset $path/$filename -o ./data
	cd data
	mv img.png $a.png
	mv $a.png train_imgs
	mv label.png $a.png
	mv $a.png train_labels 
	cd ..
done
cd data
rm label_viz.png
rm label_names.txt
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值