PaddleX数据标注与Halcon数据标注与转换

  • 一、简介
  • 二、PaddleX数据标注
    • 2.1Labelme数据标注
    • 2.2json数据转换
  • 三、Halcon数据标注
    • 3.1MVTec Deep Learning Tool下载安装
    • 3.2数据标注与导出
  • 四、Halcon中使用PaddleX标注的数据
    • 4.1PaddleX标注的数据转换为Halcon标注数据
    • 4.2Labelme标注的数据转换为Halcon标注数据
  • 参考文档

一、简介

PaddleX为百度飞浆开发的一种开源的深度学习架构,可用于目标检测、语义分割等任务,相较于TensorFlow、Pytorch两种开源架构搭建、训练模型简单,代码量少,易上手。
Halcon作为一款商业机器视觉软件开发包,可用于图像处理与深度学习,使用效果要优于多数开源软件。
本文主要记录了在语义分割任务中PaddleX与Halcon数据标注的实现流程,及在Halcon中使用PaddleX标注的数据的方法和相应代码。

二、PaddleX数据标注

PaddleX中数据标注工具为labelme,labelme支持标注矩形框和多边形,可分别应用于目标识别与语义分割任务,且为语义分割任务标注的多边形还可应用于目标识别任务,无需二次标注。
下面介绍在语义分割任务中PaddleX数据标注。

2.1Labelme数据标注

labelme运行在python环境中,使用前需进行安装。

上图为labelme标注药片表面缺陷示意图,标注完成后会在图片同路径下生成一个json文件,文件中包含标签名、标注的多边形坐标点及原始图片base64编码。

2.2json数据转换

PaddleX中语义分割任务训练需要使用的数据包含两部分,一部分为原始图片,一部分为标注图片,标注图片为只包含以一定颜色填充的标注区域的图片。而labelme标注后得到的是json数据,因此需要进行转换,在PaddleX中提供了转换工具,转换命令如下:

paddlex --data_conversion --source labelme --to SEG --pics ./ --annotations ./ --save_dir ./data

生成文件如下:

JPEGImages文件夹中存储原始图片,Annotations中存储标注图片,如下:


PaddleX数据标注完成。

三、Halcon数据标注

Halcon数据标注一般使用官方给出的标注工具:MVTec Deep Learning Tool,该工具未集成在Halcon软件中,需单独进行下载。

3.1MVTec Deep Learning Tool下载安装

官网下载地址为https://www.mvtec.com/downloads/deep-learning-tool,官网提供免费下载,但下载需要填写邮箱、姓名、电话等信息进行账户注册,需提供真实邮箱以接收验证码。
进入下载界面后,选择DEEP LEARNING TOOL最新版本即可,该版本与使用的Halcon版本不存在对应关系,本文下载的版本为DEEP LEARNING TOOL 22.10,使用的Halcon版本为19.05。

下载后进行安装,需要注意的是该工具安装界面为网页,即在网页上进行软件安装,安装之后打开软件,主界面如下:

3.2数据标注与导出

打开软件后,选择创建新项目,选择深度学习方法,可以看到支持图像分类、对象检测、语义分割、实例分割等任务,这里选择语义分割,输入项目名称与保存路径进行创建。

创建项目后,添加图像,点击菜单栏的“图像”,开始标注:

首先单击标签类别旁边的加号+,添加标签,输入类别名称,选择需要的高亮颜色。在Halcon中除自己添加的标签类别外还有一个自动生成的背景类别标签,导出数据时,每个未标注的像素都将属于背景。

在图片上标注时可以选择多边形或遮罩,视待标注对象的性质而定,其中一种方法可能更适用。 根据经验,如果对象的标签由较大的边缘平整的区域组成,则使用多边形;如果对象较小或需要修正某现有标签,则使用遮罩。但是,多边形或遮罩始终可以相互转换。

完成标注后选择菜单栏的导出数据集。

导出时勾选“将图像复制到文件夹…”。

导出完成后会生成两个文件夹和一个hdict文件,如下图:

test_pill_images文件夹保存原始图片,test_pill_labels保存标注图片,需要注意的是打开标注图片后,会发现标注区域不可见,原因是Halcon导出时是使用标签类别的索引值如1作为灰度值填充,而不像是PaddleX中以可见灰度值如128填充。

Halcon数据标注完成。

四、Halcon中使用PaddleX标注的数据

