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 03 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
详解Python locals()的陷阱
Mar 26 Python
wxPython:python首选的GUI库实例分享
Oct 05 Python
Python如何优雅获取本机IP方法
Nov 10 Python
python之array赋值技巧分享
Nov 28 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
Pycharm Plugins加载失败问题解决方案
Nov 28 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&amp;mysql(三)
2006/10/09 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
js比较日期大小的方法
2015/05/12 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
java必学必会之static关键字
2015/12/03 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
jQuery中extend函数简单用法示例
2017/10/11 jQuery
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
iview实现图片上传功能
2020/06/29 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
js实现碰撞检测
2021/01/29 Javascript
Python映射拆分操作符用法实例
2015/05/19 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
Python编程实现正则删除命令功能
2017/08/30 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
PyQt5响应回车事件的方法
2019/06/25 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
党性修养心得体会2016
2016/01/21 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
解决golang在import自己的包报错的问题
2021/04/29 Golang
Golang连接并操作MySQL
2022/04/14 MySQL