python制作单类别检测数据集

为了训练自己的yolov3,但是训练一个公开数据集需要的时间太长了,所以就随手做了一个制作数据集的小demo,代码不长比较简单,但是只能标注矩形框,而且只可以制作单类别数据集。

制作前的准备:将需要的图片放在一个文件夹下,最好都是一个格式的
准备图像
生成的数据集格式:每行代表一个图像标签,格式为:图像名 x1,y1,x2,y2 …
标签格式
标注过程如下:将标注的框指示在图像上,按下鼠标左键开始画框,松开鼠标左键开始画框,当标注完此图片时,按q结束此张图片开始下一张图片的标注。
标注图像
代码如下:

import cv2
import numpy as np
import os

class dataset_creator(object):
    def __init__(self,image_path,txt_path):
        self.image_path = image_path    #存放图像的路径
        self.txt_path = txt_path        #标签的路径
        self.file = open(self.txt_path,'w')
        self.image_names = os.listdir(image_path)   #遍历文件夹下的文件
        self.image_name = None        #当前操作的图像名
        self.recs = []                #已经选择的bbox
        self.drawing = False          #鼠标按下,开始画框
        self.ix = -1                  #鼠标按下时的x坐标
        self.iy = -1                  #鼠标按下时的y坐标
        self.image = None             #当前操作的原图像
        self.drawn_image = None       #在原图像上画框后的图像

    def get_dataset(self):
        for image_name in self.image_names:       #遍历标签的图像名
            self.image_name = image_name
            self.image = cv2.imread(self.image_path+'/'+image_name)   #读取图像
            cv2.namedWindow(image_name)      #这个时必须要的
            cv2.setMouseCallback(image_name, self.draw_rec)   #设置鼠标事件
            while True:
                cv2.imshow(image_name,self.image)
                key = cv2.waitKey(0)   #等待键盘事件
                if key == 113:         #按下q时结束为此图片打标签并开始下一张
                    print(self.recs)
                    self.write_txt(image_name,self.recs)
                    break
            cv2.destroyWindow(image_name)    #销毁当前图像显示窗口
            self.recs = []   #清空当前图像已选择的bbox
        self.file.close()   #关闭文件对象才能保存

    def draw_rec(self,event, x, y, flags, param):
        for rec in self.recs:   #把已经确定的框画上去
            cv2.rectangle(self.image, (rec[0],rec[1]), (rec[2],rec[3]), (0, 255, 0), 2)
        if event == cv2.EVENT_LBUTTONDOWN:   #按下鼠标左键
            self.drawing = True
            self.ix, self.iy = x, y
        elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:  #移动鼠标,实时显示框
            if self.drawing is True:
                self.drawn_image = cv2.rectangle(np.copy(self.image), (self.ix, self.iy), (x, y), (0, 255, 0), 2)
                cv2.imshow(self.image_name, self.drawn_image)

        elif event == cv2.EVENT_LBUTTONUP:   #抬起鼠标左键
            self.drawing = False
            self.recs.append([self.ix,self.iy,x,y])
            #cv2.rectangle(self.image, (self.ix, self.iy), (x, y), (0, 255, 0), 2)

    def write_txt(self,image_name,recs):   #将当前图像名和属于该图像的bbox存入txt文件
        self.file.writelines(image_name+' ')
        for rec in recs:
            for xy in rec:
                self.file.writelines(str(xy)+',')
            self.file.writelines('0 ')
        self.file.writelines('\n')

