当前位置: 首页 > news >正文

网站模版化配置一个网站收录很高 但外链很少是什么原因

网站模版化配置,一个网站收录很高 但外链很少是什么原因,网站建设网站系统选择,学校网站建设 应用情况使用YOLO系列txt目标检测标签的滑窗切割#xff1a;批量处理图像和标签的实用工具 使用YOLO的TXT目标检测标签的滑窗切割#xff1a;批量处理图像和标签的实用工具背景1. 代码概述2. 滑窗切割算法原理滑窗切割步骤#xff1a;示例#xff1a; 3. **代码实现**1. **加载标签… 使用YOLO系列txt目标检测标签的滑窗切割批量处理图像和标签的实用工具 使用YOLO的TXT目标检测标签的滑窗切割批量处理图像和标签的实用工具背景1. 代码概述2. 滑窗切割算法原理滑窗切割步骤示例 3. **代码实现**1. **加载标签**2. **切割标签**3. **主函数** 4. **如何使用该工具**4. **完整代码** 使用YOLO的TXT目标检测标签的滑窗切割批量处理图像和标签的实用工具 背景 在计算机视觉领域目标检测Object Detection是一个非常重要的任务。随着 YOLOYou Only Look Once系列模型的普及目标检测模型已经被广泛应用于各种实际场景中。对于目标检测任务训练模型所需的标注数据至关重要。 当我们处理大规模图像数据集时尤其是在图像的尺寸远大于模型输入尺寸时往往需要使用 滑窗切割Sliding Window技术将大图像分割成多个小块进行处理。这一过程不仅可以减小每次训练所需的计算资源还能增强模型的鲁棒性。 本博客将介绍如何使用 YOLO 的TXT目标检测标签格式 对大图像进行滑窗切割并确保标签的正确性。我们将逐步阐述该代码的工作原理、使用方法及其在目标检测中的实际意义。 1. 代码概述 该代码实现了对大图像及其对应标签的 滑窗切割并确保切割后的标签正确地被裁剪并保存。它通过对图像和标签的逐块切割将大图像分割成多个较小的图像块同时调整标签的位置和大小以符合新的图像尺寸。 主要步骤如下 加载图像和标签读取图片和标签文件确保标签与图像对应。滑窗切割以给定的窗口大小和步长对图像进行滑窗切割。裁剪标签对于每个切割窗口检查标签是否位于窗口内如果位于窗口内调整标签坐标并确保标签归一化。保存切割后的图像和标签将切割后的图像和标签保存到新的文件夹中。 2. 滑窗切割算法原理 滑窗切割是计算机视觉中常用的技术通常用于 大图像分块当图像尺寸过大时模型输入尺寸无法处理整个图像可以将其切割成小块进行逐块处理。多尺度检测不同尺度的物体需要不同大小的窗口来检测。通过滑窗切割能够在多个尺度上执行目标检测任务。 滑窗切割步骤 指定窗口大小和步长窗口大小和步长决定了滑窗的密集程度。步长越小生成的窗口越多计算量越大。窗口大小决定了每个块的输入尺寸。 标签裁剪标签的裁剪是根据目标与滑窗的交集来进行的。每个标签会被裁剪到窗口内并且坐标会被重新归一化到窗口的尺寸。 示例 窗口大小640x640像素。横向步长301像素。纵向步长180像素。 对于每个标签代码会检查它是否位于当前滑窗内如果是标签的位置和尺寸会被重新计算并保存。 3. 代码实现 1. 加载标签 def load_labels(label_file):加载YOLO的标签文件labels []with open(label_file, r) as f:for line in f:parts line.strip().split()cls int(parts[0]) # 类别x_center, y_center, w, h map(float, parts[1:])labels.append((cls, x_center, y_center, w, h))return labels这段代码用于读取每个标签文件并将其转换为包含类别和坐标的格式方便后续处理。 2. 切割标签 def save_cut_labels(window_x, window_y, window_size, img_width, img_height, labels):根据滑窗切割标签并确保标签正确裁剪new_labels []for cls, x_center, y_center, w, h in labels:# 将归一化坐标转换为像素坐标x_center_px x_center * img_widthy_center_px y_center * img_heightw_px w * img_widthh_px h * img_height# 计算标签与当前窗口的交集区域intersection_x1 max(x_center_px - w_px / 2, window_x)intersection_y1 max(y_center_px - h_px / 2, window_y)intersection_x2 min(x_center_px w_px / 2, window_x window_size)intersection_y2 min(y_center_px h_px / 2, window_y window_size)# 如果标签和窗口相交if intersection_x1 intersection_x2 and intersection_y1 intersection_y2:# 计算交集区域的宽高和中心坐标intersection_w intersection_x2 - intersection_x1intersection_h intersection_y2 - intersection_y1intersection_x_center (intersection_x1 intersection_x2) / 2intersection_y_center (intersection_y1 intersection_y2) / 2# 将交集区域的坐标归一化normalized_x_center (intersection_x_center - window_x) / window_sizenormalized_y_center (intersection_y_center - window_y) / window_sizenormalized_w intersection_w / window_sizenormalized_h intersection_h / window_size# 生成新的标签new_labels.append(f{cls} {normalized_x_center} {normalized_y_center} {normalized_w} {normalized_h})return new_labels该函数根据当前窗口的位置裁剪标签并将裁剪后的标签归一化到当前窗口大小。 3. 主函数 def main():image_folder images # 输入图片文件夹label_folder labels # 输入标签文件夹output_image_folder output_imagesoutput_label_folder output_labelsif not os.path.exists(output_image_folder):os.makedirs(output_image_folder)if not os.path.exists(output_label_folder):os.makedirs(output_label_folder)image_files sorted(os.listdir(image_folder))label_files sorted(os.listdir(label_folder))window_size 640 # 滑窗大小step_x 301 # 横向步长step_y 180 # 纵向步长# 遍历所有图片和标签文件for image_file, label_file in zip(image_files, label_files):# 读取图片image_path os.path.join(image_folder, image_file)image cv2.imread(image_path)img_height, img_width, _ image.shape# 读取对应的标签label_path os.path.join(label_folder, label_file)labels load_labels(label_path)# 计算横向和纵向可以切割的窗口数量num_windows_x (img_width - window_size) // step_x 1num_windows_y (img_height - window_size) // step_y 1# 遍历所有切割窗口for i in range(num_windows_x):for j in range(num_windows_y):window_x i * step_xwindow_y j * step_y# 获取当前窗口内的标签windowed_labels save_cut_labels(window_x, window_y, window_size, img_width, img_height, labels)if windowed_labels: # 如果窗口内有标签# 保存切割后的图片windowed_image image[window_y:window_y window_size, window_x:window_x window_size]output_image_path os.path.join(output_image_folder, f{os.path.splitext(image_file)[0]}_window_{i}_{j}.jpg)cv2.imwrite(output_image_path, windowed_image)# 保存切割后的标签output_label_path os.path.join(output_label_folder, f{os.path.splitext(label_file)[0]}_window_{i}_{j}.txt)with open(output_label_path, w) as f:for label in windowed_labels:f.write(label \n)4. 如何使用该工具 准备工作 将你的图片和标签放在 images/ 和 labels/ 文件夹中。确保标签格式为 YOLOv5 格式即每行包含 class_id x_center y_center width height所有值均为归一化形式。 运行脚本 运行上述代码程序将自动读取图片和标签进行滑窗切割并将每个切割后的图像和标签保存到新的文件夹中。 输出结果 切割后的图像会保存在 output_images/ 文件夹中。切割后的标签会保存在 output_labels/ 文件夹中标签内容与原标签一致只是经过裁 4. 完整代码 import os import cv2def load_labels(label_path):加载YOLOv5标签文件labels []with open(label_path, r) as f:for line in f.readlines():parts line.strip().split()cls int(parts[0]) # 类别x_center float(parts[1]) # x中心y_center float(parts[2]) # y中心w float(parts[3]) # 宽度h float(parts[4]) # 高度labels.append([cls, x_center, y_center, w, h])return labelsdef save_cut_labels(window_x, window_y, window_size, img_width, img_height, labels):根据滑窗切割标签并确保标签正确裁剪new_labels []for cls, x_center, y_center, w, h in labels:# 将归一化坐标转换为像素坐标x_center_px x_center * img_widthy_center_px y_center * img_heightw_px w * img_widthh_px h * img_height# 计算标签与当前窗口的交集区域intersection_x1 max(x_center_px - w_px / 2, window_x)intersection_y1 max(y_center_px - h_px / 2, window_y)intersection_x2 min(x_center_px w_px / 2, window_x window_size)intersection_y2 min(y_center_px h_px / 2, window_y window_size)# 如果标签和窗口相交if intersection_x1 intersection_x2 and intersection_y1 intersection_y2:# 计算交集区域的宽高和中心坐标intersection_w intersection_x2 - intersection_x1intersection_h intersection_y2 - intersection_y1intersection_x_center (intersection_x1 intersection_x2) / 2intersection_y_center (intersection_y1 intersection_y2) / 2# 将交集区域的坐标归一化normalized_x_center (intersection_x_center - window_x) / window_sizenormalized_y_center (intersection_y_center - window_y) / window_sizenormalized_w intersection_w / window_sizenormalized_h intersection_h / window_size# 生成新的标签new_labels.append(f{cls} {normalized_x_center} {normalized_y_center} {normalized_w} {normalized_h})# 如果没有标签返回空列表return new_labelsdef main():image_folder images # 输入图片文件夹label_folder labels # 输入标签文件夹output_image_folder output_imagesoutput_label_folder output_labelsif not os.path.exists(output_image_folder):os.makedirs(output_image_folder)if not os.path.exists(output_label_folder):os.makedirs(output_label_folder)image_files sorted(os.listdir(image_folder))label_files sorted(os.listdir(label_folder))window_size 640 # 滑窗大小step_x 301 # 横向步长step_y 180 # 纵向步长# 遍历所有图片和标签文件for image_file, label_file in zip(image_files, label_files):# 读取图片image_path os.path.join(image_folder, image_file)image cv2.imread(image_path)img_height, img_width, _ image.shape# 读取对应的标签label_path os.path.join(label_folder, label_file)labels load_labels(label_path)# 计算横向和纵向可以切割的窗口数量num_windows_x (img_width - window_size) // step_x 1num_windows_y (img_height - window_size) // step_y 1# 遍历所有切割窗口for i in range(num_windows_x):for j in range(num_windows_y):window_x i * step_xwindow_y j * step_y# 获取当前窗口内的标签windowed_labels save_cut_labels(window_x, window_y, window_size, img_width, img_height, labels)# 如果标签列表为空说明此窗口没有标签跳过该窗口if not windowed_labels:continue# 保存切割后的图片windowed_image image[window_y:window_y window_size, window_x:window_x window_size]output_image_path os.path.join(output_image_folder, f{os.path.splitext(image_file)[0]}_window_{i}_{j}.jpg)cv2.imwrite(output_image_path, windowed_image)# 保存切割后的标签output_label_path os.path.join(output_label_folder, f{os.path.splitext(label_file)[0]}_window_{i}_{j}.txt)with open(output_label_path, w) as f:for label in windowed_labels:f.write(label \n)if __name__ __main__:main()
http://www.hkea.cn/news/14444363/