在进行语义分割时数据标注过程费时费力,如果使用多个架构进行试验而只需进行一次标注,那么工作效率就会大幅度提升。

4.1PaddleX标注的数据转换为Halcon标注数据

将PaddleX标注的数据转换为Halcon标注数据,其实就是将PaddleX标注图片中的灰度值转换为Halcon中以标签类别的索引值写入的灰度值,主要涉及到像素灰度值读写,下面给出以opencv实现的python代码,值得注意的是标签类别索引以1开始,因为0默认为背景:

def SetImagePixelValues(FilePathList):for i in range(len(FilePathList)):for dirpath,dirnames,filenames in os.walk(FilePathList[i]):filenames=filter(lambda filename:filename[-4:]=='.png',filenames)for filename in filenames:img_color=cv2.imread(dirpath+"/"+filename,cv2.IMREAD_UNCHANGED)img_gray=cv2.cvtColor(img_color,cv2.COLOR_RGB2GRAY)imgWidth=img_gray.shape[1]imgHeight=img_gray.shape[0]for j in range(imgWidth):for k in range(imgHeight):value=img_gray[k,j]if value > 0:img_gray[k,j]=(i+1)cv2.imwrite(dirpath+"/"+filename,img_gray)print(dirpath+"/"+filename)

这里传入的FilePathList变量是存放各类标签图片的文件夹路径列表。

4.2Labelme标注的数据转换为Halcon标注数据

将labelme标注的数据转换为Halcon标注数据,分为两步,第一步是将json数据转换为图片数据,labelme中有单个数据转换的程序示例,加以改动为多个数据转换即可,但程序中未显式设置转换后的标注区域灰度值,所以需要进行第二步,第二步即4.1节所述。
json数据转换为图片数据python代码如下:

