使用 Tensorflow 进行图像增强,因此所有类都具有完全相同数量的图像

问题描述

我想做动物分类的多类图像分类。问题是我的数据集每个类都有不同数量的图像,而且差异非常大。例如:

在本例中,数据集包含 3 个类别的 320 张图像。 A类有125图片,B类有170图片,C类只有25图片,我希望增加这些类因此,每个类别将有 200 张图像,这意味着 600 张图像均匀分布到这 3 个类别。

但是,就我而言,我的数据集中有 60 个类。我怎样才能增加所有这些,以便他们拥有完全相同的所有类的图像数量

解决方法

这需要大量编码,但您可以使用 ImageDataGenerator 生成增强图像并将它们存储在指定目录中。生成器的文档是 here. 或者,您可以使用像 cv2 或 PIL 这样的模块来提供转换图像的功能。以下是您可以与 cv2 一起使用的代码。请注意查找 cv2 文档以了解如何指定代码注释中所述的图像转换。代码如下

import os
import cv2
file_number =130 # set this to the number of files you want
sdir=r'C:\Temp\dummydogs\train' # set this to the main directory that contains yor class directories
slist=os.listdir(sdir)
for klass in slist:
    class_path=os.path.join(sdir,klass)
    filelist=os.listdir(class_path)
    file_count=len(filelist)
    if file_count > file_number:
        # delete files from the klass directory because you have more than you need
        delta=file_count-file_number
        for i in range(delta):
            file=filelist[i]
            fpath=os.path.join (class_path,file)
            os.remove(fpath)
    else:
        # need to add files to this klass so do augmentation using cv3 image transforms
        label='-aug' # set this to a string that will be part of the augmented images file name 
        delta=file_number-file_count
        for i in range(delta):
            file=filelist[i]
            file_split=os.path.split(file)
            index=file_split[1].rfind('.')
            fname=file[:index]
            ext=file[index:]
            fnew_name=fname + '-' +str(i) +'-' + label + ext
            fpath=os.path.join(class_path,file)
            img=cv2.imread(fpath)
            img= cv2.cvtColor(img,cv2.COLOR_BGR2RGB) 
            # look up cv2 documentation and apply image transformation code here
            dest_path=os.path.join(class_path,fnew_name)
            cv2.imwrite(dest_path,img)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...