图像分类任务的可视化脚本,生成类别json字典文件

1. 前言

之前的图像分类任务可视化,都是在train脚本里, 用torch中dataloader将图片和类别加载,然后利用matplotlib库进行可视化。

如这篇文章中:CNN 卷积神经网络对染色血液细胞分类(blood-cells)

在分类任务中,必定经历过图像预处理,缩放啊、随即裁剪啊之类的,可视化效果不太明显

本章将从数据角度出发,直接根据数据目录将图像可视化,随机展示所有图片的四张图片,可视化后并且保存

目标检测的可视化可以参考:

关于目标检测任务中,YOLO(txt格式)标注文件的可视化 

关于目标检测任务中,XML(voc格式)标注文件的可视化

2. 根据目录可视化 (无需类别的json文件)

目录如下:代码应该data同一路径

2.1 代码介绍

root 传入的是文件夹路径,也就是多个类别文件夹的上一级目录

将所有图像保存,为了知道图片的类别,需要把图片的父目录保存。为了方便,这里生成一个列表文件,key 是目录类别,value 是相应的图像路径

展示的代码很简单,生成随机数,将列表的文件提取出来,然后展示四张就行了

2.2 可视化结果

可视化结果

代码会在当前目录生成刚刚可视化展示的图片

2.3 完整代码

如下:

import os
import matplotlib.pyplot as plt
import random
from PIL import Imagedef main(path):classes = [i for i in os.listdir(path)]         # ['cat', 'dog']# 将所有图片按照 类别:路径 字典形式保存images_path = []  # [{'cat': './data/train\\cat\\Baidu_0000.jpeg'}, {'cat': './data/train\\cat\\Baidu_0002.jpeg'}]for cla in classes:for i in os.listdir(os.path.join(path,cla)):dic = {}  # 类别:图像路径img_path = os.path.join(path,cla,i)dic[cla] = img_path             # {'cat': './data/train\\cat\\Baidu_0000.jpeg'}images_path.append(dic)# 随机展示4张图像plt.figure(figsize=(12,8))for i in range(4):r = random.randint(0,len(images_path)-1)      # 生成随机数label,im_path= list(images_path[r].keys())[0],list(images_path[r].values())[0]#  cat , ./data/train\cat\Baidu_0049.jpegim = Image.open(im_path)plt.subplot(2,2,i+1)plt.title(label)plt.imshow(im)plt.savefig('show.png')     # 保存图片plt.show()if __name__ == '__main__':root = './data/train'       # 传入目录main(path=root)

3.生成类别json字典文件

图像分类任务,有的没有提供类别的字典文件,这里也记录一下如何生成json文件

可以通过下面代码生成

import os
import jsondef main(path):classes = [i for i in os.listdir(path)]  # ['cat', 'dog']labels = {}         # 类别的字典文件for index,name in enumerate(classes):labels[index] = namelabels = json.dumps(labels,indent=4)with open('./class_indices.json','w') as f:         # 保存成json文件f.write(labels)if __name__ == '__main__':root = './data/train'  # 传入目录main(path=root)

结果如下:


或者直接新建json文件,然后对照目录按照上面的方式输入也行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/337524.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM+mysql电影推荐系统-计算机毕业设计源码030873

目 录 摘 要 Abstract 第1章 前 言 1.1 研究背景 1.2 研究现状 1.3 系统开发目标 第2章 技术与原理 2.1 开发技术 2 2.2 ssm框架介绍 2 2.3 MySQL数据库 2 2.4 B/S结构 2 第3章 需求分析 3.1 需求分析 3.2 系统可行性分析 3.3 项目设计目标与原则 3.4…

软件测试工程师经典面试题总结

一、接口测试如何设计测试用例? 首先,接口测试用例与其他测试用例是一样的,都是为了证明程序存在错误,其出发点相同;接口测试用例的对象是接口,需要验证各个系统及组件间的接口;其三是接口测试的…

2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究 B题 外星语词典 原题再现: 我们发现了一种未知的语言,现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本,但…

【Vue2】一个数组按时间分割为【今年】和【往年】俩个数组

一. 需求 后端返回一个数组,前端按时间维度将该数组的分割为【今年】和【往年】俩个数组后端返回的数组格式如下 timeList:[{id:1,billTime:"2024-01-10",createTime:"2024-01-10 00:00:00",status:0},{id:2,billTime:"2022-05-25"…

Prometheus实战篇:Prometheus监控docker

Prometheus实战篇:Prometheus监控docker 准备环境 监控docker 为了能够获取到Docker容器的运行状态,用户可以通过Docker的stats命令获取当前主机上运行容器的统计信息,可以查看容器的CPU利用率,内存使用量,网络IO总量以及磁盘IO总量等信息. docker stats除了使用命令以外,用户…

安达发|APS排程系统之产品工艺约束

在制造业中,生产计划和排程是至关重要的环节。为了提高生产效率、降低成本并满足客户需求,企业需要采用先进的生产计划和排程系统。APS(Advanced Planning and Scheduling,高级计划与排程)系统是一种集成了多种先进技术…

如何在simulink中怎么获取足端轨迹代码解释?

在使用Java代码框架统计用户获取足端轨迹时,我们可以使用Simulink的外部接口功能和Java的网络编程来实现。 我们需要在Simulink中配置外部接口以便与Java进行通信。可以使用Simulink中的TCP/IP或UDP模块来实现网络通信。假设我们选择TCP/IP模块。 足端轨迹是机器人运…

把图表题注编号由“一.1”改为“1.1“ (方法一)

前置设置: 手打章节标题,“绪论”,“ 相关理论和技术方法”。给章节标题设置样式 “标题一”,设置为一级标题。打开导航窗格,可以不开,我纯粹是为了操作方便。 1、选中第一章的标题--“绪论”,…

救赎之道,就在其中

时光荏苒,不知不觉距离我踏入职场的第一天已经快一年了。最近也是看到平台举办年度征文活动,借此契机重新审视自己这两年来的成长历程,也希望对正在迷茫的人提供一些精神上的慰藉。 1.对未来的迷茫 如果要给两年前的自己打上标签&#xff0…

软件测试|MySQL BETWEEN AND:范围查询详解

简介 在MySQL数据库中,使用BETWEEN AND操作符可以进行范围查询,即根据某个字段的值在指定范围内进行检索数据。这个操作符非常有用,因为它可以让我们轻松地筛选出位于两个特定值之间的数据,而不需要使用复杂的条件语句。 BETWEE…

《AI基本原理和python实现》栏目介绍

一、说明 栏目《AI基本原理和python实现》的设计目的是为了实现相关算法的python编程。因为用python实现AI需对相关的python库进行全方位了解,本栏目基本包含了【机器学习】相关的经典算法,除此之外还包括了数据分析、时间序列等一些概念和相关python代码…

解决:接口中返回的文本不能保持原本格式也无法换行

一、问题&#xff1a; 原本传入的文本是有换行的&#xff0c;但是用div展示接口返回的文本&#xff0c;所示内容没有保持原有格式没达到换行效果 以下是传入到接口的文本格式 使用div标签展示接口返回的文本&#xff0c;但并没有保持原有格式&#xff0c;文本也没换行 <di…