图片处理datasets示例(COCO)

news2026/2/11 19:42:52

在这个数据驱动的时代,计算机视觉作为人工智能的一个重要分支,正以前所未有的速度改变着我们的生活。从人脸识别到自动驾驶,从医疗影像分析到增强现实,计算机视觉的应用无处不在。而这一切的基石,正是那些精心构建、标注丰富的图片处理数据集。今天,让我们一起探索几个在计算机视觉领域具有里程碑意义的图片处理datasets,了解它们如何推动技术的边界,以及如何利用这些资源开展自己的研究项目。

COCO(Common Objects in Context)

简介:COCO是一个大型、复杂的图像数据集,专注于日常场景中常见对象的检测、分割和图像描述生成。它包含超过30万张图像和250万个对象实例,覆盖了91个类别。COCO强调上下文信息的利用,鼓励算法不仅识别对象,还要理解它们之间的关系。

应用:COCO数据集对于提升复杂场景下的目标检测和分割能力至关重要。它推动了如YOLOv3、DETR等先进检测算法的发展,并在图像描述生成领域也发挥着重要作用。

下面是一段datasets代码示例:

import glob  
import random  
import os  
import sys  
import numpy as np  
from PIL import Image  
import torch  
import torch.nn.functional as F  
from utils.augmentations import horisontal_flip  # 从utils.augmentations模块导入水平翻转函数  
from torch.utils.data import Dataset  
import torchvision.transforms as transforms  
  
# 将图像填充为正方形  
def pad_to_square(img, pad_value):  
    c, h, w = img.shape  # 获取图像的通道数、高度和宽度  
    dim_diff = np.abs(h - w)  # 计算高度和宽度的差值  
    pad1, pad2 = dim_diff // 2, dim_diff - dim_diff // 2  # 计算上下或左右需要填充的像素数  
    pad = (0, 0, pad1, pad2) if h <= w else (pad1, pad2, 0, 0)  # 根据图像是更宽还是更高来决定填充的方向  
    img = F.pad(img, pad, "constant", value=pad_value)  # 使用指定的填充值对图像进行填充  
    return img, pad  
  
# 调整图像大小  
def resize(image, size):  
    image = F.interpolate(image.unsqueeze(0), size=size, mode="nearest").squeeze(0)  # 使用最近邻插值调整图像大小  
    return image  
  
# 随机调整图像大小,用于多尺度训练  
def random_resize(images, min_size=288, max_size=448):  
    new_size = random.sample(list(range(min_size, max_size + 1, 32)), 1)[0]  # 随机选择一个新大小  
    images = F.interpolate(images, size=new_size, mode="nearest")  # 调整图像大小  
    return images  
  
# 继承自Dataset的图像文件夹类,用于加载文件夹中的图像  
class ImageFolder(Dataset):  
    def __init__(self, folder_path, img_size=416):  
        self.files = sorted(glob.glob("%s/*.*" % folder_path))  # 获取文件夹中的所有文件路径,并按顺序排序  
        self.img_size = img_size  # 设置图像的目标大小  
  
    def __getitem__(self, index):  
        img_path = self.files[index % len(self.files)]  # 获取图像路径  
        img = transforms.ToTensor()(Image.open(img_path))  # 将图像转换为PyTorch张量  
        img, _ = pad_to_square(img, 0)  # 将图像填充为正方形  
        img = resize(img, self.img_size)  # 调整图像大小  
        return img_path, img  # 返回图像路径和图像张量  
  
    def __len__(self):  
        return len(self.files)  # 返回数据集中的图像数量  
  
# 继承自Dataset的列表数据集类,用于加载带有标签的图像  
class ListDataset(Dataset):  
    def __init__(self, list_path, img_size=416, augment=True, multiscale=True, normalized_labels=True):  
        with open(list_path, "r") as file:  
            self.img_files = file.readlines()  # 读取包含图像路径的文件  
  
        # 根据图像路径生成对应的标签文件路径  
        self.label_files = [  
            path.replace("images", "labels").replace(".png", ".txt").replace(".jpg", ".txt")  
            for path in self.img_files  
        ]  
        self.img_size = img_size  # 设置图像的目标大小  
        self.max_objects = 100  # 设置每张图像中最大对象数(YOLOv3中的默认设置)  
        self.augment = augment  # 是否进行数据增强  
        self.multiscale = multiscale  # 是否进行多尺度训练  
        self.normalized_labels = normalized_labels  # 标签是否归一化  
        self.min_size = self.img_size - 3 * 32  # 多尺度训练时的最小尺寸  
        self.max_size = self.img_size + 3 * 32  # 多尺度训练时的最大尺寸  
        self.batch_count = 0  # 批处理计数器  
  
    def __getitem__(self, index):  
        # 读取图像路径并进行处理  
        img_path = self.img_files[index % len(self.img_files)].rstrip()  
        img_path = r'F:\人工智能学习\深度学习课件\代码\第7章yolo\PyTorch-YOLOv3\PyTorch-YOLOv3\\' + img_path  
        img = transforms.ToTensor()(Image.open(img_path).convert('RGB'))  # 将图像转换为RGB格式并转换为PyTorch张量  
  
        # 处理非三通道图像  
        if len(img.shape) != 3:  
            img = img.unsqueeze(0).expand((3, img.shape[1:]))  # 将图像扩展为三通道  
  
        _, h, w = img.shape  # 获取图像的通道数、高度和宽度  
        h_factor, w_factor = (h, w) if self.normalized_labels else (1, 1)  # 根据是否归一化标签来计算高度和宽度的比例因子  
  
        # 将图像填充为正方形  
        img, pad = pad_to_square(img, 0)  
        _, padded_h, padded_w = img.shape  # 获取填充后的图像尺寸  
  
        # 读取标签文件并进行处理  
        label_path = self.label_files[index % len(self.img_files)].rstrip()  
        label_path = r'E:\Python\jiqistudy\code\yolo\PyTorch-YOLOv3\\' + label_path  
        targets = None  
        if os.path.exists(label_path):  
            boxes = torch.from_numpy(np.loadtxt(label_path).reshape(-1, 5))  
            # Extract coordinates for unpadded + unscaled image,
            # COCO数据集中的.txt文件每个字段的含义:
            # class_num:类别编号,从1开始。
            # box_cx:归一化后的中心横坐标,即像素坐标的cx除以图像宽度的结果。
            # box_cy:归一化后的中心纵坐标,即像素坐标的cy除以图像高度的结果。
            # box_w:归一化后的标注框宽度,即标注框宽度除以图像宽度的结果。
            # box_h:归一化后的标注框高度,即标注框高度除以图像高度的结果
            # 读取标签文件并转换为PyTorch张量  
            # 将标签文件中的归一化坐标转换为像素坐标,并考虑填充  
            x1 = w_factor * (boxes[:, 1] - boxes[:, 3] / 2)  
            y1 = h_factor * (boxes[:, 2] - boxes[:, 4] / 2)  
            x2 = w_factor * (boxes[:, 1] + boxes[:, 3] / 2)  
            y2 = h_factor * (boxes[:, 2] + boxes[:, 4] / 2)  
            x1 += pad[0]  
            y1 += pad[2]  
            x2 += pad[1]  
            y2 += pad[3]  
            # 将填充后的坐标转换回归一化坐标,但基于填充后的图像尺寸  
            boxes[:, 1] = ((x1 + x2) / 2) / padded_w  
            boxes[:, 2] = ((y1 + y2) / 2) / padded_h  
            boxes[:, 3] *= w_factor / padded_w  
            boxes[:, 4] *= h_factor / padded_h  
  
            targets = torch.zeros((len(boxes), 6))  # 初始化目标张量  
            targets[:, 1:] = boxes  # 填充目标张量  
  
        # 进行数据增强  
        if self.augment:  
            if np.random.random() < 0.5:  
                img, targets = horisontal_flip(img, targets)  # 以50%的概率进行水平翻转  
  
        return img_path, img, targets  # 返回图像路径、图像张量和目标张量  
  
    # 自定义的collate_fn函数,用于在数据加载时对每个批次进行处理  
    def collate_fn(self, batch):  
        paths, imgs, targets = list(zip(*batch))  # 解包批次数据  
        targets = [boxes for boxes in targets if boxes is not None]  # 移除空的目标张量  
        for i, boxes in enumerate(targets):  
            boxes[:, 0] = i  # 为每个目标添加样本索引  
        targets = torch.cat(targets, 0)  # 将目标张量按行拼接  
        if self.multiscale and self.batch_count % 10 == 0:  # 每十个批次调整一次图像大小  
            self.img_size = random.choice(range(self.min_size, self.max_size + 1, 32))  
        imgs = torch.stack([resize(img, self.img_size) for img in imgs])  # 调整图像大小  
        self.batch_count += 1  # 更新批处理计数器  
        return paths, imgs, targets  # 返回处理后的批次数据  
  
    def __len__(self):  
        return len(self.img_files)  # 返回数据集中的图像数量

