准备数据集

2023-10-31

目录

介绍

足够的数据集

收集图像

调整图像大小

下一步


在这里,我们简要说明了数据集的要求。然后,我们提出了收集数据的方法:在Internet上搜索图像,搜索视频并从中上传帧。然后,我们提供一些找到的视频的参考。然后,我们说明使用可用工具进行数据收集的基本步骤。然后,我们提供用于数据预处理的Python代码。最后,我们演示收集的图像示例。

介绍

野蛮的野生生物可能给企业和房主带来痛苦。鹿、驼鹿甚至猫等动物都会对花园、庄稼和财产造成破坏。

在本系列文章中,我们将演示如何在Raspberry Pi上实时(或近实时)检测有害生物(例如驼鹿),然后采取措施消除有害生物。由于我们不想造成任何伤害,我们将通过播放巨大的噪音来吓跑害虫。

欢迎您下载该项目的源代码。我们假设您熟悉Python并且对神经网络的工作原理有基本的了解。

上一篇文章中,我们讨论了检测外来有害生物的方法——大多数经过预先训练的DNN模型中都没有考虑的那些生物。我们决定开发和训练我们自己的分类器DNN模型,并将其与运动检测算法结合使用。在本文中,我们将看到如何为DNN分类器准备足够的数据集。

足够的数据集

某一特定数据集是否适合某一特定的DNN模型取决于该模型希望解决的问题。我们将要检测到的害虫是驼鹿,我们希望在现实生活中检测到这种动物。显然,我们的数据集必须包含许多具有驼鹿特征的图像。

图像中的动物应从各种角度和各种姿势进行拍摄。可接受的最小图像数量取决于DNN模型和所需的精度。通常,深度学习研究人员建议每个对象类别10005000张图像。

为了在现实生活中检测驼鹿,我们应该能够将驼鹿与任何在给定帧中可能存在的所有其他物体区分开。因此,我们需要两个对象类别:驼鹿背景(不是驼鹿)。

收集图像

第一步是收集相关图像。最简单的方法是搜索互联网并保存找到的图像。这是一个漫长而无聊的过程,但是我们需要大量图像来训练我们自己的DNN模型。

这也是重要的一课。数据采集​​和准备通常是AI项目中最困难的部分。除非您从事前沿研究,否则您可能不会设计新的神经网络体系结构。如果您尚未准备好要解决的大型、干净的数据集,则可以期望在这里花费70%(或更多!)的AI项目时间。

在这种情况下,我们可以通过搜索视频而不是单独的图像来简化和加快流程。首先,我们搜索并下载带有驼鹿的视频。然后,我们从视频文件中提取帧。让我们走这条路。

快速搜索会产生令人惊讶的驼鹿视频列表。这里有些例子:

接下来,我们下载视频文件,并使用VLC播放器提取相关的帧。VLC使您可以逐帧观看视频并将帧从任何时间标记上载到磁盘。在我们的案例中,这导致174张包含驼鹿的图像。以下是一些示例帧:

其中带有驼鹿的帧不包含用于DNN训练的完整数据集。要训​​练分类器,数据集中的所有图像必须具有相同的大小,并且每个分类对象都必须作为一个整体,例如使用Cascade Trainer GUI。不要忘记,我们也需要背景类的样本。我们可以通过剪掉驼鹿而从相同的框架中获得它们。

调整图像大小

由于裁剪后的图像可能具有不同的尺寸,因此让我们使用一些自定义的Python代码自动调整其尺寸:

import os

class FileUtils:
    @staticmethod
    def get_files(folder):
        files = []
        filenames = os.listdir(folder)
        for (i, fname) in enumerate(filenames):
            fullpath = os.path.join(folder, fname)
            files.append(fullpath)
        return files

import cv2

