在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

基于YOLOv8的自定義醫學圖像分割

新機器視覺 ? 來源:新機器視覺 ? 2023-12-20 10:51 ? 次閱讀

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

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

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

攻略

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

1. YOLOv8簡介

2. 安裝庫

3. 數據集準備

4. 訓練準備

5. 訓練模型

6. 結果

YOLOv8簡介

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

安裝庫

以下是安裝庫的選項。

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


or 


# Install the ultralytics package from PyPI
pip install ultralytics

數據集準備

數據集需要進行兩個步驟的處理:

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

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

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

將每個標簽圖像轉換為 .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}")

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

訓練準備

為訓練創建 'data.yaml' 文件。只需在Python中運行下面的代碼,它將為YOLOv8創建 '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)

訓練模型

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

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

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

結果

好,讓我們在測試數據上檢查結果:

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


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

現在讓我們在圖像上運行代碼。

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

將每個 Pred.txt 文件轉換為 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)
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模型
    +關注

    關注

    1

    文章

    3243

    瀏覽量

    48840
  • 數據集
    +關注

    關注

    4

    文章

    1208

    瀏覽量

    24701
  • 醫學圖像分割

    關注

    0

    文章

    5

    瀏覽量

    833

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

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

收藏 人收藏

    評論

    相關推薦

    基于YOLOv8實現自定義姿態評估模型訓練

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

    1602自定義字符

    1602液晶能夠顯示自定義字符,能夠根據讀者的具體情況顯示自定義字符。
    發表于 01-20 15:43 ?1次下載

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

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

    YOLOv8自定義數據集訓練到模型部署推理簡析

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

    TensorRT 8.6 C++開發環境配置與YOLOv8實例分割推理演示

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

    在AI愛克斯開發板上用OpenVINO?加速YOLOv8目標檢測模型

    《在 AI 愛克斯開發板上用 OpenVINO 加速 YOLOv8 分類模型》介紹了在 AI 愛克斯開發板上使用 OpenVINO 開發套件部署并測評 YOLOv8 的分類模型,本文將介紹在 AI 愛克斯開發板上使用 OpenVINO 加速
    的頭像 發表于 05-12 09:08 ?1328次閱讀
    在AI愛克斯開發板上用OpenVINO?加速<b class='flag-5'>YOLOv8</b>目標檢測模型

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

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

    AI愛克斯開發板上使用OpenVINO加速YOLOv8目標檢測模型

    《在AI愛克斯開發板上用OpenVINO加速YOLOv8分類模型》介紹了在AI愛克斯開發板上使用OpenVINO 開發套件部署并測評YOLOv8的分類模型,本文將介紹在AI愛克斯開發板上使用OpenVINO加速YOLOv8目標檢
    的頭像 發表于 05-26 11:03 ?1251次閱讀
    AI愛克斯開發板上使用OpenVINO加速<b class='flag-5'>YOLOv8</b>目標檢測模型

    在AI愛克斯開發板上用OpenVINO?加速YOLOv8-seg實例分割模型

    《在 AI 愛克斯開發板上用 OpenVINO 加速 YOLOv8 目標檢測模型》介紹了在 AI 愛克斯開發板上使用 OpenVINO 開發套件部署并測評 YOLOv8 的目標檢測模型,本文將介紹在 AI 愛克斯開發板上使用 OpenVINO 加速
    的頭像 發表于 06-05 11:52 ?1014次閱讀
    在AI愛克斯開發板上用OpenVINO?加速<b class='flag-5'>YOLOv8</b>-seg實例<b class='flag-5'>分割</b>模型

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

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

    解鎖YOLOv8修改+注意力模塊訓練與部署流程

    很多人也想跟修改YOLOv5源碼一樣的方式去修改YOLOv8的源碼,但是在github上面卻發現找到的YOLOv8項目下面TAG分支是空的
    的頭像 發表于 08-11 14:14 ?4362次閱讀
    解鎖<b class='flag-5'>YOLOv8</b>修改+注意力模塊訓練與部署流程

    如何修改YOLOv8的源碼

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

    用自己的數據集訓練YOLOv8實例分割模型

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

    YOLOv8實現旋轉對象檢測

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

    OpenCV4.8 C++實現YOLOv8 OBB旋轉對象檢測

    YOLOv8框架在在支持分類、對象檢測、實例分割、姿態評估的基礎上更近一步,現已經支持旋轉對象檢測(OBB),基于DOTA數據集,支持航拍圖像的15個類別對象檢測,包括車輛、船只、典型各種場地等。包含2800多張
    的頭像 發表于 02-22 10:15 ?1646次閱讀
    OpenCV4.8 C++實現<b class='flag-5'>YOLOv8</b> OBB旋轉對象檢測
    主站蜘蛛池模板: 狠狠色丁香婷婷综合视频| 国产色秀视频| 一级片在线视频| 午夜视频黄色| 性欧美高清短视频免费| 黄色aa毛片| 精品精品国产理论在线观看| 国色天香网在线| 久久久久久久综合| 久久天天综合| 一区二区影院| 国产欧美乱码在线看| 国产深夜福利在线观看网站| 亚洲天堂h| 99久在线| 亚洲免费国产| 狼人激情网| 干中文字幕| 四虎精品视频| 天天舔天天爱| 国产叼嘿免费视频网站| 国产日本在线播放| 男人和女人做爽爽视频在线观看| 色图视频| 青青青久97在线观看香蕉| 中文字幕11页| h录音 国产 在线| 曰本a| 精品乩伦视频| 人人澡人人澡碰人人看软件| 日本三级视频在线观看| 日本高清一本视频| 性欧美网站| 天天爽夜夜爽精品视频一| 中文字幕导航| 亚洲天天看| 最新丁香六月| 6080伦理久久精品亚洲| 激情亚洲婷婷| 97九色| 在线天堂中文www官网|