ホームページ  >  記事  >  バックエンド開発  >  Python で画像セマンティック セグメンテーション テクノロジを使用するにはどうすればよいですか?

Python で画像セマンティック セグメンテーション テクノロジを使用するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-06-06 08:03:141461ブラウズ

人工知能技術の継続的な発展に伴い、画像セマンティックセグメンテーション技術は画像分析分野で人気の研究方向となっています。画像セマンティック セグメンテーションでは、画像内のさまざまな領域をセグメント化し、各領域を分類して、画像の包括的な理解を実現します。

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 は、画像セマンティック セグメンテーションのための効率的な深層畳み込みニューラル ネットワーク モデル。これには、拡張畳み込み、マルチスケール データ集約、条件付きランダム フィールド (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 モデルの読み込みに成功する方法を紹介しました。もちろん、ここで使用した例は手法の 1 つにすぎず、研究の方向性が異なれば必要な処理方法も異なります。興味があれば、この領域を詳しく調べて、これらのテクニックを独自のプロジェクトで使用してください。

以上がPython で画像セマンティック セグメンテーション テクノロジを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。