Here's an example of how you can create a 3D UNet model for 3D array segmentation from scratch in Keras:

css

import keras
from keras.models import Model
from keras.layers import Input, Conv3D, MaxPooling3D, UpSampling3D, concatenate

def unet_3d(input_shape, num_classes):
    inputs = Input(input_shape)
    
    # Contracting path
    conv1 = Conv3D(64, (3, 3, 3), activation='relu', padding='same')(inputs)
    conv1 = Conv3D(64, (3, 3, 3), activation='relu', padding='same')(conv1)
    pool1 = MaxPooling3D(pool_size=(2, 2, 2))(conv1)
    
    conv2 = Conv3D(128, (3, 3, 3), activation='relu', padding='same')(pool1)
    conv2 = Conv3D(128, (3, 3, 3), activation='relu', padding='same')(conv2)
    pool2 = MaxPooling3D(pool_size=(2, 2, 2))(conv2)
    
    conv3 = Conv3D(256, (3, 3, 3), activation='relu', padding='same')(pool2)
    conv3 = Conv3D(256, (3, 3, 3), activation='relu', padding='same')(conv3)
    pool3 = MaxPooling3D(pool_size=(2, 2, 2))(conv3)
    
    conv4 = Conv3D(512, (3, 3, 3), activation='relu', padding='same')(pool3)
    conv4 = Conv3D(512, (3, 3, 3), activation='relu', padding='same')(conv4)
    pool4 = MaxPooling3D(pool_size=(2, 2, 2))(conv4)
    
    # Expansive path
    up5 = concatenate([UpSampling3D(size=(2, 2, 2))(pool4), conv4], axis=-1)
    conv5 = Conv3D(512, (3, 3, 3), activation='relu', padding='same')(up5)
    conv5 = Conv3D(512, (3, 3, 3), activation='relu', padding='same')(conv5)
    
    up6 = concatenate([UpSampling3D(size=(2, 2, 2))(conv5), conv3], axis=-1)
    conv6 = Conv3D(256, (3, 3, 3), activation='relu', padding='same')(up6)
    conv6 = Conv3D(256, (3, 3, 3), activation='relu', padding='same')(conv6)
    
    up7 = concatenate([UpSampling3D(size=(2, 2, 2))(conv6), conv2], axis=-1)
    conv7 = Conv3D(128, (3, 3, 3), activation='relu', padding='same')(up7)
    conv7 = Conv3D(128, (3, 3, 3), activation='relu', padding='same')(conv7)

up8 = concatenate([UpSampling3D(size=(2, 2, 2))(conv7), conv1], axis=-1)
    conv8 = Conv3D(64, (3, 3, 3), activation='relu', padding='same')(up8)
    conv8 = Conv3D(64, (3, 3, 3), activation='relu', padding='same')(conv8)
    
    outputs = Conv3D(num_classes, (1, 1, 1), activation='softmax')(conv8)
    
    model = Model(inputs=inputs, outputs=outputs)
    
    return model

This code creates a 3D UNet model that takes a 3D input array of a specified shape and outputs a segmentation of num_classes. The contracting path consists of multiple convolutional and max pooling layers, and the expansive path consists of multiple up-sampling and concatenation layers. The final layer is a Conv3D layer with num_classes filters and a softmax activation function, which outputs a segmented 3D array.
นี่คือตัวอย่างวิธีที่คุณสามารถสร้างโมเดล 3D UNet สำหรับการแบ่งส่วนอาร์เรย์ 3 มิติตั้งแต่เริ่มต้นใน Keras: css import keras จาก keras.models import Model from keras.layers import Input, Conv3D, MaxPooling3D, UpSampling3D, concatenate def unet_3d(input_shape, num_classes ): inputs = Input(input_shape) # เส้นทางการทำสัญญา conv1 = Conv3D(64, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(inputs) conv1 = Conv3D(64, (3, 3 , 3), การเปิดใช้งาน='relu', padding='same')(conv1) pool1 = MaxPooling3D(pool_size=(2, 2, 2))(conv1) conv2 = Conv3D(128, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(pool1) conv2 = Conv3D(128, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(conv2) pool2 = MaxPooling3D(pool_size= (2, 2, 2))(conv2) conv3 = Conv3D(256, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(pool2) conv3 = Conv3D(256, (3, 3 , 3), การเปิดใช้งาน='relu', padding='same')(conv3) pool3 = MaxPooling3D(pool_size=(2, 2, 2))(conv3) conv4 = Conv3D(512, (3, 3, 3) การเปิดใช้งาน='relu', padding='same')(pool3) conv4 = Conv3D(512, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(conv4) pool4 = MaxPooling3D(pool_size= (2, 2, 2))(conv4) # เส้นทางที่ขยาย up5 = เชื่อมต่อกัน ([UpSampling3D(size=(2, 2, 2))(pool4), conv4], axis=-1) conv5 = Conv3D(512, ( 3, 3, 3), การเปิดใช้งาน='relu', padding='same')(up5) conv5 = Conv3D(512, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(conv5 ) up6 = เชื่อมต่อกัน([UpSampling3D(size=(2, 2, 2))(conv5), conv3], axis=-1) conv6 = Conv3D(256, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(up6) conv6 = Conv3D(256, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(conv6) up7 = เชื่อมต่อกัน ([UpSampling3D(ขนาด=(2, 2, 2))(conv6), conv2], แกน=-1) conv7 = Conv3D(128, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(up7) conv7 = Conv3D( 128, (3, 3, 3), activation='relu', padding='same')(conv7) up8 = concatenate([UpSampling3D(size=(2, 2, 2))(conv7), conv1], แกน =-1) conv8 = Conv3D(64, (3, 3, 3), การเปิดใช้งาน='relu', padding='same')(up8) conv8 = Conv3D(64, (3, 3, 3), การเปิดใช้งาน=' relu', padding='same')(conv8) outputs = Conv3D(num_classes, (1, 1, 1), การเปิดใช้งาน='softmax')(conv8) model = Model(inputs=inputs, outputs=outputs) return model นี้ รหัสสร้างโมเดล 3D UNet ที่รับอาร์เรย์อินพุต 3 มิติของรูปร่างที่ระบุและส่งออกการแบ่งส่วนของ num_classes เส้นทางการทำสัญญาประกอบด้วยเลเยอร์การสลับหลายชั้นและการรวมกันสูงสุด และเส้นทางที่ขยายประกอบด้วยเลเยอร์การสุ่มตัวอย่างและการต่อหลายชั้น เลเยอร์สุดท้ายคือเลเยอร์ Conv3D ที่มีตัวกรอง num_classes และฟังก์ชันการเปิดใช้งาน softmax ซึ่งส่งออกอาร์เรย์ 3 มิติแบบแบ่งส่วน
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence