基于卷积神经网络的图像分割代码
时间: 2024-04-13 09:23:03 浏览: 228
基于卷积神经网络的图像分割是一种常见的计算机视觉任务,可以将图像中的每个像素分配到不同的类别中。以下是一个简单的基于卷积神经网络的图像分割代码示例:
```python
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D
# 定义卷积神经网络模型
def unet(input_shape):
inputs = Input(input_shape)
# 编码器部分
conv1 = Conv2D(64, 3, activation='relu', padding='same')(inputs)
conv1 = Conv2D(64, 3, activation='relu', padding='same')(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = Conv2D(128, 3, activation='relu', padding='same')(pool1)
conv2 = Conv2D(128, 3, activation='relu', padding='same')(conv2)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
# 解码器部分
conv3 = Conv2D(256, 3, activation='relu', padding='same')(pool2)
conv3 = Conv2D(256, 3, activation='relu', padding='same')(conv3)
up1 = UpSampling2D(size=(2, 2))(conv3)
conv4 = Conv2D(128, 3, activation='relu', padding='same')(up1)
conv4 = Conv2D(128, 3, activation='relu', padding='same')(conv4)
up2 = UpSampling2D(size=(2, 2))(conv4)
conv5 = Conv2D(64, 3, activation='relu', padding='same')(up2)
conv5 = Conv2D(64, 3, activation='relu', padding='same')(conv5)
# 输出层
outputs = Conv2D(1, 1, activation='sigmoid')(conv5)
model = Model(inputs=inputs, outputs=outputs)
return model
# 创建模型实例
model = unet(input_shape=(256, 256, 3))
# 编译模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))
# 使用模型进行预测
predictions = model.predict(x_test)
```
这段代码实现了一个简单的U-Net模型,用于图像分割任务。它包括一个编码器部分和一个解码器部分,通过卷积和池化操作提取图像特征,并通过上采样操作恢复分辨率。最后使用sigmoid激活函数输出每个像素的分割结果。
阅读全文
相关推荐

















