Pytorch中使用ImageFolder读取数据集时忽略特定文件

 更新时间:2022年03月23日 11:16:58   作者:SDFDSJFJ  
这篇文章主要介绍了Pytorch中使用ImageFolder读取数据集时忽略特定文件,具有一的参考价值需要的小伙伴可以参考一下,希望对你有所帮助

一、使用ImageFolder读取数据集时忽略特定文件

如果事先知道需要忽略哪些文件,当然直接从数据集里删除就行了。但如果需要在程序运行时动态确认,或者筛选规则比较复杂,人工不好做,就需要让ImageFolder在读取时使用自定义的筛选规则。

ImageFolder有一个可选参数为is_valid_file,参数类型为可调用的函数,该函数传入一个str参数,返回一个bool值。当返回值为True时保留该文件,否则忽略。

例如,读取时想要忽略所有文件名带‘invalid’的文件,

代码如下:

import platform
from torchvision.datasets import ImageFolder


class Check(object):
    def __init__(self,
                 key_word: str):
        self.key_word = key_word
        self.separator = '\\' if platform.system() == 'Windows' else '/'

    def __call__(self, 
                 file_name: str) -> bool:
        folders = file_name.split(self.separator)
        return folders[-1].find(self.key_word) < 0

dataset = ImageFolder('./data', is_valid_file=Check('invalid'))

这里定义了一个实现了__call__方法的Check类,相比于直接定义函数的好处在于可以在构造函数里指定想要忽略的字符,并且能够根据操作系统的不同把文件目录分隔符给确定了。

更加复杂的功能可以自行修改代码逻辑实现,但是要注意如果某个类别的所有文件都被筛选掉了,ImageFolder会报FileNotFoundError错误。

如果想要忽略整个类别可以使用下面方法!!!

二、ImageFolder只读取部分类别文件夹

直接继承并且重写ImageFolder类的find_classes方法即可

from torchvision.datasets.folder import *
from typing import *


class FilterableImageFolder(ImageFolder):
    def __init__(
            self,
            root: str,
            transform: Optional[Callable] = None,
            target_transform: Optional[Callable] = None,
            loader: Callable[[str], Any] = default_loader,
            is_valid_file: Optional[Callable[[str], bool]] = None,
            valid_classes: List = None
    ):
        self.valid_classes = valid_classes
        super(FilterableImageFolder, self).__init__(root, transform, target_transform, loader, is_valid_file)

    def find_classes(self, directory: str) -> Tuple[List[str], Dict[str, int]]:
        classes = sorted(entry.name for entry in os.scandir(directory) if entry.is_dir())
        #增加了这下面这句
        classes = [valid_class for valid_class in classes if valid_class in self.valid_classes]
        if not classes:
            raise FileNotFoundError(f"Couldn't find any class folder in {directory}.")

        class_to_idx = {cls_name: i for i, cls_name in enumerate(classes)}
        return classes, class_to_idx

使用时,例如有mousecatdog三个类别的数据集文件夹,只想读取catdog

代码如下:

dataset = FilterableImageFolder('./data', valid_classes=['cat', 'dog'])

到此这篇关于Pytorch中使用ImageFolder读取数据集时忽略特定文件的文章就介绍到这了,更多相关ImageFolder读取数据集内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于python的mmh3库安装以及使用详解

    关于python的mmh3库安装以及使用详解

    这篇文章主要介绍了关于python的mmh3库安装以及使用详解,哈希方法主要有MD、SHA、Murmur、CityHash、MAC等几种方法,mmh3全程murmurhash3,是一种非加密的哈希算法,常用于hadoop等分布式存储情境中,需要的朋友可以参考下
    2023-07-07
  • Python设计模式之适配器模式原理与用法详解

    Python设计模式之适配器模式原理与用法详解

    这篇文章主要介绍了Python设计模式之适配器模式原理与用法,结合实例形式分析了适配器模式的相关概念、原理及Python实现技巧,需要的朋友可以参考下
    2019-01-01
  • python如何运行js语句

    python如何运行js语句

    在本篇内容里小编给大家整理的是一篇关于python如何运行js语句的相关内容,有兴趣的朋友们可以参考下。
    2020-09-09
  • Qt5.14 与 OpenCV4.5 教程之图片增强效果

    Qt5.14 与 OpenCV4.5 教程之图片增强效果

    这篇文章主要介绍了Qt5.14 与 OpenCV4.5 教程之图片增强效果的实现,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • django2+uwsgi+nginx上线部署到服务器Ubuntu16.04

    django2+uwsgi+nginx上线部署到服务器Ubuntu16.04

    这篇文章主要介绍了django2+uwsgi+nginx上线部署到服务器Ubuntu16.04,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Windows 平台做 Python 开发的最佳组合(推荐)

    Windows 平台做 Python 开发的最佳组合(推荐)

    在 Windows 上如何做 Python 开发呢?相信大神们都会有自己的解决方案,但本文希望介绍微软官方发布的 Terminal 和 Visual Studio Code,希望它们能构建更流畅的 Windows 开发体验,感兴趣的朋友跟随小编一起看看吧
    2020-07-07
  • pycharm命令终端运行python文件以及传递参数方式

    pycharm命令终端运行python文件以及传递参数方式

    这篇文章主要介绍了pycharm命令终端运行python文件以及传递参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 浅谈django model的get和filter方法的区别(必看篇)

    浅谈django model的get和filter方法的区别(必看篇)

    下面小编就为大家带来一篇浅谈django model的get和filter方法的区别(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Python selenium环境搭建实现过程解析

    Python selenium环境搭建实现过程解析

    这篇文章主要介绍了Python selenium环境搭建实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Python中最快的循环姿势实例详解

    Python中最快的循环姿势实例详解

    python给我们提供了多个循环方法,比如while循环、for循环等,下面这篇文章主要给大家介绍了关于Python中最快的循环姿势,需要的朋友可以参考下
    2021-11-11

最新评论