0. 问题背景

使用labelme对自己的工业数据集进行了标注,得到原图和标注的json文件,如下图所示:

因为自己前期用的是图片+mask的数据集格式进行训练,所以也想接着用这种格式,那么接下来就要进行图像转换,我用的labelme2coco进行格式转换得到了png格式的mask图,如下:

然后就出现了各种各样的问题,接下来彻底梳理一下这种格式的问题,防止再次造轮子。

1. 格式检查

labelme2coco转换出来的原图仍然是png格式,且模式检查发现是RGB格式,如下:

然而 :转换出来的mask图却是这种格式:

可以看到,虽然mask图显示出了彩色,但是其像素点的像素值只有0.1.2,也就是每一个像素点的像素值就是该点的类别标签。另外需要注意的是,mask的模式为P模式,也就是调色板模式。祖这点需要特别注意!!! 这样的格式与VOC数据集的图像格式是相同的,可以用VOC的读取方法进行读取。

2. cv2读取

目前用cv2.imread()函数是无法正确读取P模式的png图像的,因此如果想用cv2读取的话,要将P模式转换成L模式,这里的第一个坑也就出现了。

如果在直接读取图像之后添加convert('L')转换的话,可以看到原来的像素值(标签值)就会改变,这样就与原来的像素值就是标签值冲突了,于是我们需要进一步调整,而不是直接convert().

转换成L模式后,cv2就可以直接读取了, 读取后是一个只有尺寸而没有通道数的格式,因为L模式本身就是单通道。

原图像的话,因为是RGB模式,可以直接用cv2读取。

3. 重新调整

通过以上分析,我们可以看出如果用cv2读取P模式的图像时会发生错误,那么我们用另一种方法修改图像格式。

需要注意的是,转L模式要保证标签值不变。既然直接转会发生变化,那么就复制一个再转换。大体思路就是,创建一个L的蒙版,然后把mask的像素值全部复制进去即可。

 label_ori = Image.open(label_path + "/" + masklist)p = label_ori.getpalette()label_ori = label_ori.resize((256, 256), Image.NEAREST)temp = max(label_ori.size)mask = Image.new('L', (temp, temp), 0)  # 创建蒙板mask.putpalette(p)  # 获取调色板mask.paste(label_ori, (0, 0))  # 创建一个L模式的副本label_ori = np.array(mask)mask = Image.fromarray(label_ori, 'L')  #  L模式mask.save(save_label_path + "/" + str(i) + ".png")  # 保存

这样就可以得到一张L模式的png图像,但是这样的话,mask图像就变成了全黑的图像,没有了颜色映射,就像这样:

接下来,我们再检查一下图像的格式

可以看出来,像素值仍然保存了最初的标签值,但模式变成了L模式,这样可以就直接用cv2读取了。

4. 使用PIL读取

P模式的png图片,可以使用PIL直接读取,有点类似于VOC格式的读取方式,这里就不进一步说明了。大家有更好的方式可以评论在下方,共同学习。

其他问题解决:

1. 错误:

RuntimeError: CUDA error: device-side assert triggered CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

1. 解决:

这个错误的原因有很多,会有标签错误等等,可以百度一下,在这里我说明一下自己的错误供大家参考查阅。

我这里的错去是因为直接用cv2处理了P模式的图像,以至于后来的Tensor无法正确获取,从而在进行 下列操作:

output.data.cpu().detach().numpy()

时会出现以上报错 。在调试时也会发现,对该数据进行监控,就会提示无法正确获取Tensor,因此就会报错。

2. 错误

SELF.WAS_KILLED.IS_SET()并报错RUNTIMEERROR: DATALOADER WORKER IS KILLED BY SIGNAL

这个出现原因我也不太明确,不过把num_works设置为0确实解决了这个问题:

https://www.freesion.com/article/7292534749/https://www.freesion.com/article/7292534749/

3. cv2读取png图像

