色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

新機(jī)器視覺(jué) ? 來(lái)源:新機(jī)器視覺(jué) ? 2023-12-20 10:51 ? 次閱讀

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

我正在從事與醫(yī)學(xué)圖像分割相關(guān)的項(xiàng)目,當(dāng)我的合作者突然告訴我,我們只有來(lái)自175名患者的600張圖像和標(biāo)注。在醫(yī)學(xué)成像領(lǐng)域,這是一個(gè)常見(jiàn)的問(wèn)題,因?yàn)榕R床醫(yī)生是最忙碌的人,他們有許多職責(zé)。然而,他向我保證,一旦模型訓(xùn)練好(并進(jìn)行微調(diào)),我們將獲得來(lái)自其他300多名患者的圖像和標(biāo)注,作為額外的測(cè)試集以評(píng)估我們的模型。

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

攻略

以下是我們將學(xué)習(xí)的主題:

1. YOLOv8簡(jiǎn)介

2. 安裝庫(kù)

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

4. 訓(xùn)練準(zhǔn)備

5. 訓(xùn)練模型

6. 結(jié)果

YOLOv8簡(jiǎn)介

YOLOv8是YOLO系列的最新版本,用于實(shí)時(shí)目標(biāo)檢測(cè),由Ultralytics開發(fā)。它通過(guò)引入空間注意力和特征融合等修改來(lái)提高準(zhǔn)確性和速度。該架構(gòu)將修改過(guò)的CSPDarknet53骨干網(wǎng)絡(luò)與用于處理的先進(jìn)頭部相結(jié)合。這些先進(jìn)之處使YOLOv8成為各種計(jì)算機(jī)視覺(jué)任務(wù)的最新選擇。

安裝庫(kù)

以下是安裝庫(kù)的選項(xiàng)。

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


or 


# Install the ultralytics package from PyPI
pip install ultralytics

數(shù)據(jù)集準(zhǔn)備

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

步驟1:請(qǐng)按照以下結(jié)構(gòu)組織您的數(shù)據(jù)集(圖像和掩膜):理想情況下,訓(xùn)練、測(cè)試和驗(yàn)證(val)的比例為8010。數(shù)據(jù)集文件夾的安排如下:

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

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

將每個(gè)標(biāo)簽圖像轉(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}")

請(qǐng)注意:在運(yùn)行上述代碼后,請(qǐng)不要忘記從標(biāo)簽文件夾中刪除標(biāo)簽(掩膜)圖像。

訓(xùn)練準(zhǔn)備

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

訓(xùn)練模型

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

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)在你會(huì)看到一個(gè) 'runs' 文件夾,你可以在其中找到所有的訓(xùn)練矩陣和圖表。

結(jié)果

好,讓我們?cè)跍y(cè)試數(shù)據(jù)上檢查結(jié)果:

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


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

現(xiàn)在讓我們?cè)趫D像上運(yùn)行代碼。

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

將每個(gè) 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)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3226

    瀏覽量

    48807
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1208

    瀏覽量

    24689
  • 醫(yī)學(xué)圖像分割

    關(guān)注

    0

    文章

    5

    瀏覽量

    829

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

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于YOLOv8實(shí)現(xiàn)自定義姿態(tài)評(píng)估模型訓(xùn)練

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

    1602自定義字符

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

    使用YOLOv8做目標(biāo)檢測(cè)和實(shí)例分割的演示

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

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

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

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

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

    在AI愛(ài)克斯開發(fā)板上用OpenVINO?加速YOLOv8目標(biāo)檢測(cè)模型

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

    YOLOv8版本升級(jí)支持小目標(biāo)檢測(cè)與高分辨率圖像輸入

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

    AI愛(ài)克斯開發(fā)板上使用OpenVINO加速YOLOv8目標(biāo)檢測(cè)模型

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

    在AI愛(ài)克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實(shí)例分割模型

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

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

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

    解鎖YOLOv8修改+注意力模塊訓(xùn)練與部署流程

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

    如何修改YOLOv8的源碼

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

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

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

    YOLOv8實(shí)現(xiàn)旋轉(zhuǎn)對(duì)象檢測(cè)

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

    OpenCV4.8 C++實(shí)現(xiàn)YOLOv8 OBB旋轉(zhuǎn)對(duì)象檢測(cè)

    YOLOv8框架在在支持分類、對(duì)象檢測(cè)、實(shí)例分割、姿態(tài)評(píng)估的基礎(chǔ)上更近一步,現(xiàn)已經(jīng)支持旋轉(zhuǎn)對(duì)象檢測(cè)(OBB),基于DOTA數(shù)據(jù)集,支持航拍圖像的15個(gè)類別對(duì)象檢測(cè),包括車輛、船只、典型各種場(chǎng)地等。包含2800多張
    的頭像 發(fā)表于 02-22 10:15 ?1617次閱讀
    OpenCV4.8 C++實(shí)現(xiàn)<b class='flag-5'>YOLOv8</b> OBB旋轉(zhuǎn)對(duì)象檢測(cè)
    主站蜘蛛池模板: 乌克兰粉嫩摘花第一次| 国产精品99AV在线观看| 久久久高清国产999尤物| 无码AV毛片色欲欧洲美洲| 成年人视频免费在线观看| 男助理憋尿PLAY灌尿BL出去| 伊人久久大香线蕉综合网站| 国内精品蜜汁乔依琳视频 | 在线观看精品视频看看播放| 国内精品久久影视免费| 午夜福利电影| 国产精品久久久久婷婷五月色| 日韩精品一区二区三区AV在线观看| 91情国产l精品国产亚洲区| 久欠热视频精品首页| 伊人情人网综合| 久久精品AV一区二区无码| 亚洲深夜在线| 教室里的激情电影| 亚洲欧美人成视频在线| 好大好爽CAO死我了BL| 亚洲精品久久一区二区三区四区| 国产一区二区不卡老阿姨| 亚洲AV无码久久流水呻蜜桃久色| 囯产免费久久久久久国产免费| 日本久久久免费高清| 超碰在线视频 免费| 日本视频中文字幕一区二区| 变形金刚7免费观看完整| 日本 稀土矿| 风流少妇BBWBBW69视频| 神马老子影院午夜伦 | 久久久精品久久| 中文国产在线观看| 绝对诱惑在线试听| 748亚洲大胆国模人体| 欧美四虎精品二区免费| 超碰最新地址| 色综合伊人色综合网站中国| 国产成人女人在线视频观看| 午夜国产大片免费观看|