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

白银市住房和城乡建设局网站网站规划有什么意义

白银市住房和城乡建设局网站,网站规划有什么意义,免费咨询眼科医生回答在线,北京网站优化哪家好BYU - Locating Bacterial Flagellar Motors 2025(在3D断层扫描图像中定位细菌鞭毛马达) 一、数据介绍 1.竞赛介绍 在本次竞赛中,您的任务是在3D断层扫描图像中找到鞭毛马达的中心位置。断层扫描图像是物体的三维体积表示。每个断层扫描图像作为一个独立的目录提供,其中…

BYU - Locating Bacterial Flagellar Motors 2025(在3D断层扫描图像中定位细菌鞭毛马达)

一、数据介绍

1.竞赛介绍

在本次竞赛中,您的任务是在3D断层扫描图像中找到鞭毛马达的中心位置。断层扫描图像是物体的三维体积表示。每个断层扫描图像作为一个独立的目录提供,其中包含一系列2D图像切片(JPEG格式)。您需要预测存在鞭毛马达时其在三维空间中的位置点。

2.文件和目录说明

  • train/:包含多个子目录,每个子目录对应一个用于训练的断层扫描图像。每个断层扫描子目录包含多个JPEG文件,每个JPEG文件是该断层扫描图像的一个2D切片。

  • train_labels.csv:训练数据标签。每一行代表一个唯一的马达位置,而不是一个唯一的断层扫描图像。列包括:

    • row_id:行索引
    • tomo_id:断层扫描图像的唯一标识符。某些断层扫描图像包含多个马达。
    • Motor axis 0:马达的z坐标,即所在的切片编号
    • Motor axis 1:马达的y坐标
    • Motor axis 2:马达的x坐标
    • Array shape axis 0:z轴长度,即断层扫描图像的切片数量
    • Array shape axis 1:y轴长度,即每个切片的高度
    • Array shape axis 2:x轴长度,即每个切片的宽度
    • Voxel spacing:体素间距,即每个体素的埃(Å)数
    • Number of motors:断层扫描图像中的马达数量。注意,每一行代表一个马达,因此包含多个马达的断层扫描图像将有多个行来定位每个马达。
  • test/:包含三个测试断层扫描图像的目录;重新运行的测试数据集包含大约900个断层扫描图像。测试数据仅包含具有一个或零个马达的断层扫描图像。

  • sample_submission.csv:正确格式的示例提交文件。(如果您预测某个断层扫描图像中不存在马达,请将Motor axis 0Motor axis 1Motor axis 2设置为-1)。

3.提交格式

提交文件应遵循sample_submission.csv文件的格式。对于每个断层扫描图像,您需要预测:

  • Motor axis 0(z坐标)
  • Motor axis 1(y坐标)
  • Motor axis 2(x坐标)

如果断层扫描图像中未检测到马达,请将所有三个坐标设置为-1

二、YOLO数据准备

在目标检测任务中,准备高质量的训练数据是模型成功的关键。本文将详细讲解一段用于准备 YOLO(You Only Look Once)目标检测模型训练数据的 Python 脚本。该脚本从 3D 断层扫描图像(tomograms)中提取包含电机(motors)的切片,并将其转换为 YOLO 数据集格式。

代码详解

1. 导入模块

import os
import numpy as np
import pandas as pd
from PIL import Image
import shutil
import time
import yaml
from pathlib import Path
from tqdm.notebook import tqdm  # Use tqdm.notebook for Jupyter/Kaggle environments
import concurrent.futures  # 导入多线程模块
  • os:用于文件和目录操作。
  • numpy (np):用于数值计算和数组操作。
  • pandas (pd):用于数据处理和分析。
  • PIL.Image:用于图像处理。
  • shutil:用于文件复制和移动。
  • time:用于时间相关操作。
  • yaml:用于读写 YAML 格式文件。
  • Path:用于路径操作。
  • tqdm.notebook:用于在 Jupyter Notebook 或 Kaggle 环境中显示进度条。
  • concurrent.futures:用于实现多线程处理。

2. 设置随机种子

np.random.seed(42)

设置随机种子为 42,确保每次运行代码时随机操作的结果是可重复的。

3. 定义路径

data_path = "/kaggle/input/byu-locating-bacterial-flagellar-motors-2025/"
train_dir = os.path.join(data_path, "train")yolo_dataset_dir = "/kaggle/working/yolo_dataset"
yolo_images_train = os.path.join(yolo_dataset_dir, "images", "train")
yolo_images_val = os.path.join(yolo_dataset_dir, "images", "val")
yolo_labels_train = os.path.join(yolo_dataset_dir, "labels", "train")
yolo_labels_val = os.path.join(yolo_dataset_dir, "labels", "val")
  • data_path:原始数据集的路径。
  • train_dir:包含训练数据的目录。
  • yolo_dataset_dir:YOLO 数据集的根目录。
  • yolo_images_trainyolo_images_val:分别是训练集和验证集的图像目录。
  • yolo_labels_trainyolo_labels_val:分别是训练集和验证集的标注目录。

4. 创建目录

for dir_path in [yolo_images_train, yolo_images_val, yolo_labels_train, yolo_labels_val]:os.makedirs(dir_path, exist_ok=True)

创建 YOLO 数据集所需的目录结构,如果目录已存在,则不会重复创建。

5. 定义常量

TRUST = 4  # 定义了在中心切片上下各取多少切片。具体来说,它决定了从中心切片(z_center)向上和向下各扩展多少个切片,总共处理的切片数量为 2 * TRUST + 1
BOX_SIZE = 24  # 标注框的大小(以像素为单位)。这个值用于确定每个电机在图像中的标注框的宽度和高度。
TRAIN_SPLIT = 0.8  # 80% for training, 20% for validation
  • TRUST:定义了在中心切片上下各取多少切片(总共 2 * TRUST + 1 个切片)。
  • BOX_SIZE:定义了标注框的大小(以像素为单位)。
  • TRAIN_SPLIT:定义了训练集和验证集的划分比例(80% 用于训练,20% 用于验证)。

在代码中,BOX_SIZE 是一个非常重要的常量,它定义了标注框(bounding box)的大小,用于目标检测任务。具体来说,BOX_SIZE 的作用如下:

5.1. 标注框的大小

在目标检测任务中,每个目标(例如电机)的位置通常用一个矩形框(标注框)来表示。BOX_SIZE 定义了这个矩形框的宽度和高度(假设标注框是正方形)。例如,如果 BOX_SIZE = 24,则标注框的宽度和高度均为 24 个像素。

5.2. 在代码中的具体应用

在代码的 process_motor 函数中,BOX_SIZE 被用于计算标注框的归一化坐标。以下是相关代码片段:

box_width_norm = BOX_SIZE / img_width
box_height_norm = BOX_SIZE / img_height
  • img_widthimg_height 分别是图像的宽度和高度。
  • box_width_normbox_height_norm 是标注框的宽度和高度归一化到 [0, 1] 范围内的值。
  • 这些归一化后的值是 YOLO 模型所需的标注格式。
5.3. YOLO 标注格式

YOLO 模型的标注文件格式要求标注框的中心点坐标和宽度、高度都归一化到 [0, 1] 范围内。标注文件的每一行表示一个目标,格式如下:

<class> <x_center> <y_center> <width> <height>
  • <class> 是目标的类别(在本例中为 0,表示电机)。
  • <x_center><y_center> 是标注框中心点的归一化坐标。
  • <width><height> 是标注框的归一化宽度和高度。

BOX_SIZE 的值直接影响标注框的大小,从而决定了模型在训练和推理时对目标的检测范围。例如,如果 BOX_SIZE 设置得过大,标注框可能会覆盖多个目标;如果设置得过小,可能会无法完全覆盖目标。

6. 图像归一化函数

def normalize_slice(slice_data):"""Normalize slice data using 2nd and 98th percentiles"""p2 = np.percentile(slice_data, 2)p98 = np.percentile(slice_data, 98)clipped_data = np.clip(slice_data, p2, p98)normalized = 255 * (clipped_data - p2) / (p98 - p2)return np.uint8(normalized)

使用 2% 和 98% 的百分位数对图像数据进行裁剪,以去除异常值。将裁剪后的数据归一化到 [0, 255] 范围内,并转换为 8 位无符号整数。

7. 处理单个电机的函数

