这篇博客是 基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)文章中 数据集的制作 这部分的一些补充

温馨提示:

实例分割是针对同一个类别的不同个体或者不同部分之间进行区分
我的任务是对同一个类别的不同个体进行区分,在标注的时候,不同的个体需要设置不同的标签名称在进行标注的时候不要勾选 labelme 界面左上角 File 下拉菜单中的 Stay With Images Data 选项
否则生成的json会包含 Imagedata 信息(是很长的一大串加密的软链接),会占用很大的内存

1.首先要人为划分训练集和测试集(图片和标注文件放在同一个文件夹里面)

2.在同级目录下新建一个 labels.txt 文件

__ignore__
__background__
seedling #根据自己的实际情况更改


3.在datasets目录下新建 seed_trainseed_val 两个文件夹

分别存放的训练集和测试集图片和整合后的标签文件
seed_train
seed_val把整合后的标签文件剪切复制到同级目录下
seed_train_annotation.josn
seed_val_annotation.json

完整代码

说明:
一次只能操作一个文件夹,也就是说:
训练集生成需要执行一次代码
测试集生成就需要更改路径之后再执行一次代码
import argparse
import collections
import datetime
import glob
import json
import os
import os.path as osp
import sys
import uuid
import timeimport imgviz
import numpy as npimport labelmetry:import pycocotools.mask
except ImportError:print("Please install pycocotools:\n\n    pip install pycocotools\n")sys.exit(1)#https://github.com/pascal1129/kaggle_airbus_ship_detection/blob/master/0_rle_to_coco/1_ships_to_coco.pydef main():parser = argparse.ArgumentParser(description="json2coco")#原始json文件保存的路径parser.add_argument("--input_dir", help="input annotated directory",default="E:/Deep_learning/seed-mask/data/seed/seed_train")#整合后的json文件保存的路径parser.add_argument("--output_dir", help="output dataset directory",default="E:/Deep_learning/seed-mask/data/seed/datasets/seed_train")parser.add_argument("--labels", help="labels file", default='E:/Deep_learning/seed-mask/data/seed/labels.txt')#required=Trueparser.add_argument( "--noviz", help="no visualization", action="store_true" ,default="--noviz")args = parser.parse_args()now = datetime.datetime.now()start= time.time()data = dict(info=dict(description="seedling datasets",url=None,version="label=4.5.6",year=now.year,contributor=None,date_created=now.strftime("%Y-%m-%d %H:%M:%S.%f"),),#licenses=[dict(url=None, id=0, name=None,)],images=[# license, url, file_name, height, width, date_captured, id],type="instances",annotations=[# segmentation, area, iscrowd, image_id, bbox, category_id, id],categories=[# supercategory, id, name],)class_name_to_id = {}for i, line in enumerate(open(args.labels).readlines()):class_id = i - 1  # starts with -1class_name = line.strip()if class_id == -1:assert class_name == "__ignore__"continueif class_id == 0:assert class_name == "__background__"continue        class_name_to_id[class_name] = class_id#print(class_id,class_name,'\n')data["categories"].append(dict(supercategory="seedling", id=class_id, name=class_name,)#一类目标+背景,id=0表示背景)print("categories 生成完成",'\n')out_ann_file = osp.join(args.output_dir, "seed_train_anno.json")#自动添加"/"   这里要改 label_files = glob.glob(osp.join(args.input_dir, "*.json"))#图像id从json文件中读取for image_id, filename in enumerate(label_files):print(image_id, filename)#print("Generating dataset from:", filename)label_file = labelme.LabelFile(filename=filename)base = osp.splitext(osp.basename(filename))[0]#图片名out_img_file = osp.join(args.output_dir, base + ".jpg")# 保存图片路径img = labelme.utils.img_data_to_arr(label_file.imageData)imgviz.io.imsave(out_img_file, img)data["images"].append(dict(#license=0,#url=None,file_name=osp.relpath(out_img_file, osp.dirname(out_ann_file)),height=img.shape[0],width=img.shape[1],#date_captured=None,id=image_id,))masks = {}  # for areasegmentations = collections.defaultdict(list)  # for segmentationfor shape in label_file.shapes:points = shape["points"]label = shape["label"]group_id = shape.get("group_id")shape_type = shape.get("shape_type", "polygon")mask = labelme.utils.shape.shape_to_mask(img.shape[:2], points, shape_type)#labelme=4.5.6的shape_to_mask函数if group_id is None:group_id = uuid.uuid1()instance = (label, group_id)#print(instance)if instance in masks:masks[instance] = masks[instance] | maskelse:masks[instance] = maskif shape_type == "rectangle":(x1, y1), (x2, y2) = pointsx1, x2 = sorted([x1, x2])y1, y2 = sorted([y1, y2])points = [x1, y1, x2, y1, x2, y2, x1, y2]else:points = np.asarray(points).flatten().tolist()segmentations[instance].append(points)segmentations = dict(segmentations)for instance, mask in masks.items():            cls_name, group_id = instance
#            if cls_name not in class_name_to_id:
#                continue
#            cls_id = class_name_to_id[cls_name]mask = np.asfortranarray(mask.astype(np.uint8))mask = pycocotools.mask.encode(mask)area = float(pycocotools.mask.area(mask))bbox = pycocotools.mask.toBbox(mask).flatten().tolist()data["annotations"].append(dict(id=len(data["annotations"]),image_id=image_id,category_id=1,#都是1类cls_idsegmentation=segmentations[instance],area=area,bbox=bbox,iscrowd=0,))print("annotations 生成完成",'\n')#        if not args.noviz:
#            labels, captions, masks = zip(
#                *[
#                    (class_name_to_id[cnm], cnm, msk)
#                    for (cnm, gid), msk in masks.items()
#                    if cnm in class_name_to_id
#                ]
#            )
#            viz = imgviz.instances2rgb(
#                image=img,
#                labels=labels,
#                masks=masks,
#                captions=captions,
#                font_size=15,
#                line_width=2,
#            )
#            out_viz_file = osp.join(
#                args.output_dir, "Visualization", base + ".jpg"
#            )
#            imgviz.io.imsave(out_viz_file, viz)with open(out_ann_file, "w") as f:json.dump(data, f,indent = 2)cost_time =(time.time()-start)/1000print("cost_time:{:.2f}s".format(cost_time) )if __name__ == "__main__":main()