相关文章:

  • 中山企业网站制作公司一般做网站要多少钱
  • 建设部网站有项目经理资质查询系统公司网站建设及维护管理办法
  • 贵阳网站建设制作织梦瀑布流网站模板
  • 上海网站建设开发Wordpress教程Windows
  • 网站哪个公司做的环球贸易网官网
  • 景安网络网站建设腾讯云 建网站
  • 舟山建设银行网站系统总裁
  • 帝国cms 网站名称网站建设价格组成
  • 吉林省安全建设网站在建立网站站点的过程中
  • 焦作网站建设网站建设录哪个科目
  • 怎么把自己做的网站发布到网上wordpress产品模块
  • 微信官网网站wordpress转html
  • 如何做统计信息的网站wordpress和dede区别
  • 开封建网站的公司功能网站建设
  • 做网站网页需要什么软件sae wordpress 图片插件
  • 怎么做自己的销售网站营销团队的建设与管理
  • 坪地网站建设怎么样校园网站建设考评办法
  • 企业软文seo兼职58
  • 重庆建工招采平台昆明网站seo技术厂家
  • 省企联网站建设要求网站设计实训心得体会
  • 个人简介网站html代码淄博网站制作定制技术
  • wordpress网站音乐播放器法律平台网站建设方案
  • 网站做生鲜线下推广建议响应式网站的组成
  • 网上自己建网站wordpress更换文章图片链接
  • 二手域名做网站不收录服务专业的网站开发设计
  • 网站推广建设网络科技公司一般是做什么的
  • 在什么网站做推广嘉兴哪家公司做网站比较好的
  • 教育网站开发需求说明书创建网站时间代码
  • 请输入您网站的icp备案信息美食网站开发与设计任务书
  • 网站开发主要学什么小程序开发费用多少