Mask-RCNN数据集制作

转自https://blog.youkuaiyun.com/pingushen2100/article/details/80513043

一.Mask-RCNN数据集

           

            1.1 训练Mask-RCNN用的到的文件有三种:原图像(jpg),mask(png),info.yaml

                    也就是训练的训练图像,掩模(mask),info.yaml里存放的是label的名字:分为背景,物体1,物体2.......的名字

            1.2  图像的重命名:

                    

            1.3这里我们先创建一个叫train的文件夹,在文件里存放训练的文件图像(之后的操作基本都在这里面)

                    我的训练图像格式是bmp格式的,所以先转格式---使用以下python脚本                   

 

    #-*- coding:utf-8 -*-
    from PIL import Image
    import os
    import glob
    os.chdir(r'./')#图片所在文件夹
    for file_names in glob.glob('*.bmp'):#找出所有的后缀为bmp的格式的图片
    print(file_names)
    file_path = r'./'+'//'+file_names#拼接出图片的完整url
    print(file_path)
    out_path = os.path.splitext(file_path)[0]+'.jpg'
    Image.open(file_path).save(out_path)
    print('转换成功')

                    把脚本放在图片所在文件夹,在当前文件夹下打开终端:   sudo python3   脚本名字.py  即可

             1.4  labelme图像标注工具

    Github链接:             https://github.com/wkentaro/labelme

            注意事项:在train下新建一个json文件夹用于labelme生成的json文件

            1.5编写    .sh 脚本 去生成标签等数据  我这里是20张图,21这个参数根据自己的设定

    #!/bin/bash
    s1="/home/attach/datasets/train/json/rgb_"
    s2=".json"
    for((i=1;i<21;i++))
    do
    s3=${i}
    labelme_json_to_dataset ${s1}${s3}${s2}
    done

 

                        

1.6rgb_X_json里面的label是16位深的,而opencv读取的是8位的,所以新建一个mask文件夹用于生成label.png

    #include <iostream>
    #include <opencv2/opencv.hpp>
    #include <string>
    #include <stdio.h>
    using namespace std;
    using namespace cv;
    int main(void){
    char buff1[100];
    char buff2[100];
    for(int i=1;i<21;i++){
    sprintf(buff1,"/home/attach/datasets/train/json/rgb_%d_json/label.png",i);
    sprintf(buff2,"/home/attach/datasets/train/mask/%d.png",i);
    Mat src;
    src=imread(buff1,CV_LOAD_IMAGE_UNCHANGED);
    Mat ff=Mat::zeros(src.rows,src.cols,CV_8UC1);
    for(int k=0;k<src.rows;k++){
    for(int kk=0;kk<src.cols;kk++){
    int n=src.at<ushort>(k,kk);
    ff.at<uchar>(k,kk)=n;
    }
    }
    imwrite(buff2,ff);
    }
    return 0;
    }

 

这是个opencv的C++,你可以在Windows下转换,也可以在Ubuntu下:

使用如下命令:

                              

 sudo g++ tran16_8.cpp -lpthread -o  tran16_8 `pkg-config --cflags --libs opencv`

 

2.最后补充

        新建rgb用于存放训练的rgb_x.jpg

        

Mask-RCNN训练的图像需要是2的倍数(困惑,你知道了告诉我哈~)

以下放出两个resize的python脚本

resizejpg的,放在rgb文件夹下,在rgb下打开终端直接运行:(sudo python3   你的脚本名字.py)

    #-*- coding:utf-8 -*-
    from PIL import Image
    import os.path
    import glob
    def convertjpg(jpgfile,outdir,width=512,height=512):
    img=Image.open(jpgfile)
    try:
    new_img=img.resize((width,height),Image.BILINEAR)
    new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))
    except Exception as e:
    print(e)
    for jpgfile in glob.glob("./*.jpg"):
    convertjpg(jpgfile,"./")

 

resizepng的脚本是放在mask文件夹下运行:

    #-*- coding:utf-8 -*-
    from PIL import Image
    import os.path
    import glob
    def convertpng(pngfile,outdir,width=512,height=512):
    img=Image.open(pngfile)
    try:
    new_img=img.resize((width,height),Image.BILINEAR)
    new_img.save(os.path.join(outdir,os.path.basename(pngfile)))
    except Exception as e:
    print(e)
    for pngfile in glob.glob("./*.png"):
    convertpng(pngfile,"./")

 

当你看到这里的时候,恭喜你!你的Mask-RCNN数据集做好了

最后的小tips:放在rgb   mask 跑的脚本记得去掉,不然训练的时候读取会报错out of range噢!

转载于:https://www.cnblogs.com/MY0213/p/9568862.html

### 准备适用于Mask R-CNN的遥感影像训练样本 #### 数据收集与整理 为了使遥感影像能够被有效地应用于Mask R-CNN模型,首先需要确保所使用的数据集涵盖了足够的场景多样性以及目标类别。这通常意味着要从多个不同的地理区域获取高质量的卫星或无人机拍摄的照片,并且这些图片应该具备较高的分辨率以便于捕捉细节特征。 #### 图像预处理 在正式进入标注阶段之前,可能还需要对原始图像执行一些基本的操作来优化后续的工作效率: - **尺寸调整**:由于不同来源获得的遥感图大小不一,因此有必要将其统一到特定的高度宽度规格下。 - **色彩校正**:消除因光照条件差异造成的颜色偏差问题,使得同一物体在同一时间内的表现更加一致。 - **噪声去除**:减少不必要的干扰因素影响最终的效果评估。 #### 标注过程 针对每一个待处理的对象实例,在其轮廓范围内绘制多边形边界框(polygon),从而形成精确的目标掩码(mask)。此操作可以通过专门设计的人机交互界面完成,比如借助`labelme`这样的开源软件工具来进行高效精准的手动勾勒工作[^3]。 具体来说,对于每一张遥感影像中的感兴趣对象(如建筑物、道路等),应当按照如下方式进行细致入微地描绘: 1. 打开`labelme`程序加载需编辑的地图切片; 2. 使用鼠标点击创建节点连接成闭合路径表示单个实体的空间范围; 3. 完整环绕之后确认保存当前形状信息连同对应的标签名称一起记录下来; 4. 对整个批次重复上述动作直至覆盖全部要素为止; 最后一步则是将所有已标注完毕的数据转换为目标框架所能接受的标准格式——通常是Pascal VOC或者是COCO JSON文件结构形式之一。这样做的目的是为了让计算机视觉库可以直接读取解析进而投入到下一步的学习任务当中去。 ```bash # 将LabelMe生成的JSON文件转化为VOC格式 python labelme2voc.py input_folder output_voc_dir ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值