인공지능 기술의 지속적인 발전으로 이미지 의미 분할 기술은 이미지 분석 분야에서 인기 있는 연구 방향이 되었습니다. 이미지 의미론적 분할에서는 이미지의 다양한 영역을 분할하고 각 영역을 분류하여 이미지에 대한 포괄적인 이해를 얻습니다.
Python은 강력한 데이터 분석 및 데이터 시각화 기능으로 잘 알려진 프로그래밍 언어로 인공 지능 기술 연구 분야에서 가장 먼저 선택됩니다. 이 기사에서는 Python에서 이미지 의미 분할 기술을 사용하는 방법을 소개합니다.
Python에서 이미지 의미 분할 기술을 사용하는 방법을 배우기 전에 딥 러닝, CNN(컨볼루션 신경망) 및 이미지 처리에 대한 기본 지식이 필요합니다. 숙련된 Python 개발자이지만 딥러닝 및 CNN 모델에 대한 경험이 없다면 먼저 관련 지식을 학습하는 것이 좋습니다.
이미지 의미 분할 기술을 사용하려면 사전 학습된 모델이 필요합니다. 개발자가 사용할 수 있는 사전 학습된 모델을 제공하는 Keras, PyTorch, TensorFlow와 같은 널리 사용되는 딥 러닝 프레임워크가 많이 있습니다.
이 기사에서는 TensorFlow 프레임워크와 해당 글로벌 이미지 의미론적 분할 모델인 DeepLab-v3+, 이미지 처리에 사용할 수 있는 Python 라이브러리인 Pillow 라이브러리를 사용합니다.
다음 명령을 통해 사용해야 하는 라이브러리를 설치할 수 있습니다:
pip install tensorflow==2.4.0 pip install Pillow
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()
이 코드를 실행하면 표시된 예와 유사한 색상 분포를 갖는 신경망 출력을 얻게 됩니다.
이 기사에서는 Python에서 이미지 의미 분할 기술을 사용하는 방법을 소개하고 사전 훈련된 DeepLab-v3+ 모델을 성공적으로 로드했습니다. 물론, 여기에 사용된 예는 방법 중 하나일 뿐이며 연구 방향에 따라 처리 방법도 달라집니다. 관심이 있으시면 이 분야를 자세히 알아보고 자신의 프로젝트에 이러한 기술을 사용해 보십시오.
위 내용은 Python에서 이미지 의미 분할 기술을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!