建立自己的图像数据集

适用范围

1、python机器学习库scikit learn

2、有监督/无监督

代码组成

1、裁剪图片建立初始图像数据集

2、将图像数据集转换为可以训练的模式

我们在运用机器学习算法对图像进行分类、识别时,是将二维矩阵拉成一维向量。sklearn提供的手写字符数据集由data和target两部分组成。

from sklearn import datasets

MNIST = datasets.load_digits()

print MNIST.data.shape,MNIST.target.shape

print type(MNIST.data),type(MNIST.target)

这里写图片描述

可以看到data是一个1797 * 64 的ndarray数组,target是 1797 *1 的ndarray数组。说明一共有1797张图片,每张图片是由64个像素组成。我们的目标是将自己的图像数据集中的每一张图片变成一个向量,将所有向量组成一个ndarray的数组。

一、建立初始图像数据集

参考

python+OpenCV 鼠标交互图片切割矩形区域
https://www.jianshu.com/p/5f7df3d8b237

笔者只是在参考的代码上做了小小改动,将只能截取一次变成可以截取多次。

效果演示

1、截取图片

这里写图片描述

这里写图片描述

2、图片保存

我们在这里截取两张图片为例,然后按ESC键退出程序

这里写图片描述

截取的图片就被保存在相应的文件夹中

3、代码释义

注意在运用代码的过程中有些地方是需要自己进行改动的,我已在下面的代码部分进行说明

# -- coding: utf-8 --
import cv2
global img
global point1, point2

# 要截取的图片的大小(根据情况自行改动)
width =50
height =50

# 要截取的图片的路径 (我是与py文件放在同一级,要根据自己情况进行改动)
imgpath='img.jpg'

#获取鼠标事件的函数
def on_mouse(event, x, y, flags, param):
    flag = 1
    global img, point1, point2,count
    img2 = img.copy()
    # while (flag):
    if event == cv2.EVENT_LBUTTONDOWN:  # 左键点击
        point1 = (x, y)
        cv2.circle(img2, point1, 10, (0, 255, 0), 5)
        cv2.imshow('image', img2)
    elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON):  # 按住左键拖曳
        cv2.rectangle(img2, point1, (x, y), (255, 0, 0), 5)
        cv2.imshow('image', img2)
    elif event == cv2.EVENT_LBUTTONUP:  # 左键释放
        point2 = (x, y)
        cv2.rectangle(img2, point1, point2, (0, 0, 255), 5)
        cv2.imshow('image', img2)
        min_x = min(point1[0], point2[0])
        min_y = min(point1[1], point2[1])
        cut_img = img[min_y:min_y + width, min_x:min_x + height]
        #文件存放路径与文件名(根据自己情况进行改动)
        cv2.imwrite('smaple\\%s_remote'%(count) + '.bmp', cut_img)
        count = count + 1
        print count


def main():
    global img,count
    count =2000
    img = cv2.imread(imgpath)
    cv2.namedWindow('image')
    # while(1):
    cv2.setMouseCallback('image', on_mouse)
    while(1):
        cv2.imshow('image', img)
        #27是ESC的ASCII码,表示只有按下ESC键才会关闭窗口
        if (cv2.waitKey(0) == 27):
            break;

if __name__ == '__main__':
    main()

要注意的地方

1、文件名,由于接下来对数据集提取target(类别)是建立在文件名的基础上,所以请保持原有格式进行改动

格式 1000_name.jpg

1000中的1是表示类别,及count要赋予的初始值,count会在此基础上自动计数,不改变类别。如果要截取不同类别的,需要为count赋予其他的初值,如2000,3000

2、由于所处理的图像数据大小应该一致,所以在width与height时是写死的,不用担心所截图的大小是否超出预期

二、数据集格式转换

这部分就不再详细介绍只说明使用的方法

使用说明

1、在文件头部引入相应的py模块

2、运用函数

image_datasets()

输入:数据集所在的文件夹

输出:data ,target

from sklearn_data import *

path = "sample\\"

data,target = image_datasets(path)

即可获得sklearn可以运用的数据集

希望可以帮助到大家,代码放在了git上,欢迎大家使用

https://github.com/nanbei629/build_datasets

  • 6
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将自己的数据集用于训练HRNet图像分割模型,您需要按照以下步骤操作: 1. 将您的数据集组织成适合HRNet图像分割训练的格式。通常,您的数据集应该包含两个文件夹:一个存放图像的文件夹和一个存放对应标签的文件夹。 2. 在HRNet代码库的hrnet/hrnet-semantic-segmentation目录下创建一个新的文件夹,用于存放您的数据集。 3. 将您的图像文件夹复制到新创建的文件夹中。 4. 使用图像分割标注工具标记您的图像,生成对应的标签图像,并将这些标签图像存放在标签文件夹中。 5. 修改hrnet_ocr.cpp文件,以适应您的数据集。根据您的数据集文件组织方式,您需要修改加载数据的代码,使其正确读取您的图像和标签。 6. 在训练之前,您还需要确保您的数据集的标签数与模型预训练权重文件对应的标签数相匹配。如果不匹配,您需要相应地修改模型的输出层,以适应您的数据集的标签数。 7. 根据您的训练需求,在hrnet/hrnet-semantic-segmentation目录下创建一个新的配置文件,指定训练时的超参数、数据集路径等。 8. 使用您修改后的代码和配置文件,开始训练您的HRNet图像分割模型。您可以使用深度学习框架如TensorFlow或PyTorch进行训练。 请注意,以上步骤仅为一般指导,具体操作可能因您的数据集和代码库的不同而有所差异。您需要根据实际情况进行调整和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值