基于Pytorch的猫狗图片分类【Cat vs Dog】

本文详细介绍了如何使用Pytorch在Kaggle的CatvsDog数据集上实现LeNet、AlexNet和ResNet等经典CNN模型,研究了数据集大小、数据增强和dropout等因素对模型性能的影响,以及迁移学习的应用,旨在深化对深度学习的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

猫狗分类来源于Kaggle上的一个入门竞赛——Dogs vs Cats。为了加深对CNN的理解,基于Pytorch复现了LeNet,AlexNet,ResNet等经典CNN模型,并探究哪些因素会对模型预测效果有明显影响(如模型结构、数据量、是否采用数据增强、dropout等等),源代码放在GitHub上,地址传送点击此处。项目大纲如下:
在这里插入图片描述



一、问题描述

基于训练集数据,训练一个模型,利用训练好的模型预测未知图片中的动物是狗或者猫的概率。

训练集有25,000张图片,测试集12,500 张图片。

数据集下载地址:https://www.kaggle.com/datasets/shaunthesheep/microsoft-catsvsdogs-dataset

截屏2024-02-19 15.56.01

二、数据集处理

1 损坏图片清洗

01_clean.py中,用多种方式来清洗损坏图片:

  1. 判断开头是否有JFIF
  2. 用imghdr库中的imghdr.what函数判断文件类型
  3. 用Image.open(filename).verify()验证图片是否损坏

结果如下:

截屏2022-04-20 下午1.54.15

2 抽取图片形成数据集

由于一万多张图片比较多,并且需要将Cat类和Dog类的图片合在一起并重新命名,方便获得每张图片的labels,我们将从原数据集文件夹复制任意给定数量图片train的文件夹,并且重命名如下:

截屏2022-04-22 下午3.58.33

程序为:02_data_processing.py.

三、图片预处理

图片预处理部分需要完成:

  1. 对图片的裁剪:将大小不一的图片裁剪成神经网络所需的,我选择的是裁剪为(224x224)
  2. 转化为张量
  3. 归一化:三个方向归一化
  4. 图片数据增强
  5. 形成加载器:返回图片数据和对应的标签,利用Pytorch的Dataset包

dataset.py中定义Mydata的类,继承pytorch的Dataset,定义如下三个方法:

(1)init 方法

读取图片路径,并拆分为数据集和验证集,完成对图片的处理(以下代码仅体现结构,具体见源码):

class Mydata(data.Dataset):
    """定义自己的数据集"""
    def __init__(self, root, Transforms=None, train=True):
        """进行数据集的划分"""
        if train:
            self.imgs = imgs[:int(0.8*imgs_num)]  #80%训练集
        else:
            self.imgs = imgs[int(0.8*imgs_num):]  #20%验证集
        """定义图片处理方式"""
        if Transforms is None:
            normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], 
                                            std=[0.229, 0.224, 0.225])
            self.transforms = transforms.Compose(
                    [ transforms.CenterCrop(224), 
                    transforms.Resize([224,224]),
                    transforms.ToTensor(
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值