结语

以上只是计算机视觉领域众多优秀数据集的一小部分,每个数据集都有其独特的价值和应用场景。选择合适的数据集对于项目的成功至关重要,它不仅决定了模型能学到什么,还直接影响到最终结果的准确性和泛化能力。随着技术的不断进步和数据的持续积累,未来我们将看到更多高质量、多样化的图片处理数据集,为计算机视觉的发展注入新的活力。如果你正投身于这一领域,不妨从这些经典数据集开始,开启你的探索之旅吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python自动化测试中的Mock与单元测试实战

在软件开发过程中&#xff0c;自动化测试是确保代码质量和稳定性的关键一环。而Python作为一门灵活且强大的编程语言&#xff0c;提供了丰富的工具和库来支持自动化测试。本文将深入探讨如何结合Mock与单元测试&#xff0c;利用Python进行自动化测试&#xff0c;以提高代码的可…

前端获取csv或者excel 静态数据并使用

这里我将空格全部替换成了 || 好让我变成数组&#xff0c;从而拿到每一条数据中的第一项&#xff0c;相当于excel或者csv文件的第一列的东西 axios.get("/csv/zhongxiang").then((res) > {let rows res.data.split("\n");for (let row of rows) {let c…

Axios 请求超时设置无效的问题及解决方案

文章目录 Axios 请求超时设置无效的问题及解决方案1. 引言2. 理解 Axios 的超时机制2.1 Axios 超时的工作原理2.2 超时错误的处理 3. Axios 请求超时设置无效的常见原因3.1 配置错误或遗漏3.2 超时发生在建立连接之前3.3 使用了不支持的传输协议3.4 代理服务器或中间件干扰3.5 …

Windows 11 24H2:阻碍新更新的硬件和软件

由于 Microsoft 对特定设备和软件配置采取了保护措施或兼容性限制&#xff0c;数千名用户无法使用 Windows 11 24H2。 微软对使用可能与 Windows 11 24H2 冲突的硬件或应用程序的特定设备设置兼容性限制&#xff0c;从而导致崩溃、性能问题、死机或其他异常行为。 这些限制将…

HelloCTF [RCE-labs] Level 6 - 通配符匹配绕过

开启靶场&#xff0c;打开链接&#xff1a; GET传参cmd /[b-zA-Z_#%^&*:{}\-\<>\"|;\[\]]/ b-zA-Z 过滤b到Z范围内的任何单个字符 _ 过滤下划线 :{}\-\<>\"| 匹配这些符号之一 ;\[\] 匹配这些符号之一 可以尝试在Linux终端中做下面的几个实验&a…

VLAN(虚拟局域网)详解:概念、原理与特点

VLAN&#xff08;虚拟局域网&#xff09;详解&#xff1a;概念、原理与特点 在现代网络中&#xff0c;尤其是企业级网络环境中&#xff0c;VLAN&#xff08;虚拟局域网&#xff09;成为一种非常重要的技术。它不仅可以提升网络的管理效率&#xff0c;还能够有效地隔离不同的设…

python机器人编程——一种3D骨架动画逆解算法的启示(上)

目录 一、前言二、fabrik 算法三、python实现结论PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源ps3.wifi小车控制相关文章资源 一、前言 我们用blender等3D动画软件时&#xff0c;会用到骨骼的动画&#xff0c;通过逆向IK动力学…

docker上传离线镜像包到Artifactory

docker上传离线镜像包到Artifactory 原创 大阳 北京晓数神州科技有限公司 2024年10月25日 17:33 北京 随着docker官方源的封禁&#xff0c;最近国内资源也出现无法拉取的问题&#xff0c;Artifactory在生产环境中&#xff0c;很少挂外网代理去官方源拉取&#xff0c;小编提供…

await前后线程切换改变,AsyncLocal<T>比ThreadLocal<T> 更适合多线程变量隔离的场景

1. await前后线程发生切换&#xff0c;不一定保留在原线程中执行&#xff1b; 2. AsyncLocal<T> 比 ThreadLocal<T> 更适合多数多线程变量隔离的场景。 从 ThreadLocal 到 AsyncLocal https://cloud.tencent.cn/developer/article/1902826

