基于paddlex图像分类模型训练(一):图像分类数据集切分:文件夹转化为imagenet训练格式
相关博文
基于paddlex图像分类模型训练(二):训练自己的分类模型、熟悉官方demo
背景
在使用paddlex GUI训练图像分类时,内部自动对导入的分类文件夹进行细分,本文主要介绍其图像分类数据切分源码
,或可作为其他项目储备代码:https://github.com/PaddlePaddle/PaddleX/blob/develop/paddlex/tools/dataset_split/imagenet_split.py
数据集形式
PaddleClas 数据切分说明 使用 txt 格式文件指定训练集和测试集,以 ImageNet1k 数据集为例,其中 train_list.txt 和 val_list.txt 的格式形如:
# 每一行采用"空格"分隔图像路径与标注# 下面是 train_list.txt 中的格式样例
train/n01440764/n01440764_10026.JPEG 0
...
# 下面是 val_list.txt 中的格式样例
val/ILSVRC2012_val_00000001.JPEG 65
...
切分前:分类好的文件夹
切分后:train_list.txt,text_list.txt,val_list.txt,labels.txt
使用paddlex 转换
- https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/data/split.md
paddlex --split_dataset --format ImageNet --dataset_dir vegetables_cls --save_dir vegetables_cls --val_value 0.2 --test_value 0.1
源码转换 (mian.py,imagenet_split.py, utils.py)
# -*- coding: utf-8 -*-
# @Time : 2023/1/18 15:30
# @Author : XyZengimport imagenet_splitdef test_cls_split( input_dir='./datasets/cls_2',val_percent=0.2,test_percent=0,):'''val_num = int(image_num * val_percent)test_num = int(image_num * test_percent)train_num = image_num - val_num - test_num'''imagenet_split.split_imagenet_dataset(dataset_dir=input_dir,val_percent=val_percent,test_percent=test_percent,save_dir=input_dir)if __name__ == '__main__':# input_dir = './datasets/cls_2'test_cls_split()
imagenet_split.py
用于将文件夹整理好的分类图像,转换为可用于训练的txt
import random
from utils import *def split_imagenet_dataset(dataset_dir, val_percent, test_percent, save_dir):all_files = list_files(dataset_dir)label_list = list()train_image_anno_list = list()val_image_anno_list = list()test_image_anno_list = list()for file in all_files:if not is_pic(file):continuelabel, image_name = osp.split(file)if label not in label_list:label_list.append(label)label_list = sorted(label_list)for i in range(len(label_list)):image_list = list_files(osp.join(dataset_dir, label_list[i]))image_anno_list = list()for img in image_list:image_anno_list.append([osp.join(label_list[i], img), i])random.shuffle(image_anno_list)image_num = len(image_anno_list)val_num = int(image_num * val_percent)test_num = int(image_num * test_percent)train_num = image_num - val_num - test_numtrain_image_anno_list += image_anno_list[:train_num]val_image_anno_list += image_anno_list[train_num:train_num + val_num]test_image_anno_list += image_anno_list[train_num + val_num:]with open(osp.join(save_dir, 'train_list.txt'), mode='w',encoding='utf-8') as f:for x in train_image_anno_list:file, label = xf.write('{} {}\n'.format(file, label))with open(osp.join(save_dir, 'val_list.txt'), mode='w',encoding='utf-8') as f:for x in val_image_anno_list:file, label = xf.write('{} {}\n'.format(file, label))if len(test_image_anno_list):with open(osp.join(save_dir, 'test_list.txt'), mode='w',encoding='utf-8') as f:for x in test_image_anno_list:file, label = xf.write('{} {}\n'.format(file, label))# 创建label标签with open(osp.join(save_dir, 'labels.txt'), mode='w', encoding='utf-8') as f:for l in sorted(label_list):f.write('{}\n'.format(l))return len(train_image_anno_list), len(val_image_anno_list), len(test_image_anno_list)
utils.py
后续可以添加自己各种功能函数
import os
import os.path as ospdef is_pic(filename):""" 判断文件是否为图片格式Args:filename: 文件路径"""suffixes = {'JPEG', 'jpeg', 'JPG', 'jpg', 'BMP', 'bmp', 'PNG', 'png'}suffix = filename.strip().split('.')[-1]if suffix not in suffixes:return Falsereturn Truedef list_files(dirname):""" 列出目录下所有文件(包括所属的一级子目录下文件)Args:dirname: 目录路径"""def filter_file(f):if f.startswith('.'):return Truereturn Falseall_files = list()dirs = list()for f in os.listdir(dirname):if filter_file(f):continueif osp.isdir(osp.join(dirname, f)):dirs.append(f)else:all_files.append(f)for d in dirs:for f in os.listdir(osp.join(dirname, d)):if filter_file(f):continueif osp.isdir(osp.join(dirname, d, f)):continueall_files.append(osp.join(d, f))return all_files
基于paddlex图像分类模型训练(一):图像分类数据集切分:文件夹转化为imagenet训练格式相关推荐
- CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下
CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下 目录 图示过程 核心代码 图示过程 核心代码 from keras.callbacks ...
- CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下
CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下 目录 图示过程 核心代码 图示过程 核心代码 def mini_XCEPTION(inp ...
- R语言限制性立方样条(RCS, Restricted cubic spline)分析:基于logistic回归模型、南非心脏病数据集(South African Heart Disease)
R语言限制性立方样条(RCS, Restricted cubic spline)分析:基于logistic回归模型.南非心脏病数据集(South African Heart Disease) 目录
- DL之RetinaNet:基于RetinaNet算法(keras框架)利用resnet50_coco数据集(.h5文件)实现目标检测
DL之RetinaNet:基于RetinaNet算法(keras框架)利用resnet50_coco数据集(.h5文件)实现目标检测 相关文章 DL之RetinaNet:RetinaNet算法的简介( ...
- PyTorch之—图像分类一(每个类对应一个文件夹)
文章目录 一.数据集准备与训练 二.预测或推断 一.数据集准备与训练 数据按文件夹组织,每个类对应一个文件夹.大多数其他的PyTorch教程和示例都希望你先按照训练集和验证集来组织文件夹,然后在训练集 ...
- 基于深度学习模型的花卉图像分类代码_华为不止有鸿蒙!教你快速入门华为免编程深度学习神器ModelArts...
引言: 本文介绍利用华为ModelArts进行深度学习的图像分类任务,不用一行代码. 今年8月9日,在华为史上规模最大的开发者大会上,华为正式发布全球首个基于微内核的全场景分布式OS--鸿蒙操作系统( ...
- 基于深度学习模型的花卉图像分类代码_实战 | 基于深度学习模型VGG的图像识别(附代码)...
本文演示了如何使用百度公司的PaddlePaddle实现基于深度学习模型VGG的图像识别. 准备工作 VGG简介 牛津大学VGG(Visual Geometry Group)组在2014年ILSVRC ...
- 深度估计自监督模型monodepth2在自己数据集的实战——单卡/多卡训练、推理、Onnx转换和量化指标评估
本文详细介绍monodepth2模型在自己数据集的实战方法,包括单卡/多卡训练.推理.Onnx转换和量化评估等,关于理论部分请参见另一篇博客:深度估计自监督模型monodepth2论文总结和源码分析 ...
- 混合模型:基于VGG-16+PCA+Meanshift/DBSCAN的图像分类(附代码数据集)
混合模型实战 简介 数据集 训练集 测试集 实战讲解 简介 博主上次做的VGG16训练宝可梦多分类图像识别,5个每类,每个类别250张左右,训练数量并不多,但如果我的训练数量更少呢?因为在现实生活中, ...
最新文章
- J2EE复习(二)XML
- 通过游戏来学习CSS的Flex布局
- com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'user'
- 多窗体、窗体传值、打开唯一窗体操作
- C++:线程操作之CRITICAL_SECTION用法的介绍和例子理解
- 新康众闫顺成:数据中台建设中的得与失
- .NET设计模式(8):适配器模式(Adapter Pattern)
- 凉凉用计算机打的歌谱,张碧晨杨宗纬《凉凉》歌谱
- python 中的input
- SAP Commerce的Runtime Attributes
- [蓝桥杯2019初赛]年号字串-数论+模拟
- C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)
- 信息学奥赛一本通C++语言——1093:计算多项式的值
- 2018把坚韧坚持到底
- 【图像融合】基于matlab遗传算法图像融合【含Matlab源码 1624期】
- Latex符号对照表
- JavaEE ActionForm的高级应用
- 导入、配置Vuetify遇到的的几个问题
- 广东工业大学22级机械考研经验分享
- 如何可以快速解决网络劫持