https://www.csdn.net/tags/MtTaEgzsMTE2NjMtYmxvZwO0O0OO0O0O.htmlhttps://www.csdn.net/tags/MtTaEgzsMTE2NjMtYmxvZwO0O0OO0O0O.html但是这样不能读取P模式的png图片,其他模式是可以的

其他读取方法可以参照这个https://blog.csdn.net/weixin_43794311/article/details/105208731https://blog.csdn.net/weixin_43794311/article/details/105208731

4.  labelme2coco

https://github.com/fcakyon/labelme2cocohttps://github.com/fcakyon/labelme2coco

5. Image 与 numpy相互转换

https://blog.csdn.net/m0_46653437/article/details/112253562?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-112253562-blog-122157558.t5_layer_eslanding_A_4&spm=1001.2101.3001.4242.1&utm_relevant_index=3https://blog.csdn.net/m0_46653437/article/details/112253562?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-112253562-blog-122157558.t5_layer_eslanding_A_4&spm=1001.2101.3001.4242.1&utm_relevant_index=3

6. transform数据增强

神经网络数据增强transforms的相关操作(持续更新)_燃烧吧哥们的博客-CSDN博客_transforms 数据增强transforms的相关操作(Pytorch)一、图像的相关变化1、格式转换(1)transforms.ToTensor()(2)transforms.ToPILImage()1、图像大小(1)一、图像的相关变化1、格式转换(1)transforms.ToTensor()可将PIL格式、数组格式转换为tensor格式img_path = "E:\expression_recognition\\2.jpg"img = Image.open(img_path) # #数组类型PIL类型都可a1https://blog.csdn.net/hjkdh/article/details/123439969https://blog.csdn.net/qq_41375318/article/details/102984221?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-102984221-blog-124452966.topnsimilarv1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-102984221-blog-124452966.topnsimilarv1&utm_relevant_index=1https://blog.csdn.net/qq_41375318/article/details/102984221?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-102984221-blog-124452966.topnsimilarv1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-102984221-blog-124452966.topnsimilarv1&utm_relevant_index=1

7. import torch 出现段错误,核心已转存

这个错误原因也有很多,在github上说是重新把anconda的环境变量重新更新一遍就可以了,但是对我来说,并没有发挥作用。一次偶然机会,我重新装了一下系统的显卡驱动,就好了。希望对大家有所启发。安装方法:

https://blog.csdn.net/a319506345/article/details/125004586https://blog.csdn.net/a319506345/article/details/125004586

8. RuntimeError: "softmax" not implemented for Long

这个错误的原因是在进行交叉熵损失函数时,输入的input因该时torch.float64,而输入的Target则应该是long型,这个时候只需要转换一下就可以了。

y.to(args.device).squeeze().long()

https://blog.csdn.net/suyunzzz/article/details/105478701https://blog.csdn.net/suyunzzz/article/details/105478701

9. 改变Tensor尺寸

https://blog.csdn.net/qq_43581151/article/details/97271131?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_linkhttps://blog.csdn.net/qq_43581151/article/details/97271131?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link

10. AttributeError:module 'distutils' has no attribute 'version'

https://zhuanlan.zhihu.com/p/489042988https://zhuanlan.zhihu.com/p/489042988

11.  pytorch的whl下载网址

https://download.pytorch.org/whl/torch_stable.htmlhttps://download.pytorch.org/whl/torch_stable.html以上就是近期遇到的难题,有大有小,欢迎大家交流共同学习!!!

