深度学习分割json_to_data报错Too many dimensions: 3 > 2
生活随笔
收集整理的這篇文章主要介紹了
深度学习分割json_to_data报错Too many dimensions: 3 > 2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
包這個錯的原因是labelme(我的是5.0.1)的版本太新了,與舊版本labelme標注生成的json文件有所區別
解決辦法1:把labelme版本降低,降到3.16.7
解決辦法2:直接換代碼,json_to_data的目的其實就是根據標注完的json文件來獲取到mask圖。
因為在語義分割在訓練的時候用到的其實也就是原圖和mask圖,所以只要達到目的就好了。
import argparse import base64 import json import os import os.path as ospimport imgviz import PIL.Imagefrom labelme.logger import logger from labelme import utilsdef main():logger.warning("This script is aimed to demonstrate how to convert the ""JSON file to a single image dataset.")logger.warning("It won't handle multiple JSON files to generate a ""real-use dataset.")# json_file是標注完之后生成的json文件的目錄。out_dir是輸出目錄,即數據處理完之后文件保存的路徑json_file = r"D:\Code\python\pytorch\unet-pytorch-main\myself_datas\01_cat_dog\before"out_dir1 = r"D:\Code\python\pytorch\unet-pytorch-main\myself_datas\01_cat_dog\SegmentationClass"# 如果輸出的路徑不存在,則自動創建這個路徑if not osp.exists(out_dir1):os.mkdir(out_dir1)for file_name in os.listdir(json_file):# 遍歷json_file里面所有的文件,并判斷這個文件是不是以.json結尾if file_name.endswith(".json"):path = os.path.join(json_file, file_name)if os.path.isfile(path):data = json.load(open(path))# 獲取json里面的圖片數據,也就是二進制數據imageData = data.get("imageData")# 如果通過data.get獲取到的數據為空,就重新讀取圖片數據if not imageData:imagePath = os.path.join(json_file, data["imagePath"])with open(imagePath, "rb") as f:imageData = f.read()imageData = base64.b64encode(imageData).decode("utf-8")# 將二進制數據轉變成numpy格式的數據img = utils.img_b64_to_arr(imageData)# 將類別名稱轉換成數值,以便于計算label_name_to_value = {"_background_": 0}for shape in sorted(data["shapes"], key=lambda x: x["label"]):label_name = shape["label"]if label_name in label_name_to_value:label_value = label_name_to_value[label_name]else:label_value = len(label_name_to_value)label_name_to_value[label_name] = label_valuelbl, _ = utils.shapes_to_label(img.shape, data["shapes"], label_name_to_value)label_names = [None] * (max(label_name_to_value.values()) + 1)for name, value in label_name_to_value.items():label_names[value] = namelbl_viz = imgviz.label2rgb(label=lbl, image=imgviz.asgray(img), label_names=label_names, loc="rb")# out_dir = osp.basename(file_name).replace('.', '_')# out_dir = osp.join(out_dir1, out_dir)# if not osp.exists(out_dir):# os.mkdir(out_dir)# print(out_dir)# 將輸出結果保存,# PIL.Image.fromarray(img).save(osp.join(out_dir, "%s_img.jpg" % file_name.split(".")[0]))utils.lblsave(osp.join(out_dir1, "%s.png" % file_name.split(".")[0]), 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_dir1))if __name__ == "__main__":main()總結
以上是生活随笔為你收集整理的深度学习分割json_to_data报错Too many dimensions: 3 > 2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: goland 配置goroot找不到SD
- 下一篇: golang的一个简单小爬虫demo学习