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开发编码规范
Sep 08 Python
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
python 读写文件,按行修改文件的方法
Jul 12 Python
Python基本socket通信控制操作示例
Jan 30 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
Python编程快速上手——疯狂填词程序实现方法分析
Feb 29 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
为什么称python为胶水语言
Jun 16 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
简单采集了yahoo的一些数据
2007/02/14 PHP
PHP生成带有雪花背景的验证码
2008/09/28 PHP
PHP Pear 安装及使用
2009/03/19 PHP
javascript知识点收藏
2007/02/22 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
复制粘贴功能的Python程序
2008/04/04 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
python计算文本文件行数的方法
2015/07/06 Python
Python iter()函数用法实例分析
2018/03/17 Python
基于python实现学生管理系统
2018/10/17 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
python+mysql实现教务管理系统
2019/02/20 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
四年级科学教学反思
2014/02/10 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
教师师德师风整改措施
2014/10/24 职场文书
公务员个人总结
2015/02/12 职场文书
安全生产标语口号
2015/12/26 职场文书