mask rcnn 实例分割的数据集制作
这篇博客是 基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)文章中 数据集的制作 这部分的一些补充
温馨提示:
实例分割是针对同一个类别的不同个体或者不同部分之间进行区分
我的任务是对同一个类别的不同个体进行区分,在标注的时候,不同的个体需要设置不同的标签名称在进行标注的时候不要勾选 labelme 界面左上角 File 下拉菜单中的 Stay With Images Data 选项
否则生成的json会包含 Imagedata 信息(是很长的一大串加密的软链接),会占用很大的内存
1.首先要人为划分训练集和测试集(图片和标注文件放在同一个文件夹里面)
2.在同级目录下新建一个 labels.txt 文件
__ignore__
__background__
seedling #根据自己的实际情况更改
3.在datasets目录下新建 seed_train
、 seed_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 实例分割的数据集制作相关推荐
- mask rcnn实例分割_使用Mask-RCNN的实例分割
mask rcnn实例分割 In this article, I will be creating my own trained model for detecting potholes. For d ...
- 有空就学学的实例分割1——Tensorflow2搭建Mask R-CNN实例分割平台
有空就学学的实例分割1--Tensorflow2搭建Mask R-CNN实例分割平台 学习前言 什么是Mask R-CNN 源码下载 Mask R-CNN实现思路 一.预测部分 1.主干网络介绍 2. ...
- 利用边缘监督信息加速Mask R-CNN实例分割训练
(欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 今天跟大家分享一篇有意思的arXiv上新出的论文,作者来自德国宝马汽车公司(BMW Car IT GmbH,Ger ...
- OpenCV4.0 Mask RCNN 实例分割示例 C++/Python实现
点击我爱计算机视觉标星,更快获取CVML新技术 前几天OpenCV4.0-Alpha发布,其中新增实例分割Mask RCNN模型是这次发布的亮点之一. 图像实例分割即将图像中目标检测出来并进行像素级分 ...
- Ubuntu18.04 配置detectron2实现Faster RCNN目标检测和Mask RCNN实例分割(一)
1. 背景介绍 detectron2项目地址:https://github.com/facebookresearch/detectron2 FasterRCNN论文:https://arxiv.org ...
- Mask Rcnn目标分割-训练自己数据集-详细步骤
本文接着介绍了Mask Rcnn目标分割算法如何训练自己数据集,对训练所需的文件以及训练代码进行详细的说明. 本文详细介绍在只有样本图片数据时,如果建立Mask Rcnn目标分割训练数据集的步骤.过程 ...
- mask rcnn训练自己的数据集
原文首发于微信公众号「3D视觉工坊」--mask rcnn训练自己的数据集 前言 最近迷上了mask rcnn,也是由于自己工作需要吧,特意研究了其源代码,并基于自己的数据进行训练~ 本博客参考:ht ...
- Mask Rcnn目标分割-项目搭建及跑通测试代码
本文介绍了Mask Rcnn目标分割项目的搭建及运行过程,并对搭建过程中可能出现的问题进行了解答. 环境:Cuda10.2+tensorflow-gpu1.13.2 Mask R-CNN是一个实例分割 ...
- Win10下手把手教你Mask R-CNN用自己的数据集训练(从labelme标记开始)
对于Mask R-CNN的环境配置不了解的同学可以看我之前的博客,详细的讲了如何复现跑通demo https://blog.csdn.net/hesongzefairy/article/details ...
最新文章
- html分页自动加载数据库,AngularJS实现分页显示数据库信息
- mongodb可视化工具连接报错
- HTML4.0 / XHTML 1.0 Reference Manual
- Java集合框架List,Map,Set等全面介绍
- 计算机二级学号填错了,计算机二级错题(58页)-原创力文档
- 如何进行有效的数据治理,提升数据价值?
- 非常牛逼的SQL语句
- cad文件格式(dwg、dxf、dwf、dws等)转其他格式(svg、,tiff、jpej、png、xml、pdf等)的四种方式(java)
- 50本财富书籍进行收藏
- 一文看懂量子十问(上篇)
- StartUml 用例图
- These songs can cheer you up when life gets hard
- 用python做动画的代码_Python应用 | 三行代码实现GIF动画
- GRECP/LPL RECOVERY
- YUI可真是个不错的东东
- 如何在WPS中打开多个窗口
- 分享120个ASP源码,总有一款适合您
- ecshop ecmall shopex
- android自定义键盘遮挡,android中键盘遮挡了dialog里的内容怎么处理
- JavaSocket编程之Netty框架线程模型
热门文章
- OpenCV二值化--cv2.threshold()函数、cv2.adaptiveThreshold()函数
- 使用阿里云下载ubuntu镜像
- 国庆当天打卡北京拍飞机网红地:西湖园
- 编程打印空心字符菱形
- 基于深度学习的多聚焦图像融合(Multi-Focus Image Fusion)论文及代码整理
- 带你了解AWP产品家族
- oracle数据转换万能通用初级脚本自动生成器(本人多年数据转换自己用的数据转换的初次迭代脚本生成器,不涉及公司机密,完全个人产品)
- 电子病历质控系列-查对制度
- scroll-view横向滚动无效
- 梦幻春晚服务器找不到,梦幻春晚异常火爆!一大批猴子挤爆服务器