南京网站推广哪家便宜,网站空间里绑定好域名,做网站用的什么编程语言,网络营销有哪几种方式Python深度学习入门
第一章 Python深度学习入门之环境软件配置 第二章 Python深度学习入门之数据处理Dataset的使用 第三章 数据可视化TensorBoard和TochVision的使用 第四章 UNet-Family中Unet、Unet和Unet3的简介 第五章 个人数据集的制作 深度学习数据集的制作Python深度学…Python深度学习入门
第一章 Python深度学习入门之环境软件配置 第二章 Python深度学习入门之数据处理Dataset的使用 第三章 数据可视化TensorBoard和TochVision的使用 第四章 UNet-Family中Unet、Unet和Unet3的简介 第五章 个人数据集的制作 深度学习数据集的制作Python深度学习入门前言一、选择合适的标注工具进行标注1、Labelme2、Arcgis2.1 使用ArcMap打开原图片(tif格式图片)2.2 创建标注图层shp文件2.3 样本标注准备工作2.4 样本标注2.5 给样本不同类别赋予不同颜色二、标签图像处理1、相同对象类别合并2、shapefle文件转tif图像3、统一图像大小4、小样本制作5、创建训练样本文件夹目录总结前言 众所周知深度学习的三大要素数据、算法、算力。这三者是相辅相成的、缺一不可。但越来越多的学者开始关注算法的设计与优化而忽略了数据在深度学习中的重要地位。但数据是基础任何研究都离不开数据并且优秀的算法模型只有在大规模的数据集上进行的实验结果才具有说服力。因此今天我将向大家介绍如何制作我们自己的数据集。
一、选择合适的标注工具进行标注 随着深度学习的不断发展数据集的标注工具也是层出不穷我这里简单介绍几个然后深入介绍我目前使用的标注工具ArcGIS做遥感高光谱的同学我强力推荐这个软件
1、Labelme Lableme是一款开源的图像标注工具常用做检测分割和分类任务的图像标注它的下载和使用也是非常的方便。我们可以直接从Anaconda Prompt中通过以下指令进行安装。
pip install labelme然后等待下载完成再输入启动指令即可进行标注了。
labelme2、Arcgis Arcgis是一款非常强大的制图软件功能十分强大对于图像的制作、提取、分割等等一系列操作都可以简单完成这也是我目前使用的软件。首先我们需要下载这款软件下载链接我们可以通过这个博主的链接进行下载https://zhuanlan.zhihu.com/p/473689369
2.1 使用ArcMap打开原图片(tif格式图片) 下载完软件后我们打开ArcGis中的ArcMap软件 然后我们就需要新建一个地图模板接着我们打开右侧的文件目录结构右击文件夹链接这样我们就可以将地图模板与我们的图片文件夹进行链接方便操作。 链接完文件夹我们就可以将图片拉至我们的编辑区了。 2.2 创建标注图层shp文件 右击图片所在文件夹在该文件夹下创建Shapefile文件要素类型选择面并且一定要选择坐标系坐标系的类型要和原图的坐标系类型保持一致
2.3 样本标注准备工作 为了标注方便我们需要先将初始标注框填充颜色改为无颜色这样我们在标注的过程中就不会被颜色给遮住原图。然后我们需要给图层添加class属性来表示标注的类别右击shp图层选中打开属性表然后点击下面的箭头选中添加字段输入名称为class然后确认即可。
2.4 样本标注 添加完字段我们就点击上面编辑器选择开始编辑然后选中图层中的面然后沿着我们的标注目标对象的边缘不断点要想数据集好我们就要尽可能的让目标对象边缘精准最后通过双击结束标注最后在右侧的属性栏给这个目标对象填入类别标签(我这里是1)。
2.5 给样本不同类别赋予不同颜色 我们标注结束后我们就可以给类别不同的颜色加以区分了例如我这里有两类1类用绿色2类用黄色。首先双击图层然后选择符号系统—类别—唯一值----值字段(class)—添加值。然后将我们有的值全部(1和2)添加进来并选择颜色点击确定即可。
二、标签图像处理 通过以上处理我们将会得到一张与原图一样的标签图像如下图。那我们如何得到一个一个的小样本呢在此之前我们需要使用ArcMap对图像再次处理一下。
1、相同对象类别合并 得到一张完整的标签图像之后我们需要将同一类别的合并让属性列表最终每一个类别只有一个对象。首先双击class让类别排好序然后选中类别相同的点击编辑器中的合并按钮就可以将选中的对象合并。最终要达到每个类别最多只有一条记录如下图。
2、shapefle文件转tif图像 我们的标签图像的文件格式为shp但是我们的原图为tif因此我们需要通过ArcMap将shp转为tif。步骤流程如下图。
3、统一图像大小 为了防止后面对图像裁剪出现问题我们需要对原图和标签图像进行大小的统一。首先我们按照上面的方法创建一个新的shp图层在该图层上画一个刚好可以圈住原图内容的矩形然后保存。如下图 接着我们就可以以这个矩形为基准裁剪原图和标签图像了。步骤如下 4、小样本制作 通过以上处理我们就得到了一样尺寸一一对应的原图和标签图了接下来我们就需要对图像进行裁剪裁剪代码如下
#!/usr/bin/env python3
# codingutf-8import random
import os
import numpy as np
import sys
from shutil import copyfile, rmtreefrom argparse import ArgumentParserimport rasterio
from rasterio.windows import Windowdef creat_dataset(image_num10000, imgPathNone, labelPathNone, basePathNone):###landsat数据集img_w 224 # 切割小图的宽img_h 224 # 切割小图的长sampleImg os.path.join(basePath, sampleImgs) # 要提前创建好样本文件夹sampleImgssampleLab os.path.join(basePath, sampleLabels) # 要提前创建好样本文件夹sampleLabelsif(os.path.exists(sampleImg)):rmtree(sampleImg)os.mkdir(sampleImg)if(os.path.exists(sampleLab)):rmtree(sampleLab)os.mkdir(sampleLab)print(creating dataset...)fpImg rasterio.open(imgPath)srcImg fpImg.read()band, height, width srcImg.shapeprofileImg fpImg.profilefpLabel rasterio.open(labelPath)srcLabel fpLabel.read()band, height, width srcLabel.shapeprofileLabel fpLabel.profileprint(srcLabel.shape)print(height)print(width)count 0for random_width in range(0,width-img_w,img_w):for random_height in range(0,height-img_h,img_h):try:src_roi srcImg[:, random_height: random_height img_h, random_width: random_width img_w]label_roi srcLabel[:, random_height: random_height img_h, random_width: random_width img_w]window Window(random_width, random_height, img_w, img_h)transform fpImg.window_transform(window)profileImg.update(widthimg_w, heightimg_h)profileImg.update({transform: transform})samplePath (sampleImg /%d.tif) % countoutImg rasterio.open(samplePath, w, **profileImg)outImg.write(src_roi)window Window(random_width, random_height, img_w, img_h)transform fpLabel.window_transform(window)profileLabel.update(widthimg_w, heightimg_h)profileLabel.update({transform: transform})samplePath (sampleLab /%d.tif) % countoutLabel rasterio.open(samplePath, w, **profileLabel)outLabel.write(label_roi)count1except:print({} file error\n.format(image_sets[i]))breakcount10if __name__ __main__:parser ArgumentParser()parser.add_argument(--basePath, default , typestr) # 图片存储文件夹路径parser.add_argument(--imgPath, default , typestr) # 原图切割图片路径parser.add_argument(--labelPath, default , typestr) # 标签图切割图片路径parser.add_argument(--imageNum, default500, typeint)args parser.parse_args()creat_dataset(image_numargs.imageNum, imgPathargs.imgPath,labelPathargs.labelPath, basePathargs.basePath)5、创建训练样本文件夹目录 通过上面小样本的裁剪之后我们就需要创建模型训练所需要的文件夹了我们这里使用的是pascal voc的数据集格式他的目录结构如下图
.{pascal voc数据集格式}
├── VOC2012
│ ├── ImageSets
│ │ ├── Segmentation
│ │ | ├── train.txt
│ │ | ├── val.txt
│ ├── JPEGImages
│ │ ├── xxx.png
│ │ ├── xxx.png
│ │ ├── xxx.png
│ ├── SegmentationClass
│ │ ├── xxx.png
│ │ ├── xxx.png创建完上面的文件目录结构之后就把对应的内容放入对应的文件夹这样我们的训练数据集就制作成功啦 总结 以上就是我个人在制作数据集的方法和步骤这期间遇到的很多问题幸好有师兄帮忙。为了让其他小伙伴少走弯路我就把这个方法一步一步的写给大家希望可以帮助到大家然后我个人通过这个方法已经拥有了3.5GB18000多张的个人数据集希望能找个好模型测试一下这批数据。