xss跨站及绕过与防护

XSS 它主要是指攻击者可以在页面中插入恶意脚本代码&#xff0c;当受害者访问这些页面时&#xff0c;浏览器会解析并执行这些恶意代码&#xff0c;从而达到窃取用户身份/钓鱼/传播恶意代码等行为。 SVG-XSS SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式&…

WDG看门狗---独立看门狗和窗口看门狗

目录 一. 前言 1. STM32内置看门狗 2. 看门狗的实质 二. 独立看门狗 1. 独立看门狗的系统框图 2. 键寄存器 3. IWDG的超时时间 三. 窗口看门狗 1. 窗口看门狗的系统框图 2. WWDG的工作特性 四. 独立看门狗和窗口看门狗的代码配置 1. 独立看门狗 2. 窗口看门狗 一. 前言 1. S…

一篇文章讲透数据结构之二叉搜索树

前言 在前面的学习过程中&#xff0c;我们已经学习了二叉树的相关知识。在这里我们再使用C来实现一些比较难的数据结构。 这篇文章用来实现二叉搜索树。 一.二叉搜索树 1.1二叉搜索树的定义 二叉搜索树&#xff08;Binary Search Tree&#xff09;是基于二叉树的一种升级版…

python:ADB通过包名打开应用

一、依赖库 os 二、命令 1.这是查看设备中所有应用包名的最简单方法。只需在命令行中输入以下命令&#xff1a; adb shell pm list packages 2.打印启动的程序包名 adb shell am monitor回车&#xff0c;然后启动你想要获取包名的那个应用&#xff0c;即可获得 3.查看正在运…

【AI开源项目】LangChain-3分钟让你知道什么是LangChain,以及LangChain的部署配置全流程

文章目录 什么是 LangChain&#xff1f;LangChain 概述主要特点 理解 Agent 和 ChainChainAgent示例简单顺序链示例 检索增强生成&#xff08;RAG&#xff09;LLM 面临的主要问题RAG 的工作流程 LangChain 核心组件1. 模型输入/输出&#xff08;Model I/O&#xff09;2. 数据连…

CXL与近内存计算结合,会发生什么?--part1

一、基础背景 传统的冯诺依曼架构虽然广泛应用于各类计算系统&#xff0c;但其分离的数据存储与处理单元导致了数据传输瓶颈&#xff0c;特别是在处理内存密集型任务时&#xff0c;CPU或GPU需要频繁地从内存中读取数据进行运算&#xff0c;然后再将结果写回内存&#xff0c;这…

React + Vite + TypeScript + React router项目搭建教程

一、创建项目 运行项目 二、目录结构 项目目录&#xff1a; ├─node_modules //第三方依赖 ├─public //静态资源&#xff08;不参与打包&#xff09; └─src├─assets //静态资源├─components //组件├─config //配置├─http //请求方法封装├─layout //页面…

SCI一区级 | Matlab实现SSA-TCN-LSTM-Attention多变量时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.基于SSA-TCN-LSTM-Attention麻雀搜索算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测&#xff0c;要求Matlab2023版以上&#xff0c;自注意力机制&#xff0c;一键单头注意力机制替换成多头注…

【Linux学习】(9)调试器gdb

前言 Linux基础工具&#xff1a;安装软件我们用的是yum&#xff0c;写代码用的是vim&#xff0c;编译代码用gcc/g&#xff0c;调试代码用gdb&#xff0c;自动化构建用make/Makefile&#xff0c;多人协作上传代码到远端用的是git。 在前面我们把yum、vim、gcc、make、git都已经学…

Linux系统下minio设置SSL证书进行HTTPS远程连接访问

文章目录 1.配置SSL证书使用HTTPS访问2.MINIO SDK 忽略证书验证3.使用受信任的证书 1.配置SSL证书使用HTTPS访问 生成域名对应的SSL证书&#xff0c;下载Apache版本&#xff0c;我目前只发现Apache这个里面有对应的私钥和证书 私钥重命名为private.key证书重命名为public.crt&…

Diffusion原理

Diffusion 文章目录 Diffusion前置知识基本介绍数学推导前向过程反向过程损失求解前置知识 马尔科夫链: 第 i i i时刻上的状态条件依赖于且仅依赖于第 i − 1 i-1 i−1时刻的状态条件,即 ​ P ( x i ∣ x i − 1 , x i − 2 , . . . , x 1 ) = P ( x i ∣ x i − 1 ) P(x…