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网站验证码识别
Jan 25 Python
Python 中迭代器与生成器实例详解
Mar 29 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
详解Python sys.argv使用方法
May 10 Python
python3 反射的四种基本方法解析
Aug 26 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
Python socket聊天脚本代码实例
Jan 02 Python
Python 中@property的用法详解
Jan 15 Python
Python IO文件管理的具体使用
Mar 20 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
nodeJS微信分享
2017/12/20 NodeJs
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
python模拟Django框架实例
2016/05/17 Python
详解python之简单主机批量管理工具
2017/01/27 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python处理中文标点符号大集合
2018/05/14 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
Python生成器generator原理及用法解析
2020/07/20 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
大学生毕业的自我鉴定
2013/11/13 职场文书
作弊检讨书1000字
2014/02/01 职场文书
平安校园建设方案
2014/05/02 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
成绩单评语
2015/01/04 职场文书
研究生个人学年总结
2015/02/14 职场文书
任命书怎么写
2015/03/02 职场文书
被告代理词范文
2015/05/25 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby