利用yoloV8的实例分割模型,半自动辅助制作数据集
引言:【主要步骤】
步骤1:无人机航拍,收集基础图片
步骤2:将收集到的图片,全部用yoloV8-seg.pt模型进行实例分割【预测之前,将配置文件default.yaml的save_txt:设置为True】
步骤3:将txt标注文件转换为JSON格式
步骤4:打开labelme开始修改再加工标注
-
步骤1:【比如,如下规格】
图片特征数据:车辆、人,等等
图片拍摄变量:无人机高度、相机水平方向、相机俯仰角度
(a)固定高度、水平方向,调整俯仰角
(b)固定水平方向、俯仰角,调整高度
(c)固定俯仰角、高度,调整水平方向 -
步骤2:【预测代码及配置】
default.yaml【save_txt:设置为True】
使用脚本预测:my_predict.py【source参数:存放图片的目录路径】
得到的预测结果会存放在run文件夹下
-
步骤3:【将txt文件转换为JSON文件】
利用我在Cityscapes数据集转换为COCO数据集的文章中写的方法,改一下坐标为缩放前的即可:
import os
import cv2
import json
import glob
import numpy as npdef convert_txt_to_labelme_json(txt_path, image_path, output_dir, image_fmt='.jpg'):# txt 转labelme jsontxts = glob.glob(os.path.join(txt_path, "*.txt"))for txt in txts:labelme_json = {'version': '4.5.7','flags': {},'shapes': [],'imagePath': None,'imageData': None,'imageHeight': None,'imageWidth': None,}txt_name = os.path.basename(txt)image_name = txt_name.split(".")[0] + image_fmtlabelme_json['imagePath'] = image_nameimage_name = os.path.join(image_path, image_name)if not os.path.exists(image_name):raise Exception('txt 文件={},找不到对应的图像={}'.format(txt, image_name))image = cv2.imdecode(np.fromfile(image_name, dtype=np.uint8), cv2.IMREAD_COLOR)h, w = image.shape[:2]labelme_json['imageHeight'] = hlabelme_json['imageWidth'] = wwith open(txt, 'r') as t:lines = t.readlines()for line in lines:content = line.split(' ')label = content[0]tem_label=str(label)# 0: car #车# 1: street #街道、路# 2: person #人# 3: lawn #草坪# 4: construction #建筑# 5: tree #树,树林mapLabel={"0":"car","1":"street","2":"person","3":"lawn","4":"construction","5":"tree"}shape = {'label': mapLabel.get(str(label)),'flags': {},'points': []}for i in range(len(content)):if 2 * i + 1 >= len(content):breakelse:try:shape['points'].append([float(content[2 * i + 1])*w, float(content[2 * i + 2])*h])except Exception as e:print(e)labelme_json['shapes'].append(shape)json_name = txt_name.split('.')[0] + '.json'json_name_path = os.path.join(output_dir, json_name)fd = open(json_name_path, 'w')json.dump(labelme_json, fd, indent=4)fd.close()print("save json={}".format(json_name_path))if __name__=="__main__":in_imgs_dir = 'D:\\yoloProject\\ultralytics-registry\\test_11\\imgs'in_label_txt_dir = 'D:\\yoloProject\\ultralytics-registry\\test_11\\labels'out_labelme_json_dir = 'D:\\yoloProject\\ultralytics-registry\\test_11\\jsons'if not os.path.exists(out_labelme_json_dir):os.mkdir(out_labelme_json_dir)convert_txt_to_labelme_json(in_label_txt_dir,in_imgs_dir,out_labelme_json_dir,image_fmt='.png')
转换前:
转换后得到:
- 步骤4【将生成的JSON文件和原图片文件放到同一个文件夹下,然后lableme打开目录】
- 步骤5【开始修改标注失误的多边形、删除标注错误的多边形】
自此,接着我这篇文章:
【YOLOv8—seg实例分割(制作数据集,训练模型,预测结果)】
【https://blog.csdn.net/weixin_43624549/article/details/139532142】