>  기사  >  백엔드 개발  >  Python에서 이미지 의미 분할 기술을 사용하는 방법은 무엇입니까?

Python에서 이미지 의미 분할 기술을 사용하는 방법은 무엇입니까?

PHPz
PHPz원래의
2023-06-06 08:03:141412검색

인공지능 기술의 지속적인 발전으로 이미지 의미 분할 기술은 이미지 분석 분야에서 인기 있는 연구 방향이 되었습니다. 이미지 의미론적 분할에서는 이미지의 다양한 영역을 분할하고 각 영역을 분류하여 이미지에 대한 포괄적인 이해를 얻습니다.

Python은 강력한 데이터 분석 및 데이터 시각화 기능으로 잘 알려진 프로그래밍 언어로 인공 지능 기술 연구 분야에서 가장 먼저 선택됩니다. 이 기사에서는 Python에서 이미지 의미 분할 기술을 사용하는 방법을 소개합니다.

1. 전제 지식

Python에서 이미지 의미 분할 기술을 사용하는 방법을 배우기 전에 딥 러닝, CNN(컨볼루션 신경망) 및 이미지 처리에 대한 기본 지식이 필요합니다. 숙련된 Python 개발자이지만 딥러닝 및 CNN 모델에 대한 경험이 없다면 먼저 관련 지식을 학습하는 것이 좋습니다.

2. 준비

이미지 의미 분할 기술을 사용하려면 사전 학습된 모델이 필요합니다. 개발자가 사용할 수 있는 사전 학습된 모델을 제공하는 Keras, PyTorch, TensorFlow와 같은 널리 사용되는 딥 러닝 프레임워크가 많이 있습니다.

이 기사에서는 TensorFlow 프레임워크와 해당 글로벌 이미지 의미론적 분할 모델인 DeepLab-v3+, 이미지 처리에 사용할 수 있는 Python 라이브러리인 Pillow 라이브러리를 사용합니다.

다음 명령을 통해 사용해야 하는 라이브러리를 설치할 수 있습니다:

pip install tensorflow==2.4.0
pip install Pillow

3. 이미지 의미 분할을 위해 DeepLab-v3+ 네트워크 사용

DeepLab-v3+는 이미지 의미 분할에 사용되는 효율적인 심층 컨벌루션 신경망 모델입니다. Dilated Convolution, 다중 규모 데이터 집계 및 CRF(조건부 무작위 필드)를 포함한 일련의 고급 기술을 보유하고 있습니다.

Pillow 라이브러리는 이미지 파일을 처리하고 읽기 위한 몇 가지 편리한 도구를 제공합니다. 다음으로 Pillow 라이브러리의 Image 클래스를 사용하여 이미지 파일을 읽습니다. 코드는 다음과 같습니다:

from PIL import Image
im = Image.open('example.jpg')

여기서 example.jpg를 자체 이미지 파일 이름으로 바꿀 수 있습니다.

DeepLab-v3+ 모델과 우리가 읽은 이미지를 사용하면 상세한 이미지 의미 분할 결과를 얻을 수 있습니다. 사전 훈련된 DeepLab-v3+ 모델을 사용하려면 모델 가중치 파일을 다운로드해야 합니다. 공식 TensorFlow 모델 페이지에서 찾을 수 있습니다.

# 导入预训练的 DeepLab-v3+ 模型
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import Conv2DTranspose, Concatenate, Activation, MaxPooling2D, Conv2D, BatchNormalization, Dropout 

def create_model(num_classes):
    # 加载 MobileNetV2 预训练模型
    base_model = MobileNetV2(input_shape=(256, 256, 3), include_top=False, weights='imagenet')

    # 获取对应层输出的张量
    low_level_features = base_model.get_layer('block_1_expand_relu').output
    x = base_model.get_layer('out_relu').output

    # 通过使用反卷积尺寸进行上采样和空洞卷积,构建 DeepLab-v3+ 系统,并针对特定的数据集来训练其分类器
    x = Conv2D(256, (1, 1), activation='relu', padding='same', name='concat_projection')(x)
    x = Dropout(0.3)(x)
    x = Conv2DTranspose(128, (3, 3), strides=(2, 2), padding='same', name='decoder_conv0')(x)
    x = BatchNormalization(name='decoder_bn0')(x)
    x = Activation('relu', name='decoder_relu0')(x)
    x = Concatenate(name='decoder_concat0')([x, low_level_features])
    x = Conv2D(128, (1, 1), padding='same', name='decoder_conv1')(x)
    x = Dropout(0.3)(x)
    x = Conv2DTranspose(64, (3, 3), strides=(2, 2), padding='same', name='decoder_conv2')(x)
    x = BatchNormalization(name='decoder_bn2')(x)
    x = Activation('relu', name='decoder_relu2')(x)
    x = Conv2D(num_classes, (1, 1), padding='same', name='decoder_conv3')(x)
    x = Activation('softmax', name='softmax')(x)

    # 创建 Keras 模型,并返回它
    model = Model(inputs=base_model.input, outputs=x)

    return model

이제 모델을 성공적으로 로드했으므로 이미지의 의미론적 분할을 시작할 수 있습니다. 코드는 다음과 같습니다.

import numpy as np
import urllib.request

# 读取图像
urllib.request.urlretrieve('https://www.tensorflow.org/images/surf.jpg', 'image.jpg')
image = Image.open('image.jpg')
image_array = np.array(image)

# 加载训练好的模型
model = create_model(num_classes=21)
model.load_weights('deeplabv3_xception_tf_dim_ordering_tf_kernels.h5')
print('模型加载成功。')

# 将输入图像调整为模型所需形状,并进行语义分割
input_tensor = tf.convert_to_tensor(np.expand_dims(image_array, 0))
output_tensor = model(input_tensor)

# 显示语义分割结果
import matplotlib.pyplot as plt

parsed_results = output_tensor.numpy().squeeze()
parsed_results = np.argmax(parsed_results, axis=2)
plt.imshow(parsed_results)
plt.show()

이 코드를 실행하면 표시된 예와 유사한 색상 분포를 갖는 신경망 출력을 얻게 됩니다.

4. 요약

이 기사에서는 Python에서 이미지 의미 분할 기술을 사용하는 방법을 소개하고 사전 훈련된 DeepLab-v3+ 모델을 성공적으로 로드했습니다. 물론, 여기에 사용된 예는 방법 중 하나일 뿐이며 연구 방향에 따라 처리 방법도 달라집니다. 관심이 있으시면 이 분야를 자세히 알아보고 자신의 프로젝트에 이러한 기술을 사용해 보십시오.

위 내용은 Python에서 이미지 의미 분할 기술을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.