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中的闭包和装饰器
Jun 12 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
python语言中with as的用法使用详解
Feb 23 Python
深入分析python中整型不会溢出问题
Jun 18 Python
Python实现的简单计算器功能详解
Aug 25 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
python交互模式基础知识点学习
Jun 18 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 Python
详解python中的异常和文件读写
Jan 03 Python
Python 转移文件至云对象存储的方法
Feb 07 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 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
js event事件的传递与冒泡处理
2009/12/06 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
python中import与from方法总结(推荐)
2019/03/21 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
tornado+celery的简单使用详解
2019/12/21 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
捐书活动总结
2014/05/04 职场文书
土建施工员岗位职责
2014/07/16 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
大学团日活动总结书
2015/05/11 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python