GPT编程(1)八分类图像数据集转换为二分类

一个核心问题就是要将这八类数据图片全部重命名,尝试了一步到位

有一个图像数据集,有八个类别'amusement','anger','awe','contentment','disgust',' excitement', 'fear','sadness'的图片,每张图片被命名为"类别+数字"。采用遍历的方式,按顺序阅读每一张图片,将其中'amusement','anger','awe','contentment'四个类别文件夹的图片重新命名为"positive+n",这里的n是阅读到的次序,每一张图片都有单独的次序号,并单独放在一个文件夹中;将,'disgust',' excitement', 'fear','sadness'四个类别文件夹的图片重新命名为"negetive+n",这里的n是阅读到的次序,每一张图片都有单独的次序号,并单独放在文件夹中。用python来实现这个功能,并打印一个进度条来显示进度。

但是读取每一个类别都会重置positive序号,导致出错。所以分为了两步:(1)将八类数据图片放在两个文件夹中,先不改名称;(2)用上面的方法,给所有图片改名称

1)将八类数据图片放在两个文件夹中,先不改名称;

有一个data文件夹中有八个存放图片的类别文件夹,分别是'amusement','anger','awe','contentment','disgust',' excitement', 'fear','sad',读取这些文件夹中的图片,将'amusement','anger','awe','contentment'这四个文件夹中的图片放进"positive"文件夹中,将'disgust',' excitement', 'fear','sadness'并将文件中的图片这四个文件夹中的图片放进"negetive"文件夹中。用python实现这个功能,并打印一个进度条来显示进度。

python 复制代码
import os
from tqdm import tqdm

# 定义输入文件夹和输出文件夹的路径
input_folder = 'your_dataset_folder'
output_folder_positive = 'positive_images'
output_folder_negative = 'negative_images'

# 创建输出文件夹
os.makedirs(output_folder_positive, exist_ok=True)
os.makedirs(output_folder_negative, exist_ok=True)

# 定义类别列表
positive_categories = ['amusement', 'anger', 'awe', 'contentment']
negative_categories = ['disgust', 'excitement', 'fear', 'sadness']

# 遍历每个类别文件夹
for category in positive_categories + negative_categories:
    category_folder = os.path.join(input_folder, category)

    # 确保类别文件夹存在
    if os.path.exists(category_folder):
        # 使用tqdm显示进度条
        for i, filename in enumerate(tqdm(os.listdir(category_folder), desc=f"Processing {category}")):
            file_path = os.path.join(category_folder, filename)

            # 确保是文件而不是文件夹
            if os.path.isfile(file_path):
                # 确定输出路径和新文件名
                if category in positive_categories:
                    output_path = os.path.join(output_folder_positive, f"positive_{i+1}.jpg")
                else:
                    output_path = os.path.join(output_folder_negative, f"negative_{i+1}.jpg")

                # 复制文件到新文件夹并重新命名
                os.rename(file_path, output_path)

print("处理完成。")

(2)用上面的方法,给所有图片改名称

有一个data文件夹中有八个存放图片的类别文件夹,分别是'amusement','anger','awe','contentment','disgust',' excitement', 'fear','sad',读取这些文件夹中的图片,将'amusement','anger','awe','contentment'这四个文件夹中的图片放进"positive"文件夹中,将'disgust',' excitement', 'fear','sadness'并将文件中的图片这四个文件夹中的图片放进"negetive"文件夹中。用python实现这个功能,并打印一个进度条来显示进度。

python 复制代码
import os
from tqdm import tqdm
import shutil

# 定义输入文件夹和输出文件夹的路径
input_folder = 'data'
output_folder_positive = 'positive'
output_folder_negative = 'negative'

# 创建输出文件夹
os.makedirs(output_folder_positive, exist_ok=True)
os.makedirs(output_folder_negative, exist_ok=True)

# 定义类别列表
positive_categories = ['amusement', 'anger', 'awe', 'contentment']
negative_categories = ['disgust', 'excitement', 'fear', 'sad']