if __name__ == '__main__':
    creator = dataset_creator("./images","data.txt")
    creator.get_dataset()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于⼈⼯智能数据标注学习 ⽬录 项⽬⼀:认识数据标注 ⼈⼯智能数据标注主要包括:图像标注,语⾳标注,⽂本标注! 数据标注是借助标注软件,对⼈⼯智能学习数据进⾏加⼯和运⽤的⾏为! 项⽬⼆: 项⽬⼆:图像标注的学习 1.基本命令提⽰符 基本命令提⽰符 cd A:\ 将A盘的当前⽬录改为根⽬录 cd A:\xx 将A盘的当前⽬录改为⼦⽬录xx下 cd ..\98 先返回⽗⽬录,再进⼊⽗⽬录下的98⼦⽬录 cd ..返回到⽗⽬录(注:"."代表当前⽬录 ".."代表⽗⽬录) 以上为⽐较常⽤的命令提⽰符,其他提⽰符就不列出来了,可以⾃⾏上⽹查阅! 2.Anaconda软件的安装 软件的安装 笔记本电脑直接软件商店搜索就 ,台式的话得到官⽹去下载! 安装的时候记得这两个都勾选!以便配置全局变量!!!!!! 3.labelme软件的安装 软件的安装 直接到 直接到Anaconda的命令提⽰框⾥⾯! 的命令提⽰框⾥⾯! 先安装虚拟环境! 激活虚拟环境! conda creat -n Labelme python=3.8 安装Labelme软件 以下基本为labelme的运⾏界⾯! 该软件是英⽂版基本使⽤⽅法就⾃⾏琢磨吧! 4.Labelme软件命令和常⽤的图像数据集 软件命令和常⽤的图像数据集 activate Labelme Pip install labelme==3.16 -i https://pypi.tuna.tsinghua.edu.cn/simple Labelme软件⽣成的JSON⽂件转化为dataset⽂件的操作 5.图像分类 图像分类 ⾸先啊!就是激活环境啦! 然后通过⽂本打开Labelme!!! 命令如下 双标签都⼀样的打开⽅式! 6.⽬标检测标注 ⽬标检测标注 ⽬标检测标识是指通⼈⼯标注出图像中感兴趣的⽬标,同⼀类的标签中可以有多个,通常使⽤矩形进⾏标注!!!基本有两种类型: 物体的标注和⼈脸的标注但其实操作都⼀样!!!仅仅知识标签和⽂件路劲的问题!!! ⽅法同5差不多! 1建⽴标签⽂本启动Labelme 2通过⽂本打开Labelme 操作代码如下 1 Labelme_json_to_dateset 路径+⽂件名 2 如:Labelme_json_to_dateset D:\1.json 1 //激活环境: activate Labelme 2 //通过⽂本启动Labelme: Labelme --flags D:\flags.txt --nodata 3 //不管怎样还是得根据⽂件路劲来 1 1.激活:activate Labelme 2 2.打开:Labelme --labels D:\labels.txt --nodata --autosave 3 注意:具体⽂件名和路劲应根据相应你建⽴的来填 采⽤矩形框来标注!!! 7.语义分割标注 语义分割标注 语义分割就是对图像中的每个对象都打上标签,如把图像中的⼈,树⽊,草地,天空和动物等都打上对于的标签。语义分割标注需要将 物体的轮廓都标注出来,标注的精度远⾼于⽬标检测标注。 同样如上: 转化为VOC数据集可以时使⽤" Labelme2voc.py"命令 。格式如下 8.实例分割 实例分割 实例分割是⽬标检测和语义分割的结合,即在图像中先将⽬标检测出来(⽬标检测),然后对每个⽬标打上对应的标签(语义分割)。 在语义分割中,不区分属于相同类别的不同⽬标(所有⽬标都标为相同颜⾊),实例分割标注则需要区分同类的不同实例(使⽤不同颜⾊来 区分不同的⼈)。 9.全景分割标注 全景分割标注 全景分割标注是语义分割标注和实例分割标注的结合,既要检测所有⽬标,⼜要区分类别中的不同实例。实例分割只是对图像中的⽬ 标进⾏检测和按照橡素分割,区分不同实例(使⽤不同颜⾊),⽽全景标注分割是对图⽚中的所有物体包括背景都要进⾏检测和分割。 10.视频标注 视频标注 1 2 3 1激活: activate Labelme 4 2打开: Labelme --labels D:\labels1.txt --nodata 5 3同样需要注意⽂件名和路劲 6 4.JSON转为dataset 7 Labelme_json_to_dataset 路劲+JSON⽂件名 8 5如:Labelme_json_to_dataset D:\hello\2021_12_27_001.json 9 10 1 2 命令: python Labelme2voc.py 图像⽬录 ⽣成voc⽬录 --labels labels⽂件路径 3 如下: python d:\Labelme2voc.py D:\Hello\DIRS\semantic_segmentation D:\data_dataset_voc --labels D:\
【资源说明】 基于KLD损失结合yolov7-tiny的旋转目标检测系统源码+详细使用说明+模型.zip 目标检测模型 | 路径 | ## 性能情况 | 训练数据集 | 权值文件名称 | 测试数据集 | 输入图片大小 | mAP 0.5 | fps | | :-----: | :------: | :------: | :------: | :------: | :------: | | UAV-ROD | [yolov7_tiny_obb_uav]| UAV-ROD-Val | 640x640 | 98.00% | 50 | | UAV-ROD | [yolov7_tiny_trt]| UAV-ROD-Val | 640x640 | 97.75% | 120 | ### 预测结果展示 ![预测结果](img/test.jpg) ## 所需环境 cuda==11.3 torch==1.10.1 torchvision==0.11.2 为了使用amp混合精度,推荐使用torch1.7.1以上的版本。 ## 文件下载 UAV-ROD数据集下载地址如下,里面已经包括了训练集、测试集、验证集(与测试集一样),无需再次划分: 链接: https://pan.baidu.com/s/1Ae8AGb2L6zCjCwJFzs2WfA 提取码: ybec ## 训练步骤 ### a、训练VOC07+12数据集 1. 数据集的准备 **本文使用VOC格式进行训练,训练前需要下载好VOC07+12的数据集,解压后放在根目录** 2. 数据集的处理 修改voc_annotation.py里面的annotation_mode=2,运行voc_annotation.py生成根目录下的2007_train.txt和2007_val.txt。 生成的数据集格式为image_path, x1, y1, x2, y2, x3, y3, x4, y4(polygon), class。 3. 开始网络训练 train.py的默认参数用于训练VOC数据集,直接运行train.py即可开始训练。 4. 训练结果预测 训练结果预测需要用到两个文件,分别是yolo.py和predict.py。我们首先需要去yolo.py里面修改model_path以及classes_path,这两个参数必须要修改。 **model_path指向训练好的权值文件,在logs文件夹里。 classes_path指向检测类别所对应的txt。** 完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。 ### b、训练自己的数据集 1. 数据集的准备 **本文使用VOC格式进行训练,训练前需要自己制作数据集,** 训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。 训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。 2. 数据集的处理 在完成数据集的摆放之后,我们需要利用voc_annotation.py获得训练用的2007_train.txt和2007_val.txt。 修改voc_annotation.py里面的参数。第一次训练可以仅修改classes_path,classes_path用于指向检测类别所对应的txt。 训练自己的数据集时,可以自己建立一个cls_classes.txt,里面写自己所需要区分的类别。 model_data/cls_classes.txt文件内容为: ```python cat dog ... ``` 修改voc_annotation.py中的classes_path,使其对应cls_classes.txt,并运行voc_annotation.py。 3. 开始网络训练 **训练的参数较多,均在train.py中,大家可以在下载库后仔细看注释,其中最重要的部分依然是train.py里的classes_path。** **classes_path用于指向检测类别 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值