def main(JsonFilePathlist, label_name_to_value):for i in range(len(JsonFilePathlist)):jsonfiles=[]jsonfilenames=[]out_dir=JsonFilePathlist[i]if not osp.exists(out_dir+"/images"):os.mkdir(out_dir+"/images")if not osp.exists(out_dir+"/labels"):os.mkdir(out_dir+"/labels")for dirpath,dirnames,filenames in os.walk(JsonFilePathlist[i]):filenames=filter(lambda filename:filename[-5:]=='.json',filenames)filenames01=copy.deepcopy(filenames)jsonfilenames.extend(filenames01)filenames=map(lambda filename:os.path.join(dirpath,filename),filenames)jsonfiles.extend(filenames)for j in range(len(jsonfiles)):data = json.load(open(jsonfiles[j]))imageData = data.get("imageData")if not imageData:imagePath = os.path.join(os.path.dirname(jsonfiles[j]), data["imagePath"])with open(imagePath, "rb") as f:imageData = f.read()imageData = base64.b64encode(imageData).decode("utf-8")img = utils.img_b64_to_arr(imageData)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, img=imgviz.asgray(img), label_names=label_names, loc="rb")PIL.Image.fromarray(img).save(osp.join(out_dir, "images/"+jsonfilenames[j][0:-5]+".png"))utils.lblsave(osp.join(out_dir, "labels/"+jsonfilenames[j][0:-5]+".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))logger.info(jsonfiles[j])

这里传入的JsonFilePathlist变量是存放各类标签json文件的文件夹路径列表,label_name_to_value是标签类别名称与标签类别索引的字典,包括背景,示例定义如下:

    label_name_to_value={}label_name_to_value["_background_"]=0label_name_to_value["Label01"]=1label_name_to_value["Label02"]=2label_name_to_value["Label03"]=3label_name_to_value["Label04"]=4label_name_to_value["Label05"]=5label_name_to_value["Label06"]=6label_name_to_value["Label07"]=7label_name_to_value["Label08"]=8

参考文档

Halcon深度学习2 – 标注工具Deep Learning Tool下载安装
如何通过labelme标注将json文件转为png的label

PaddleX数据标注与Halcon数据标注与转换相关推荐

  1. R语言ggplot2可视化时间序列数据并突出标注重要时间点数据实战:特殊节点标签标注、特殊区域标注

    R语言ggplot2可视化时间序列数据并突出标注重要时间点数据实战:特殊节点标签标注.特殊区域标注 目录

  2. 2.2 清除标注错误的数据-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.1 误差分析 回到目录 2.3 快速搭建你的第一个系统,并进行迭代 清除标注错误的数据 (Cleaning Up Incorrectly Labeled Data) 你的 ...

  3. 【论文复现与改进】针对弱标注数据多标签矩阵恢复问题,改进后的MCWD算法,让你的弱标注多标签数据赢在起跑线上

    改进后的MCWD算法,让你的弱标注多标签数据赢在起跑线上 前言 MCWD算法 算法展示 算法改进 实现代码 实验结果 总结 前言 最近刷完了李航老师的<统计学习与方法>,手痒到又想复现几个 ...

  4. 多帧点云数据拼接合并_自动驾驶:Lidar 3D传感器点云数据和2D图像数据的融合标注...

    自动驾驶汽车的发展已经见证了硬件传感器记录感官数据的容量和准确度的发展.传感器的数量增加了,新一代传感器正在记录更高的分辨率和更准确的测量结果. 在本文中,我们将探讨传感器融合如何在涉及环环相扣的数据 ...

  5. Labelme标注的json数据转化为coco格式的数据

    Labelme标注的json数据转化为coco格式的数据 1. 转化方法一 2. 转化方法二 1. 转化方法一 import os import json import numpy as np imp ...

  6. ByteBridge数据标注平台:图像分类数据标注服务

    ByteBridge数据标注平台:图像分类数据标注服务 ​ 2020年的一场疫情,打扰了人们工作与生活的节奏,但却无法打乱人们的爱美之心.物理条件的受限,不同产业线上线下的表现出现了天壤之别.但不可置 ...

  7. AutoCAD VBA 获取单个转角标注的相关数据。

    AutoCAD VBA 获取单个转角标注的相关数据.@TOC 菜鸟献丑了,请多指教! 这是一个在AutoCAD VBA中获取转角标注关键点数据的方法. DXF不会弄,只能用这个土方法.不是很标准规范, ...

  8. 在自建的数据集上训练yolov3准备(二):树莓派自动采集图片,tensorflow_label_tool下载图片,yolo_mark标注与清洗数据(附python脚本)

    前言 上一篇文章写了如何在Google的open image v4上分类下载数据集并保存成yolo格式,这里接着写.为了确认标注没有问题,我们可以用yolo_mark来清洗一遍.而有时可能我们需要自己 ...

  9. 数据智能是大数据的未来

    来源:中国信息产业网 近日,两家大数据领域的代表性企业Cloudera和Hortonworks宣布了它们相对平等的合并,宣称新公司将创建世界领先的下一代数据平台并提供业界首个企业数据云,这令很多人感到 ...

最新文章

  1. 在redhat6.4下安装 Oracle® Database 11g Release 2
  2. 利用samba实现网络文件共享
  3. 06-对图像进行腐蚀操作
  4. js遍历Object所有属性
  5. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
  6. 如何通过js调用接口
  7. Android Studio中的APK分析器
  8. SpringBoot RESTful 应用中的异常处理小结
  9. JavaScript中的标识符(附:关键字表)
  10. 北辰创业笔记:百度霸屏之长尾关键词是什么
  11. php curl方式网页爬虫爬取原页面数据+simple_html_dom解析方式(php爬虫基础)
  12. 2015全国硕士研究生计算机考研真题(附答案)
  13. 高低压恒流斩波步进电机驱动器设计
  14. 阿里P8详谈:软件开发和软件测试的职业寿命问题?
  15. 自学Java之基础篇——使用switch,输出今天到底是礼拜几(case的穿透)
  16. php根据公历获得农历,PHP获取阳历或农历的节日函数
  17. 几种操作系统的基本特点
  18. 计算机专业在职研究生排名,计算机专业在职研究生学校排名
  19. 解决JS中出现的兼容性问题
  20. 安全生产施工单位材料准备清单

热门文章

  1. MacOS python从图片中提取文字
  2. 【leetcode买卖股票系列问题】多次买卖/手续费/冻结期
  3. Python向上取整和向下取整
  4. 阿里巴巴优酷视频增强和超分辨率挑战赛
  5. 砍价算法,随机金额砍价代码,可以参考一下
  6. 2021-10-19 期货交易心得3
  7. word首字母不默认大写
  8. world 如何输入英文时取消首字母大写
  9. 测试iphone功能的软件,iPhone的15个特殊功能盘点 测测你是不是果粉
  10. IBM的操作系统和硬件