def process_motor(tomo_id, z_center, y_center, x_center, z_max, images_dir, labels_dir, trust=TRUST):"""Process a single motor and save the slices and labels""""""这两个变量定义了以 z_center 为中心,向上和向下扩展 trust 个切片的范围。这样可以确保在处理电机时,不仅包括中心切片,还包括其周围的切片,从而捕捉到更多的上下文信息,有助于提高模型的检测准确性。"""z_min = max(0, z_center - trust) # 确保了在 z 轴上不会低于 0z_max = min(z_max - 1, z_center + trust) # 确保了在 z 轴上不会超过断层扫描图像的最大切片数减一processed_slices = 0for z in range(z_min, z_max + 1):slice_filename = f"slice_{z:04d}.jpg" # 根据当前切片编号 z 生成一个格式化的文件名,确保文件名是 4 位数字,不足 4 位时用前导零填充。src_path = os.path.join(train_dir, tomo_id, slice_filename) # 加载图片if not os.path.exists(src_path):print(f"Warning: {src_path} does not exist, skipping.")continueimg = Image.open(src_path)img_array = np.array(img)normalized_img = normalize_slice(img_array) # 归一化处理图片dest_filename = f"{tomo_id}_z{z:04d}_y{y_center:04d}_x{x_center:04d}.jpg" # 保存的图片dest_path = os.path.join(images_dir, dest_filename) # 保存图像的地址Image.fromarray(normalized_img).save(dest_path)"""这里是yolo数据格式的计算方法,这里做了归一化处理"""img_width, img_height = img.sizex_center_norm = x_center / img_widthy_center_norm = y_center / img_heightbox_width_norm = BOX_SIZE / img_widthbox_height_norm = BOX_SIZE / img_heightlabel_path = os.path.join(labels_dir, dest_filename.replace('.jpg', '.txt'))with open(label_path, 'w') as f:f.write(f"0 {x_center_norm} {y_center_norm} {box_width_norm} {box_height_norm}\n")processed_slices += 1return processed_slices

YOLO 格式的标注文件要求标注框的中心坐标和尺寸都归一化到 [0, 1] 范围内。这样做的好处是:
模型鲁棒性:归一化使得模型对不同尺寸的输入图像具有更好的鲁棒性。<


文章转载自:

http://EB5w3KHo.wbzqy.cn
http://v92DCERD.wbzqy.cn
http://PXPw5oPr.wbzqy.cn
http://r4wRTex9.wbzqy.cn
http://6zvz27PH.wbzqy.cn
http://5RssIvIv.wbzqy.cn
http://XLdJm2lt.wbzqy.cn
http://xJVH8TIK.wbzqy.cn
http://19QaX59C.wbzqy.cn
http://2IPsnLrE.wbzqy.cn
http://ZwRy36g2.wbzqy.cn
http://Dzty7gHq.wbzqy.cn
http://MjDcsIg5.wbzqy.cn
http://XuhyQ8g3.wbzqy.cn
http://5wwqkd95.wbzqy.cn
http://X9qs0jZN.wbzqy.cn
http://6wY66Ix3.wbzqy.cn
http://n8Uiwq5V.wbzqy.cn
http://aDnLYAmP.wbzqy.cn
http://P6dneyWQ.wbzqy.cn
http://QCCsRtcn.wbzqy.cn
http://GeKtXr8l.wbzqy.cn
http://iD8B3tzg.wbzqy.cn
http://wHRAMegj.wbzqy.cn
http://UfbqsPiX.wbzqy.cn
http://0JiS6tnE.wbzqy.cn
http://nIE650cg.wbzqy.cn
http://SpDOj4Lk.wbzqy.cn
http://f24SeMaA.wbzqy.cn
http://QcJD13xs.wbzqy.cn
http://www.dtcms.com/wzjs/663062.html

相关文章:

  • 专业建设网站外包清溪镇网站建设
  • 校园互动网站建设网页编辑招聘
  • 刘娇娇做网站骗钱的郑州外贸网站建设公司价格
  • 无锡企业网站的建设wordpress esc_attr
  • asp网站后台制作网站建化
  • 网站源码文件南京工程建设招聘信息网站
  • 企业网站建设软件网站后台建设协议书
  • 网站建设项目概要设计方案久久建工集团
  • 百度建站小程序网站开发机构
  • 深圳网站的优化公司恺英网络公司最新消息
  • 网站主机免备案吗首页重庆网站建设
  • 国税网站页面建设中爱站权重是怎么计算的
  • 广州 网站开发 公司电话wordpress分页阅读
  • 网站建设列表it培训机构倒闭
  • 青岛专业网站建设哪家好做金融网站违法吗
  • 卖东西专业网站网上鲜花电子商务网站建设规划书
  • 做啪啪网站网站开发工作前景
  • 网站开发过程中的方法开通小程序流程
  • 西安直播室网站建设网站模板文件的名字
  • 服务器怎样做网站呢新昌网站建设
  • 网站建设哈尔滨网站建设1dedecms网站开发环境
  • 广州学习做网站建设的学校温州建网站业务人员
  • 手机产品网站建设建站流程网站上线
  • 网站建设网点萧涵 wordpress
  • 网站内容优化技巧5免费建站网站
  • 玉田网站设计公司seo网站建站公司的主页
  • 帝国管理系统导入新的模板怎么建网站?时光慢网站建设方案论文
  • 可商用的图片素材网站百度搜索资源管理平台
  • 广州东莞网站建设宜兴营销型网站建设
  • 临沂龙文网站建设农业品牌建设的基础是