mask rcnn 实例分割的数据集制作相关推荐

  1. mask rcnn实例分割_使用Mask-RCNN的实例分割

    mask rcnn实例分割 In this article, I will be creating my own trained model for detecting potholes. For d ...

  2. 有空就学学的实例分割1——Tensorflow2搭建Mask R-CNN实例分割平台

    有空就学学的实例分割1--Tensorflow2搭建Mask R-CNN实例分割平台 学习前言 什么是Mask R-CNN 源码下载 Mask R-CNN实现思路 一.预测部分 1.主干网络介绍 2. ...

  3. 利用边缘监督信息加速Mask R-CNN实例分割训练

    (欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 今天跟大家分享一篇有意思的arXiv上新出的论文,作者来自德国宝马汽车公司(BMW Car IT GmbH,Ger ...

  4. OpenCV4.0 Mask RCNN 实例分割示例 C++/Python实现

    点击我爱计算机视觉标星,更快获取CVML新技术 前几天OpenCV4.0-Alpha发布,其中新增实例分割Mask RCNN模型是这次发布的亮点之一. 图像实例分割即将图像中目标检测出来并进行像素级分 ...

  5. Ubuntu18.04 配置detectron2实现Faster RCNN目标检测和Mask RCNN实例分割(一)

    1. 背景介绍 detectron2项目地址:https://github.com/facebookresearch/detectron2 FasterRCNN论文:https://arxiv.org ...

  6. Mask Rcnn目标分割-训练自己数据集-详细步骤

    本文接着介绍了Mask Rcnn目标分割算法如何训练自己数据集,对训练所需的文件以及训练代码进行详细的说明. 本文详细介绍在只有样本图片数据时,如果建立Mask Rcnn目标分割训练数据集的步骤.过程 ...

  7. mask rcnn训练自己的数据集

    原文首发于微信公众号「3D视觉工坊」--mask rcnn训练自己的数据集 前言 最近迷上了mask rcnn,也是由于自己工作需要吧,特意研究了其源代码,并基于自己的数据进行训练~ 本博客参考:ht ...

  8. Mask Rcnn目标分割-项目搭建及跑通测试代码

    本文介绍了Mask Rcnn目标分割项目的搭建及运行过程,并对搭建过程中可能出现的问题进行了解答. 环境:Cuda10.2+tensorflow-gpu1.13.2 Mask R-CNN是一个实例分割 ...

  9. Win10下手把手教你Mask R-CNN用自己的数据集训练(从labelme标记开始)

    对于Mask R-CNN的环境配置不了解的同学可以看我之前的博客,详细的讲了如何复现跑通demo https://blog.csdn.net/hesongzefairy/article/details ...

最新文章

  1. html分页自动加载数据库,AngularJS实现分页显示数据库信息
  2. mongodb可视化工具连接报错
  3. HTML4.0 / XHTML 1.0 Reference Manual
  4. Java集合框架List,Map,Set等全面介绍
  5. 计算机二级学号填错了,计算机二级错题(58页)-原创力文档
  6. 如何进行有效的数据治理,提升数据价值?
  7. 非常牛逼的SQL语句
  8. cad文件格式(dwg、dxf、dwf、dws等)转其他格式(svg、,tiff、jpej、png、xml、pdf等)的四种方式(java)
  9. 50本财富书籍进行收藏
  10. 一文看懂量子十问(上篇)
  11. StartUml 用例图
  12. These songs can cheer you up when life gets hard
  13. 用python做动画的代码_Python应用 | 三行代码实现GIF动画
  14. GRECP/LPL RECOVERY
  15. YUI可真是个不错的东东
  16. 如何在WPS中打开多个窗口
  17. 分享120个ASP源码,总有一款适合您
  18. ecshop ecmall shopex
  19. android自定义键盘遮挡,android中键盘遮挡了dialog里的内容怎么处理
  20. JavaSocket编程之Netty框架线程模型

热门文章

  1. OpenCV二值化--cv2.threshold()函数、cv2.adaptiveThreshold()函数
  2. 使用阿里云下载ubuntu镜像
  3. 国庆当天打卡北京拍飞机网红地:西湖园
  4. 编程打印空心字符菱形
  5. 基于深度学习的多聚焦图像融合(Multi-Focus Image Fusion)论文及代码整理
  6. 带你了解AWP产品家族
  7. oracle数据转换万能通用初级脚本自动生成器(本人多年数据转换自己用的数据转换的初次迭代脚本生成器,不涉及公司机密,完全个人产品)
  8. 电子病历质控系列-查对制度
  9. scroll-view横向滚动无效
  10. 梦幻春晚服务器找不到,梦幻春晚异常火爆!一大批猴子挤爆服务器