人工知能技術の継続的な発展に伴い、画像セマンティックセグメンテーション技術は画像分析分野で人気の研究方向となっています。画像セマンティック セグメンテーションでは、画像内のさまざまな領域をセグメント化し、各領域を分類して、画像の包括的な理解を実現します。
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 は、画像セマンティック セグメンテーションのための効率的な深層畳み込みニューラル ネットワーク モデル。これには、拡張畳み込み、マルチスケール データ集約、条件付きランダム フィールド (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 モデルの読み込みに成功する方法を紹介しました。もちろん、ここで使用した例は手法の 1 つにすぎず、研究の方向性が異なれば必要な処理方法も異なります。興味があれば、この領域を詳しく調べて、これらのテクニックを独自のプロジェクトで使用してください。
以上がPython で画像セマンティック セグメンテーション テクノロジを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。