class Resizer:
    def __init__(self, size):
        self.size = size
        
    def process(self, source, dest):
        files = FileUtils.get_files(source)
        if not os.path.isdir(dest):
            os.mkdir(dest)
        for (i, fname) in enumerate(files):
            img = cv2.imread(fname)
            (h, w, c) = img.shape
            if w>h :
                dx = int((w-h)/2)
                img = img[0:h, dx:dx+h]
            else:
                if h>w :
                    dy = int((h-w)/2)
                    img = img[dy:dy+w, 0:w]
            resized = cv2.resize(img, (self.size, self.size), cv2.INTER_AREA)
            f = os.path.basename(fname)
            dfname = os.path.join(dest, f)
            cv2.imwrite(dfname, resized)

该代码使用OpenCV软件包中的函数从源文件夹加载示例图像,调整其大小并将其保存到目标目录。请注意,图像缩放器仅接收一个初始化参数:size

大多数用于图像处理的卷积网络都使用正方形输入图像,因此我们将使我们的调整程序将原始图像转换为正方形。调整大小算法考虑到初始图像可能不是正方形的事实。为避免对象变形,该算法首先从图像中裁剪出居中的正方形片段,然后调整其大小。

现在,让我们运行代码并处理图像:

source = r"C:\PI_PEST\moose_cropped"
dest = r"C:\PI_PEST\moose_resized"

resizer = Resizer(128)
resizer.process(source, dest)

这为我们的数据集提供了正确大小的样本。

现在,我们总共获得了484个样本:驼鹿类别为200个项目,背景(非驼鹿)对象为284个项目。

下一步

484张图像不足以训练我们的DNN以获得高精度。我们可以找到更多视频文件并提取更多帧以增加数据集的大小,但是有更好的方法。在接下来的文章中,我们将看到同样的结果可以通过数据扩张来实现。

https://www.codeproject.com/Articles/5289750/Preparing-Dataset

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

准备数据集 的相关文章