自定义分割数据集中的png格式图片的模式转换(P -> L)以及其他问题解决相关推荐

  1. anywebp jpg png 转换webp格式图片 免费在线转换

    最近很多网站也开始支持webp格式的图片了,webp格式的图片简单说来,比目前常用的JPG同体积下更清晰,同清晰度下,体积更小. 最近也在找怎么才能将JPG PNG等文件转换为webp格式,今天终于找 ...

  2. html中如何将图片3d转换,jpg格式图片如何可以转换成3DMax格式?

    回答: 图片的格式分为很多种,但在我们生活中最常用的图片格式还是以JPG为主.那么怎样把照片变成JPG格式?接下来详细为大家介绍转化方法: 方法一:美图秀秀修改格式: 1.打开图片.2.然后点保存,在 ...

  3. HWDB1.1数据集 | 手写汉字数据集 |.gnt 转换 .png格式图片| 【❤️有效转换❤️】

    ❤️[专栏:数据集整理]❤️ 之[有效拒绝假数据]

  4. 【快速.png转.jpg】批量转换png格式图片为jpg图片

    使用背景: 当我们需要jpg目标格式的图片时,但只有png的图片源,此时我们只需要利用下面代码对目标文件夹中的png格式图片进行批量转换即可,快速有效,不易报错! 转换代码: from PIL imp ...

  5. MATLAB编程:简易读取分割存储 tif 格式图片

    MATLAB编程:简易读取分割存储 tif 格式图片 前言 一.介绍 二.MATLAB实现 三.总结 前言   本博主使用的MATLAB版本是2020b,这个版本可以使用许多有趣的扩展APP,本节将会 ...

  6. 语义分割数据标注、格式转换

    1. 数据准备 1.1 labelme标注数据 labelme标注完之后会生成json格式标注文件,与图像在同一文件夹下面,如图 1.2 labelme标注格式转换(json转voc格式) label ...

  7. springmvc 自定义view支持json和jsonp格式数据返回

    1.如果controlloer上用@ResponseBody注解,则用<mvc:message-converter>里面配置的json解析器进行解析 <mvc:annotation- ...

  8. 【数字图像处理】一.MFC详解显示BMP格式图片

    本文主要是讲述<数字图像处理>系列栏目中的第一篇文章.主要详细介绍了BMP图片格式,同时使用C++和MFC显示BMP格式,主要结合自己的<数字图像处理>课程和以前的项目叙述讲解 ...

  9. Android与HEIF格式图片适配方法

    本文字数:1490字 预计阅读时间:8分钟 一. 什么是HEIF图片 HEIF (High Efficiency Image File Format)是由动态图像专家组(MPEG)在2013年推出的新 ...

最新文章

  1. UA OPTI570 量子力学 公式与结论总结1 角动量基础
  2. 【代码】synchronized是可重入锁并且多个sync代码块顺序执行
  3. 28-高级特性之作用域(2)
  4. html抽奖源码_开源FPGA开发板OpenICE 介绍及抽奖
  5. Python机器学习:线型回归法01简单线型回归法
  6. LOL(英雄联盟)提示不支持虚拟机登录,解决方法
  7. Nginx配置优化解读
  8. 通过BigInteger真正实现无限大的十进制转N(任意整数)进制
  9. 用python编写仓库管理系统_花了一天做的一个简单的仓库管理系统
  10. IAR中路由器、协调器、终端的配置区别
  11. 【笔记】下单但未支付的订单倒计时自动取消逻辑实现
  12. 地税局工资管理系统(论文+设计)新
  13. Java实践(五)仿照用户列表查询写查自己的库
  14. 环形电流计算公式_环形电流的磁场分布 怎么计算
  15. 实用技能一:防抖与节流
  16. 特征值和奇异值(svd)
  17. 2004-6-6 0:03:43 死得其所
  18. xshell个人免费版下载使用
  19. 手机号注册过,被遗忘的网站有哪些?
  20. iOS 屏蔽系统更新描述文件更新!快把烦人的系统更新提示关掉!

热门文章

  1. 计算机编程之母美国漂亮,美国登月幕后功臣曾被誉为“穿裙子的 computer”
  2. DSLR Deep Stacked Laplacian Restorer for Low-Light Image Enhancement复现
  3. laya发布vivo小游戏远程资源笔记
  4. Meterprete端口转发
  5. Java 多线程同时执行
  6. Lootcode 201~220
  7. python语言流程控制语句的格式while循环_Python流程控制-while循环-for循环
  8. JavaScript前后移动数组元素
  9. sklearn——数据降维
  10. DvaJS的model属性