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和MD5实现网站挂马检测程序
Mar 13 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
python使用if语句实现一个猜拳游戏详解
Aug 27 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
Python 解析xml文件的示例
Sep 29 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
详解python3 GUI刷屏器(附源码)
Feb 18 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实现选择排序的解决方法
2013/05/04 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python实现从web抓取文档的方法
2014/09/26 Python
Python抓取百度查询结果的方法
2015/07/08 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
Python使用type动态创建类操作示例
2020/02/29 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
园林资料员岗位职责
2013/12/30 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
质量保证书范本
2014/04/29 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
信仰纪录片观后感
2015/06/08 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
pytorch Dropout过拟合的操作
2021/05/27 Python
Python基础知识学习之类的继承
2021/05/31 Python
深入理解python协程
2021/06/15 Python