随机推荐

  • Centos7安装配置NFS服务和挂载

    一 安装 NFS 服务器所需的软件包 1 yum install y nfs utils 二 编辑exports文件 添加从机 1 2 vim etc exports data 192 168 0 100 rw sync fsid 0 19
  • C++基础[1]

    目录 1 命名空间 2 缺省参数 3 函数重载 4 引用 5 指针vs引用 6 为什么C语言不支持函数重载 C 支持 7 C与C 能互相调用库吗 gt 可以 8 内联函数 9 auto关键字 10 nullptr 1 命名空间 第一次打印在
  • oracle 学习摘记

    常用函数 1字符函数 1 1转换函数 lower 大写转小写 upper 小写转大写 initcap 首字母转为大写 1 2 字符操作函数 concat 连接字符串 substr 取子串 length 取长度 instr 取得位置值 lpa
  • Gitlab之修改克隆地址

    问题 安装好Gitlab 创建项目之后 我就把自己的代码推送到了Gitlab上 但是当别的开发人员去克隆的时候 发现羡慕中的克隆地址是这样的 SSH和HTTP的克隆地址都都为gitlab example com 虽然我可以把这个地址复制下来
  • 无需租用云服务器:使用Linux本地搭建web服务并实现内网穿透发布公网访问的详细教程

    文章目录 前言 1 本地搭建web站点 2 测试局域网访问 3 公开本地web网站 3 1 安装cpolar内网穿透 3 2 创建http隧道 指向本地80端口 3 3 配置后台服务 4 配置固定二级子域名 5 测试使用固定二级子域名访问本
  • 【C++多继承】虚继承

    目录 1 多继承 菱形继承 2 虚继承 3 总结 1 多继承 菱形继承 单继承 一个子类只有一个直接父类时称这个继承关系为单继承 多继承 一个子类有两个或以上直接父类时称这个继承关系为多继承 菱形继承 菱形继承是多继承的一种特殊情况 菱形继
  • 使用粒子群算法求解生产调度问题的matlab实现

    使用粒子群算法求解生产调度问题的matlab实现 粒子群算法 Particle Swarm Optimization 是一种常用的优化算法 其思想源于鸟群觅食的行为 该算法通过模拟鸟群觅食的行为 在搜索空间中寻找最优解 在生产调度问题中 我
  • 谷歌自动化插件Automa简单使用

    前言 Automa是一款比较好用的自动化插件 可以利用它减少机械化操作 如打开网页 批量添加数据 测试流水线 下载安装 目前Github地址已经找不到下载地址了 可以在百度上搜索Automa下载 下载成功之后 进入谷歌输入 chrome e
  • neo4j 4.x新建数据库,并解决报错Unsupported administration command: CREATE DATABASE

    重要 社区版本不支持命令create database xxx 只有企业版可以 社区版本只允许同时打开一个数据库 当然你可以多开几个neo4j服务 当你打开成新的数据库后 除了新数据库和system 其他的数据库就无法访问啦 但是它们依旧存
  • SAP T CODE : Description (Program)

    SAP T CODE Description Program V Quickstart RKCOWUSL RKCOWUSL V 01 Create Sales Call SAPMV43A V 02 Create Telephone Call
  • 修改shell命令提示符和命令的输入颜色

    修改命令提示符颜色 修改命令提示符的话 只需修改PS1环境变量即可 PS1 033 01 31m u h W 033 00m 效果如图 修改命令输入的颜色 修改命令输入的颜色 思路是不关闭PS1的颜色 然后在每次敲下回车键执行命令的时候自动
  • 自己动手实现一个神经网络多分类器

    本文由 罗周杨stupidme me lzy gmail com 原创 转载请注明作者和出处 未经授权 不得用于商业用途 不使用任何深度学习框架 实现一个简单的神经网络用来分类 手把手带你搭建神经网络 包括损失函数的选择 已经手写反向传播代
  • 最优清零方案 蓝桥杯 2138 python实现

    问题描述 给定一个长度为 N 的数列 A1 A2 AN 现在小蓝想通过若干次操作将 这个数列中每个数字清零 每次操作小蓝可以选择以下两种之一 选择一个大于 0 的整数 将它减去 1 选择连续 K 个大于 0 的整数 将它们各减去 1 小蓝最
  • 数组模拟栈和队列

    全文目录 数组实现栈 数组实现队列 数组实现的循环队列 数组实现栈 元素的出入只在栈顶进行 所以在实现的时候只需要标记栈顶就行了 因为每次插入元素都需要先 tt 所以 tt 可以从 1 开始 tt表示栈顶 int stk N tt 1 向栈
  • (16) 基于图卷积神经网络的轨道交通流量预测

    交通预见未来 16 基于图卷积神经网络的轨道交通流量预测 1 文章信息 Predicting Station Level Short Term Passenger Flow in a Citywide Metro Network Using
  • 计算机c盘突然少了几个G,做系统时c盘显示0容量-关于Windows系统c盘突然没了十几个g...

    既然系统默认装软件是c盘 那为什么不把c盘空间做大点呢 C盘是系统盘 多大容量完全是自己分出来的 你的c盘容量应该是别人给分的 一般为了电脑速度快一些 会用SSD做系统盘 你说你就一个1T的硬盘 那其实可以完全分成一个区 也就是就一个C盘
  • 如何提取OneDrive文件直链?

    原理 原链接 https xxxx my sharepoint com x g personal xx xx xx xxxxxxxxxx 直链 https xxxx my sharepoint com personal xx xx xx l
  • CNN之手写数字识别(Handwriting Recognition)

    CNN之手写数字识别 Handwriting Recognition 目录 CNN之手写数字识别 Handwriting Recognition 1 常用的包 2 常见概念 3 手写数字识别器实现 3 1 数据准备 3 2 构建网络 3 3
  • VB基础语法

    一 基础概念 1 1变量 变量的定义格式 Dim Private Static Public 变量名 As 数据类型 Dim Private Static Public 就是我之前所说的权限的意思 As 数据类型 这个是可选项 你可以为这个
  • 准备数据集

    目录 介绍 足够的数据集 收集图像 调整图像大小 下一步 在这里 我们简要说明了数据集的要求 然后 我们提出了收集数据的方法 在Internet上搜索图像 搜索视频并从中上传帧 然后 我们提供一些找到的视频的参考 然后 我们说明使用可用工具