图像分类——一种适用于自定义数据集的图像剪裁方法

图像分类——一种适用于自定义数据集的图像剪裁方法

1.背景

在做图像分类时,要求输入图像十分规则,例如IMAGENET竞赛采取224×224的图像大小。但是自己准备的数据集往往是从网站中爬取,图像的尺寸不规则。对此本文探讨了一种简便的图像处理办法。

2.讨论

将size不规则的图像变为规则图像存在很多方法,最简单的就是直接resize,比如keras给出了一种解决方案,可通过调用“image_dataset_from_directory”API对图像进行resize,但是这种方法会导致图像变形,如图1和图2所示。在实际应用中,图像形变是不被期望的,容易给结果增加不确定性。
在这里插入图片描述
此时不妨提出一种简单的处理办法来解决形变问题。即选取图像的最短边为基准边规定一个正方形边框,使之在图像范围内随机滑动,剪裁出图像中的正方形子区域而不溢出图像,然后在缩放到预设定的图像大小。这样做的好处在于在训练时可以一定程度上起到数据增强的作用,同时避免了产生形变。在推理阶段,对输入图像做中心剪裁,缩放后送入网络进行预测。该方法效果如下,图3为原图,图4-图7为本文方法,图8用于推理阶段。
在这里插入图片描述
下面是简单的数学推演:
假设现有图像高和宽,我们选取最短边L作为基准边,将会产生下图中红色正方形框,款内图像为剪裁图像。输入图像有一个图像中心O,中心坐标为(cx, cy),红色边界框也有个中心,这个中心的移动范围就是线段AB。下面需要做的就是让红色正方形框的中心随机出现在线段AB上就可以了。实现步骤上假定该正方形中心框与O点重合,然后生成[-1,+1]区间内的随机数k,让k乘以线段AO的距离以便生成改变量Δx,最后计算Δx+cx便可以得到红色框的中心坐标。
在这里插入图片描述

3.实现

实现代码

import random
from PIL import Image
from matplotlib import pyplot as plt

img = Image.open('tem/0/DGQZDS_36.jpg')  # 打开图像
img_w, img_h = img.size
img_l = min(img_w, img_h)  # 正方形框边长
cx, cy = img_w // 2, img_h // 2  # 图像中心
for training in range(2):
    if training:
        k = random.uniform(-1, 1)  # 随机系数
        if img_w >= img_h:
            distance = k * (img_w // 2 - img_l // 2)
            cx += distance  # 沿着x轴平移中心坐标
        else:
            distance = k * (img_h // 2 - img_l // 2)
            cy += distance  # 沿着y轴平移中心坐标
    # 图像剪裁
    img_crop = img.crop(
        (
            int(max(0, (cx - img_l // 2))),
            int(max(0, (cy - img_l // 2))),
            int(min((cx + img_l // 2),img_w)),
            int(min((cy + img_l // 2),img_h))
        )
    )
    # 图像缩放
    img_crop_resize = img_crop.resize((224, 224), Image.ANTIALIAS)
    plt.figure("training:{}".format(training))
    plt.imshow(img_crop_resize)
plt.show()

实现效果

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要制作一个ResNet图像分类数据集,你需要遵循以下步骤: 1. 确定你的图像分类任务:决定你要训练模型来识别哪些类别的图像。例如,你可以选择动物、食物、车辆等类别。 2. 收集图像数据:收集大量属于各个类别的图像。你可以从互联网上搜索并下载图像,或者使用开放的图像数据库(如ImageNet、COCO等)。 3. 数据预处理:对收集到的图像进行预处理,以便与ResNet模型的输入要求相匹配。常见的预处理步骤包括:调整图像大小、归一化图像像素值、剪裁或填充图像等。 4. 数据标注:为每个图像分配正确的类别标签。标签应该与你在第一步中确定的类别一致。 5. 数据集划分:将数据集划分为训练集、验证集和测试集。通常,大部分数据用于训练,一小部分用于验证和测试。划分比例取决于你的数据集规模和任务要求。 6. 数据增强(可选):为了增加数据样本的多样性和模型鲁棒性,你可以应用一些数据增强技术,如旋转、翻转、裁剪、缩放等。 7. 数据加载:使用适当的库(如PyTorch、TensorFlow等)来加载和处理数据集。这些库可以帮助你以批处理的方式高效地加载数据。 8. 模型训练:使用ResNet模型或其变种,将数据集用于训练。你可以使用已有的预训练模型作为起点,或者从头开始训练一个新模型。 9. 模型评估:使用验证集对训练的模型进行评估,并根据性能指标(如准确率、精确率、召回率等)选择最佳模型。 10. 模型测试:使用测试集对最佳模型进行最后的性能评估。可以计算模型在测试集上的准确率或其他指标,以衡量其在真实环境中的表现。 11. 模型部署:将经过训练和测试的模型部署到实际应用中,如移动应用、网站或其他系统,以进行实时图像分类任务。 总之,制作一个ResNet图像分类数据集需要收集、处理、标注和划分数据,并在训练和测试过程中使用适当的技术和工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值