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 相关文章推荐
Windows下实现Python2和Python3两个版共存的方法
Jun 12 Python
浅谈Python的文件类型
May 30 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
python自定义异常实例详解
Jul 11 Python
python2.7和NLTK安装详细教程
Sep 19 Python
使用Python处理BAM的方法
Sep 28 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
实时获取Python的print输出流方法
Jan 07 Python
python实现可逆简单的加密算法
Mar 22 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
Python collections.deque双边队列原理详解
Oct 05 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中其实也可以用方法链
2011/11/10 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
php fread读取文件注意事项
2016/09/24 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
Python编程中的异常处理教程
2015/08/21 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
《最大的“书”》教学反思
2014/02/14 职场文书
《春天来了》教学反思
2014/04/07 职场文书
化妆品活动策划方案
2014/05/23 职场文书
欢迎标语大全
2014/06/21 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
安全承诺书格式范本
2015/04/28 职场文书