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


Posted in Python onMarch 23, 2022

一、使用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 相关文章推荐
Python重新引入被覆盖的自带function
Jul 16 Python
Python生成随机密码
Mar 10 Python
Python文本处理之按行处理大文件的方法
Apr 09 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
python安装本地whl的实例步骤
Oct 12 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
Django中使用Json返回数据的实现方法
Jun 03 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
Nov 11 Python
python excel多行合并的方法
Dec 09 Python
python多线程方法详解
Jan 18 Python
Python借助with语句实现代码段只执行有限次
Mar 23 #Python
python3 字符串str和bytes相互转换
Mar 23 #Python
对象析构函数__del__在Python中何时使用
详解Python内置模块Collections
Mar 22 #Python
Python中 range | np.arange | np.linspace三者的区别
Python中非常使用的6种基本变量的操作与技巧
python使用torch随机初始化参数
Mar 22 #Python
You might like
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
php类常量用法实例分析
2015/07/09 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
限制复选框的最大可选数
2006/07/01 Javascript
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
详解vue 组件
2020/06/11 Javascript
python 中的list和array的不同之处及转换问题
2018/03/13 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
python生成大写32位uuid代码
2020/03/03 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
广告设计专业自荐信范文
2013/11/14 职场文书
家长对小学生的评语
2014/01/28 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
工作求职信
2014/07/04 职场文书
目标责任书格式
2014/07/28 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
死亡证明书样本说明
2014/10/18 职场文书
失职检讨书大全
2015/01/26 职场文书
防震减灾主题班会
2015/08/14 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python