# 遍历每个类别文件夹
for category in positive_categories + negative_categories:
    category_folder = os.path.join(input_folder, category)
    
    # 确保类别文件夹存在
    if os.path.exists(category_folder):
        # 使用tqdm显示进度条
        for filename in tqdm(os.listdir(category_folder), desc=f"Processing {category}"):
            file_path = os.path.join(category_folder, filename)
            
            # 确保是文件而不是文件夹
            if os.path.isfile(file_path):
                # 确定输出路径和新文件名
                if category in positive_categories:
                    output_path = os.path.join(output_folder_positive, filename)
                else:
                    output_path = os.path.join(output_folder_negative, filename)
                
                # 复制文件到新文件夹
                shutil.copy(file_path, output_path)

print("处理完成。")

(3)把上述二分类数据集按照80:15:5划分为训练集,测试集,验证集

有一个图像数据集,有两个类别文件夹'positive','negative',按照80:15:5划分为训练集,测试集,验证集,分别放在"train","test","val"文件夹中,在每个文件夹中的从"positive"获得的图片放在'positive'文件夹中,从"negative"获得的图片放在'negative'文件夹中,举例文件夹'train'的下一级是文件夹"positive"和文件夹"negative"。用python来实现这个功能,并打印一个进度条来显示进度。

python 复制代码
import os
import random
from shutil import copyfile
from tqdm import tqdm

def split_and_copy_images(input_folder, output_folder, split_ratios=(0.8, 0.15, 0.05), seed=42):
    random.seed(seed)

    # 创建输出文件夹
    for split in ['train', 'test', 'val']:
        split_path = os.path.join(output_folder, split)
        os.makedirs(os.path.join(split_path, 'positive'), exist_ok=True)
        os.makedirs(os.path.join(split_path, 'negative'), exist_ok=True)

    # 遍历每个类别的文件夹
    for category in ['positive', 'negative']:
        category_path = os.path.join(input_folder, category)
        image_files = os.listdir(category_path)
        random.shuffle(image_files)

        # 划分数据集
        total_files = len(image_files)
        train_count = int(total_files * split_ratios[0])
        test_count = int(total_files * split_ratios[1])

        # 复制文件到相应的文件夹
        for i, filename in enumerate(tqdm(image_files, desc=f"Processing {category}")):
            src_path = os.path.join(category_path, filename)

            if i < train_count:
                dst_path = os.path.join(output_folder, 'train', category, f'{category}_{i + 1}.jpg')
            elif i < train_count + test_count:
                dst_path = os.path.join(output_folder, 'test', category, f'{category}_{i + 1}.jpg')
            else:
                dst_path = os.path.join(output_folder, 'val', category, f'{category}_{i + 1}.jpg')

            copyfile(src_path, dst_path)

# 输入文件夹和输出文件夹路径
input_folder = 'path/to/dataset'
output_folder = 'path/to/split_dataset'

# 划分数据集并显示进度条
split_and_copy_images(input_folder, output_folder)
print("数据集划分完成。")

总结,如果思路清晰,有些脚本用ChatGPT来写还是非常方便的。

相关推荐
小天才才3 分钟前
前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)
人工智能·深度学习·机器学习·自然语言处理
l木本I7 分钟前
大模型低秩微调技术 LoRA 深度解析与实践
python·深度学习·自然语言处理·lstm·transformer
哆啦A梦的口袋呀10 分钟前
基于Python学习《Head First设计模式》第七章 适配器和外观模式
python·学习·设计模式
笑鸿的学习笔记11 分钟前
虚幻引擎5-Unreal Engine笔记之SET节点的输出引脚获取设置后的最新变量值
笔记·ue5·虚幻
恰薯条的屑海鸥13 分钟前
零基础在实践中学习网络安全-皮卡丘靶场(第十期-Over Permission 模块)
学习·安全·web安全·渗透测试·网络安全学习
草莓熊Lotso17 分钟前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法
东京老树根1 小时前
SAP学习笔记 - 开发27 - 前端Fiori开发 Routing and Navigation(路由和导航)
笔记·学习
顽强卖力1 小时前
第二十八课:深度学习及pytorch简介
人工智能·pytorch·深度学习
要努力啊啊啊1 小时前
使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础《一》
数据库·人工智能·python·深度学习·自然语言处理·sqlite
wufeil1 小时前
基于功能基团的3D分子生成扩散模型 - D3FG 评测
深度学习·分子生成·药物设计·ai辅助药物设计·计算机辅助药物设计