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字符编码判断方法分析
Jul 01 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
python 自动重连wifi windows的方法
Dec 18 Python
Python多进程fork()函数详解
Feb 22 Python
Django异步任务之Celery的基本使用
Mar 23 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
Python自动登录QQ的实现示例
Aug 28 Python
python 线程的五个状态
Sep 22 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 Python
Python字符串格式化方式
Apr 07 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
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
prototype 中文参数乱码解决方案
2009/11/09 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python paramiko模块的使用示例
2018/04/11 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
解决Python使用列表副本的问题
2019/12/19 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
django rest framework serializers序列化实例
2020/05/13 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
大三毕业自我鉴定
2014/01/15 职场文书
高二英语教学反思
2014/01/19 职场文书
六年级学生评语
2014/04/22 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang