日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于YOLOv8的自定義醫(yī)學圖像分割

新機器視覺 ? 來源:新機器視覺 ? 2023-12-20 10:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

YOLOv8是一種令人驚嘆的分割模型;它易于訓練、測試和部署。在本教程中,我們將學習如何在自定義數(shù)據(jù)集上使用YOLOv8。但在此之前,我想告訴你為什么在存在其他優(yōu)秀的分割模型時應該使用YOLOv8呢?

我正在從事與醫(yī)學圖像分割相關的項目,當我的合作者突然告訴我,我們只有來自175名患者的600張圖像和標注。在醫(yī)學成像領域,這是一個常見的問題,因為臨床醫(yī)生是最忙碌的人,他們有許多職責。然而,他向我保證,一旦模型訓練好(并進行微調(diào)),我們將獲得來自其他300多名患者的圖像和標注,作為額外的測試集以評估我們的模型。

我開始將這50名患者分為訓練、測試和驗證數(shù)據(jù)集,使用8010的比例。對于模型,我首先嘗試了UNet及其變體(ResUNet、Attention UNet、Res-Attention UNet)。這些模型在訓練、測試和驗證數(shù)據(jù)集上表現(xiàn)出色,但在額外的測試集上表現(xiàn)糟糕。然后我想,“讓我們試試YOLOv8;如果有效,那將是很好的,如果不行,那將是一次有趣的學習經(jīng)歷?!睅讉€小時后,它奏效了,令我驚訝的是,在額外的測試集上遠遠超出了我的預期。我不能透露具體數(shù)值,因為論文仍在審查中,但我愿意分享如何將其調(diào)整為自定義數(shù)據(jù)集,以便你可以節(jié)省大量工作時間。讓我們開始制定攻略。

攻略

以下是我們將學習的主題:

1. YOLOv8簡介

2. 安裝庫

3. 數(shù)據(jù)集準備

4. 訓練準備

5. 訓練模型

6. 結果

YOLOv8簡介

YOLOv8是YOLO系列的最新版本,用于實時目標檢測,由Ultralytics開發(fā)。它通過引入空間注意力和特征融合等修改來提高準確性和速度。該架構將修改過的CSPDarknet53骨干網(wǎng)絡與用于處理的先進頭部相結合。這些先進之處使YOLOv8成為各種計算機視覺任務的最新選擇。

安裝庫

以下是安裝庫的選項。

# Install the ultralytics package using conda
conda install -c conda-forge ultralytics


or 


# Install the ultralytics package from PyPI
pip install ultralytics

數(shù)據(jù)集準備

數(shù)據(jù)集需要進行兩個步驟的處理:

步驟1:請按照以下結構組織您的數(shù)據(jù)集(圖像和掩膜):理想情況下,訓練、測試和驗證(val)的比例為8010。數(shù)據(jù)集文件夾的安排如下:

dataset
|
|---train
|   |-- images
|   |-- labels 
|   
|---Val
|   |-- images 
|   |-- labels
|
|---test
|   |-- images
|   |-- labels

步驟2:第二步是將 .png(或任何類型)掩膜(標簽)轉(zhuǎn)換為所有3個標簽文件夾中的 .txt 文件。以下是將標簽(.png、.jpg)轉(zhuǎn)換為 .txt 文件的Python代碼。(您也可以在此操作)

將每個標簽圖像轉(zhuǎn)換為 .txt 文件

import numpy as np
from PIL import Image


import numpy as np
from PIL import Image
from pathlib import Path


def create_label(image_path, label_path):
    # Load the image from the given path and convert it to a NumPy array
    mask = np.asarray(Image.open(image_path))


    # Find the coordinates of non-zero (i.e., not black) pixels in the mask's first channel (assumed to be red)
    rows, cols = np.nonzero(mask[:, :, 0])


    # If no non-zero pixels are found in the mask, return early as there's nothing to label
    if len(rows) == 0:
        return  # Optionally, handle the case of no non-zero pixels as needed


    # Calculate the normalized coordinates by dividing by the respective dimensions of the image
    # This is done to ensure that the coordinates are relative (between 0 and 1) rather than absolute
    normalized_coords = [(col / mask.shape[1], row / mask.shape[0]) for row, col in zip(rows, cols)]


    # Construct a string representing the label data
    # The format starts with '0' (which might represent a class id or similar) followed by pairs of normalized coordinates
    label_line = '0 ' + ' '.join([f'{cord[0]} {cord[1]}' for cord in normalized_coords])


    # Ensure that the directory for the label_path exists, create it if not
    Path(label_path).parent.mkdir(parents=True, exist_ok=True)


    # Open the label file in write mode and write the label_line to it
    with open(label_path, 'w') as f:
        f.write(label_line)






import os


for x in ['train', 'val', 'test']:
    images_dir_path = Path(f'datasets/{x}/labels')
    for img_path in images_dir_path.iterdir():
        if img_path.is_file() and img_path.suffix.lower() in ['.jpg', '.jpeg', '.png', '.bmp']:
            label_path = img_path.parent.parent / 'labels_' / f'{img_path.stem}.txt'
            label_line = create_label(img_path, label_path)
        else:
            print(f"Skipping non-image file: {img_path}")

請注意:在運行上述代碼后,請不要忘記從標簽文件夾中刪除標簽(掩膜)圖像。

訓練準備

為訓練創(chuàng)建 'data.yaml' 文件。只需在Python中運行下面的代碼,它將為YOLOv8創(chuàng)建 'data.yaml' 文件。

yaml_content = f'''
train: train/images
val: val/images
test: test/images


names: ['object']
# Hyperparameters ------------------------------------------------------------------------------------------------------
# lr0: 0.01  # initial learning rate (i.e. SGD=1E-2, Adam=1E-3)
# lrf: 0.01  # final learning rate (lr0 * lrf)
# momentum: 0.937  # SGD momentum/Adam beta1
# weight_decay: 0.0005  # optimizer weight decay 5e-4
# warmup_epochs: 3.0  # warmup epochs (fractions ok)
# warmup_momentum: 0.8  # warmup initial momentum
# warmup_bias_lr: 0.1  # warmup initial bias lr
# box: 7.5  # box loss gain
# cls: 0.5  # cls loss gain (scale with pixels)
# dfl: 1.5  # dfl loss gain
# pose: 12.0  # pose loss gain
# kobj: 1.0  # keypoint obj loss gain
# label_smoothing: 0.0  # label smoothing (fraction)
# nbs: 64  # nominal batch size
# hsv_h: 0.015  # image HSV-Hue augmentation (fraction)
# hsv_s: 0.7  # image HSV-Saturation augmentation (fraction)
# hsv_v: 0.4  # image HSV-Value augmentation (fraction)
degrees: 0.5  # image rotation (+/- deg)
translate: 0.1  # image translation (+/- fraction)
scale: 0.2  # image scale (+/- gain)
shear: 0.2  # image shear (+/- deg) from -0.5 to 0.5
perspective: 0.1  # image perspective (+/- fraction), range 0-0.001
flipud: 0.7  # image flip up-down (probability)
fliplr: 0.5  # image flip left-right (probability)
mosaic: 0.8  # image mosaic (probability)
mixup: 0.1  # image mixup (probability)
# copy_paste: 0.0  # segment copy-paste (probability)
    '''
    
with Path('data.yaml').open('w') as f:
    f.write(yaml_content)

訓練模型

一旦數(shù)據(jù)準備好,其余的非常簡單,只需運行以下代碼。

import matplotlib.pyplot as plt
from ultralytics import YOLO


model = YOLO("yolov8n-seg.pt")


results = model.train(
        batch=8,
        device="cpu",
        data="data.yaml",
        epochs=100,
        imgsz=255)

d2faa654-9eda-11ee-8b88-92fbcf53809c.jpg

恭喜,你成功了?,F(xiàn)在你會看到一個 'runs' 文件夾,你可以在其中找到所有的訓練矩陣和圖表。

結果

好,讓我們在測試數(shù)據(jù)上檢查結果:

model = YOLO("runs/segment/train13/weights/best.pt") # load the model


file = glob.glob('datasets/test/images/*') # let's get the images

現(xiàn)在讓我們在圖像上運行代碼。

# lets run the model over every image
for i in range(len(file)):
    result = model(file[i], save=True, save_txt=True)

將每個 Pred.txt 文件轉(zhuǎn)換為 mask.png

import numpy as np
import cv2


