sahi切片辅助训练推理

2023-10-20 04:20
文章标签 切片 训练 推理 辅助 sahi

本文主要是介绍sahi切片辅助训练推理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文的目的切片yolov5标注格式的数据,并保存图片和标注文件

代码实现步骤如下

  1. 把yolov5格式转换成coco格式标签;
  2. 切片图片和coco标签;
  3. 把切片出来的coco标签转换回yolov5标签格式
# 1. 把yolov5格式转换成coco格式标签;
# 2. 切片图片和coco标签;
# 3. 把切片出来的coco标签转换回yolov5标签格式import os
import numpy as np
import cv2
from sahi.utils.coco import Coco, CocoCategory, CocoImage, CocoAnnotation
from sahi.slicing import slice_coco
from sahi.utils.file import save_jsondef convert2coco(img_path,h,w,yololabel):coco = Coco()maps = {0 : 'person',1 : 'soccer'}coco.add_category(CocoCategory(id=0, name='person')) # 两个类别coco.add_category(CocoCategory(id=1, name='soccer'))coco_image = CocoImage(file_name=img_path, height=h, width=w)for label in yololabel:coco_image.add_annotation(CocoAnnotation(bbox=[label[1], label[2], label[3], label[4]],category_id=int(label[0]),category_name=maps[label[0]]))coco.add_image(coco_image)coco_json = coco.jsonsave_json(coco_json, "coco_dataset.json")return coco_jsondef convert2xywh(l,h,w): # 把(class cx xy w h)转换成左上角whnew_l = np.zeros_like(l)l[:,1] = l[:,1]*wl[:,3] = l[:,3]*wl[:,2] = l[:,2]*hl[:,4] = l[:,4]*hnew_l[:,0] = l[:,0]new_l[:,1] = l[:,1] - l[:,3]/2new_l[:,2] = l[:,2] - l[:,4]/2new_l[:,3] = l[:,3] new_l[:,4] = l[:,4]return new_ldef slice_img(save_img_dir):coco_dict, coco_path = slice_coco(coco_annotation_file_path="coco_dataset.json",image_dir='',slice_height=640,slice_width=640,overlap_height_ratio=0.2,overlap_width_ratio=0.2,output_dir = save_img_dir,output_coco_annotation_file_name = 'sliced')return def convert2yolov5(coco_dir,save_img_dir,save_label_dir):coco = Coco.from_coco_dict_or_path(coco_dir, save_img_dir)# export converted YoloV5 formatted dataset into given output_dir with a 85% train/15% val splitcoco.export_as_yolov5(output_dir=save_label_dir,disable_symlink = True)return if __name__ == '__main__':file = 'SNMOT-061'img_dir = f'datasets/soccernet/tracking/images/train/{file}/img1/'anno_dir = f'datasets/soccernet/tracking/labels/train/{file}/img1/'save_img_dir = 'datasets/sliced_soccernet/images/train/' + f'{file}/' # 把切分的图片保存到这里save_label_dir = 'datasets/sliced_soccernet/labels/train/' + f'{file}/'os.makedirs(save_img_dir,exist_ok=True)os.makedirs(save_label_dir,exist_ok=True)labels = os.listdir(anno_dir)for label in labels:if 'old' not in label:try:os.remove('coco_dataset.json') # 删除中间文件os.remove(save_img_dir+'sliced_coco.json')except:passl = np.loadtxt(anno_dir+label,delimiter=' ') # class cx xy w himg_path = img_dir+label.replace('txt','jpg')img = cv2.imread(img_path)h,w,_ = img.shapenew_l = convert2xywh(l,h,w)coco_json = convert2coco(img_path,h,w,new_l)slice_img(save_img_dir)  # 切分图片并保存convert2yolov5(save_img_dir+'sliced_coco.json', save_img_dir,save_label_dir) # 把切分完的coco标签转换回yolo格式并保存# for ll in new_l: # 验证是否转换正确#     if int(ll[0]) == 0:#         cv2.rectangle(img,(int(ll[1]),int(ll[2])),(int(ll[1]+ll[3]),int(ll[2]+ll[4])),(255,0,255),2)#     else:#         cv2.rectangle(img,(int(ll[1]),int(ll[2])),(int(ll[1]+ll[3]),int(ll[2]+ll[4])),(255,0,2),2)         # cv2.imwrite('./test.jpg',img)

在上述的基础上需要修改一下sahi的源码,它默认会保存图片的,注释掉:
在这里插入图片描述

在这里插入图片描述

最终结果
在这里插入图片描述
在这里插入图片描述
转换完成后,可视化代码:

import os
import cv2# train_lists = os.listdir('datasets/soccernet/tracking/images/train')# for tl in train_lists:root = 'datasets/sliced_soccernet/images/train/' + 'SNMOT-061/'
# root2 = 'datasets/soccernet/tracking/images2/train/'+'Vision_State.v4i.yolov8'+'/images/'
sum = 0
train_list = os.listdir(root)for img in train_list:if not img.endswith('jpg'):continueres = []ball_bbox = []data = cv2.imread(root+img)ih,iw,c = data.shapetry:anno = open(root.replace('images','labels')+img[:-4]+'.txt').read().splitlines()except:continuefor an in anno:a = an.split(' ')cls,x,y,w,h = int(a[0]),float(a[1]),float(a[2]),float(a[3]),float(a[4])x = int(iw*x)y = int(ih*y)w = int(w*iw)h = int(h*ih)if int(cls)==1:cv2.rectangle(data,(x-w//2,y-h//2),(x+w//2,y+h//2),(255,255,0),2)ball_bbox.append([x-w//2,y-h//2,w,h])passelse:res.append([x-w//2,y-h//2,x+w//2,y+h//2])cv2.rectangle(data,(x-w//2,y-h//2),(x+w//2,y+h//2),(0,0,255),2)pass# if len(ball_bbox) > 0:#     crop_img = data[max(0,ball_bbox[0][1]-50):ball_bbox[0][1]+ball_bbox[0][3]+50,max(0,ball_bbox[0][0]-50):ball_bbox[0][0]+ball_bbox[0][2]+50]save_dir = 'outimg/' + rootos.makedirs(save_dir,exist_ok=True)cv2.imwrite(os.path.join(save_dir,img),data)

这篇关于sahi切片辅助训练推理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244612

相关文章

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

文章目录 1、工厂模式概述1)特点:2)主要角色:3)工作流程:4)优点5)缺点6)适用场景 2、简单工厂模式(静态工厂模式)1) 在简单工厂模式中,有三个主要角色:2) 简单工厂模式的优点包括:3) 简单工厂模式也有一些限制和考虑因素:4) 简单工厂模式适用场景:5) 简单工厂UML类图:6) 代码示例: 3、工厂方法模式1) 在工厂方法模式中,有4个主要角色:2) 工厂方法模式的工作流程

AI辅助编程里的 Atom Group 的概念和使用

背景 在我们实际的开发当中,一个需求往往会涉及到多个文件修改,而需求也往往有相似性。 举个例子,我经常需要在 auto-coder中需要添加命令行参数,通常是这样的: /coding 添加一个新的命令行参数 --chat_model 默认值为空 实际上这个需求涉及到以下文件列表: /Users/allwefantasy/projects/auto-coder/src/autocoder/auto

多云架构下大模型训练的存储稳定性探索

一、多云架构与大模型训练的融合 (一)多云架构的优势与挑战 多云架构为大模型训练带来了诸多优势。首先,资源灵活性显著提高,不同的云平台可以提供不同类型的计算资源和存储服务,满足大模型训练在不同阶段的需求。例如,某些云平台可能在 GPU 计算资源上具有优势,而另一些则在存储成本或性能上表现出色,企业可以根据实际情况进行选择和组合。其次,扩展性得以增强,当大模型的规模不断扩大时,单一云平

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言 在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。 本文分析这个问题和提供解决方案,供大家参考。 问题分析——找不到ONNX Runtime GPU 动态库 首先直接运行python程序

神经网络训练不起来怎么办(零)| General Guidance

摘要:模型性能不理想时,如何判断 Model Bias, Optimization, Overfitting 等问题,并以此着手优化模型。在这个分析过程中,我们可以对Function Set,模型弹性有直观的理解。关键词:模型性能,Model Bias, Optimization, Overfitting。 零,领域背景 如果我们的模型表现较差,那么我们往往需要根据 Training l