def convert_label_to_image(label_path, image_path):
    # Read the .txt label file
    with open(label_path, 'r') as f:
        label_line = f.readline()


    # Parse the label line to extract the normalized coordinates
    coords = label_line.strip().split()[1:]  # Remove the class label (assuming it's always 0)


    # Convert normalized coordinates to pixel coordinates
    width, height = 256, 256  # Set the dimensions of the output image
    coordinates = [(float(coords[i]) * width, float(coords[i+1]) * height) for i in range(0, len(coords), 2)]
    coordinates = np.array(coordinates, dtype=np.int32)


    # Create a blank image
    image = np.zeros((height, width, 3), dtype=np.uint8)


    # Draw the polygon using the coordinates
    cv2.fillPoly(image, [coordinates], (255, 255, 255))  # Fill the polygon with white color
    print(image.shape)
    # Save the image
    cv2.imwrite(image_path, image)
    print("Image saved successfully.")


# Example usage
label_path = 'runs/segment/predict4/val_labels/img_105.txt'
image_path = 'runs/segment/predict4/val_labels/img_105.jpg'
convert_label_to_image(label_path, image_path)






file = glob.glob('runs/segment/predict11/labels/*.txt')
for i in range(len(file)):
    label_path = file[i]
    image_path = file[i][:-3]+'jpg'
    convert_label_to_image(label_path, image_path)
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:基于YOLOv8的自定義醫(yī)學圖像分割

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于YOLOv8實現(xiàn)自定義姿態(tài)評估模型訓練

    Hello大家好,今天給大家分享一下如何基于YOLOv8姿態(tài)評估模型,實現(xiàn)在自定義數(shù)據(jù)集上,完成自定義姿態(tài)評估模型的訓練與推理。
    的頭像 發(fā)表于 12-25 11:29 ?5924次閱讀
    基于<b class='flag-5'>YOLOv8</b>實現(xiàn)<b class='flag-5'>自定義</b>姿態(tài)評估模型訓練

    【NPU實戰(zhàn)】在迅為RK3588上玩轉(zhuǎn)YOLOv8:目標檢測與語義分割一站式部署指南

    【NPU實戰(zhàn)】在迅為RK3588上玩轉(zhuǎn)YOLOv8:目標檢測與語義分割一站式部署指南
    的頭像 發(fā)表于 12-12 14:30 ?6430次閱讀
    【NPU實戰(zhàn)】在迅為RK3588上玩轉(zhuǎn)<b class='flag-5'>YOLOv8</b>:目標檢測與語義<b class='flag-5'>分割</b>一站式部署指南

    labview調(diào)用yolov8/11目標檢測、分割、分類

    labview使用2020版本64位編輯,調(diào)用yolov8/11的onnx模型案例。 源碼: 通過網(wǎng)盤分享的文件:Labview_cls.zip等4個文件 鏈接: https
    發(fā)表于 04-21 19:37

    如何修改yolov8分割程序中的kmodel?

    自定義YOLOv8分割類class SegmentationApp(AIBase): def __init__(self,kmodel_path,labels,model_input_size
    發(fā)表于 04-25 08:22

    使用YOLOv8做目標檢測和實例分割的演示

    YOLOv8是來自Ultralytics的最新的基于YOLO的對象檢測模型系列,提供最先進的性能。
    的頭像 發(fā)表于 02-06 10:11 ?9333次閱讀

    YOLOv8自定義數(shù)據(jù)集訓練到模型部署推理簡析

    如果你只是想使用而不是開發(fā),強烈推薦通過pip安裝方式獲取YOLOv8包!YOLOv8安裝命令行
    的頭像 發(fā)表于 03-24 09:27 ?1.2w次閱讀

    TensorRT 8.6 C++開發(fā)環(huán)境配置與YOLOv8實例分割推理演示

    YOLOv8實例分割TensorRT 推理代碼已經(jīng)完成C++類封裝,三行代碼即可實現(xiàn)YOLOv8對象檢測與實例分割模型推理,不需要改任何代碼即可支持
    的頭像 發(fā)表于 04-25 10:49 ?8953次閱讀
    TensorRT 8.6 C++開發(fā)環(huán)境配置與<b class='flag-5'>YOLOv8</b>實例<b class='flag-5'>分割</b>推理演示

    YOLOv8版本升級支持小目標檢測與高分辨率圖像輸入

    YOLOv8版本最近版本又更新了,除了支持姿態(tài)評估以外,通過模型結構的修改還支持了小目標檢測與高分辨率圖像檢測。原始的YOLOv8模型結構如下。
    的頭像 發(fā)表于 05-16 11:14 ?1.5w次閱讀
    <b class='flag-5'>YOLOv8</b>版本升級支持小目標檢測與高分辨率<b class='flag-5'>圖像</b>輸入

    教你如何用兩行代碼搞定YOLOv8各種模型推理

    大家好,YOLOv8 框架本身提供的API函數(shù)是可以兩行代碼實現(xiàn) YOLOv8 模型推理,這次我把這段代碼封裝成了一個類,只有40行代碼左右,可以同時支持YOLOv8對象檢測、實例分割
    的頭像 發(fā)表于 06-18 11:50 ?5048次閱讀
    教你如何用兩行代碼搞定<b class='flag-5'>YOLOv8</b>各種模型推理

    如何修改YOLOv8的源碼

    很多人也想跟修改YOLOv5源碼一樣的方式去修改YOLOv8的源碼,但是在github上面卻發(fā)現(xiàn)找到的YOLOv8項目下面TAG分支是空的,然后就直接從master/main下面把源碼克隆出來一通
    的頭像 發(fā)表于 09-04 10:02 ?4047次閱讀
    如何修改<b class='flag-5'>YOLOv8</b>的源碼

    用自己的數(shù)據(jù)集訓練YOLOv8實例分割模型

    YOLOv8 于 2023 年 1 月 10 日推出。截至目前,這是計算機視覺領域分類、檢測和分割任務的最先進模型。該模型在準確性和執(zhí)行時間方面都優(yōu)于所有已知模型。
    的頭像 發(fā)表于 11-10 16:44 ?7181次閱讀
    用自己的數(shù)據(jù)集訓練<b class='flag-5'>YOLOv8</b>實例<b class='flag-5'>分割</b>模型

    YOLOv8實現(xiàn)旋轉(zhuǎn)對象檢測

    YOLOv8框架在在支持分類、對象檢測、實例分割、姿態(tài)評估的基礎上更近一步,現(xiàn)已經(jīng)支持旋轉(zhuǎn)對象檢測(OBB),基于DOTA數(shù)據(jù)集,支持航拍圖像的15個類別對象檢測,包括車輛、船只、典型各種場地等。包含2800多張
    的頭像 發(fā)表于 01-11 10:43 ?4391次閱讀
    <b class='flag-5'>YOLOv8</b>實現(xiàn)旋轉(zhuǎn)對象檢測

    RK3576 yolov8訓練部署教程

    本章展示yolov8模型的在EASY EAI Orin nano的部署過程。
    的頭像 發(fā)表于 04-02 16:04 ?2107次閱讀
    RK3576 <b class='flag-5'>yolov8</b>訓練部署教程

    RV1126 yolov8訓練部署教程

    YOLOv8 是 ultralytics 公司在 2023 年 1月 10 號開源的基于YOLOV5進行更新的 下一個重大更新版本,目前支持圖像分類、物體檢測和實例分割任務,鑒于
    的頭像 發(fā)表于 04-16 14:53 ?1733次閱讀
    RV1126 <b class='flag-5'>yolov8</b>訓練部署教程

    使用ROCm?優(yōu)化并部署YOLOv8模型

    作者:AVNET 李鑫杰 一,YOLOv8介紹? YOLOv8 由 Ultralytics 于 2023 年 1 月 10 日發(fā)布,在準確性和速度方面提供了前沿的性能。YOLOv8 在之前 YOLO
    的頭像 發(fā)表于 09-24 18:32 ?1026次閱讀
    使用ROCm?優(yōu)化并部署<b class='flag-5'>YOLOv8</b>模型
    轮台县| 临城县| 山阴县| 高州市| 徐汇区| 彩票| 依兰县| 塘沽区| 萨嘎县| 涪陵区| 岑溪市| 托里县| 手游| 临湘市| 恭城| 罗平县| 江都市| 沅陵县| 额济纳旗| 崇明县| 都兰县| 全南县| 宣汉县| 随州市| 平潭县| 海原县| 濮阳县| 吐鲁番市| 沽源县| 晋中市| 钟山县| 阿拉善右旗| 醴陵市| 新沂市| 渭源县| 乌苏市| 灵璧县| 和平县| 武安市| 张家口市| 万荣县|