AI AI できること Python プログラミング

【python AI】セマンティックセグメンテーションの実装方法 -学習と確認-

前回セグメンテーション用のデータを準備しました。

参考【python AI】セマンティックセグメンテーションの実装方法 -データの準備-

続きを見る

 

次はこのデータを使って学習をして、画像に映った犬と背景を分けれるようにします。

 

本記事はこんな方におすすめです。

hituji
セグメンテーションの学習方法がわからない
どのライブラリを使えばわからない

 

 

本記事の内容

  • セグメンテーションできるライブラリ
  • 学習の実装
  • 学習後の確認方法

 

 

サンプルコード、データ

 

スポンサーリンク

ライブラリ

ライブラリは以下のものを使用します。

AI pytorch
セグメンテーション segmentation-models-pytorch
データ拡張 albumentations
画像 opencv-python
画像表示 matplotlib

 

AIライブラリのpytorchは下記リンクを参照して、OSなどを選択してインストールしてください。

>> pytorch 公式

次のようにOSやCUDAのバージョンを選択して、出てくるpip コマンドを使います。

 

セグメンテーション用のモデルは下記のGitHubのものを使わせていただきます。

セグメンテーションのモデルを構成する、エンコーダー、デコーダーのモデルが色々組み合わせて選ぶことができて、使い方も比較的簡単です。

>> segmentation-models-pytorch (GitHub)

 

学習にはGPUがのったパソコンが必要になります。

手元に無い方は、Google Colaboratoryを利用してください。

>> Google Colaboratory

その場合のライブラリのインストールはセルでpipを実行します。

次のように!をつけるとインストールができます。

 

学習の実装

前回の「【python AI】セマンティックセグメンテーションの実装方法 -データの準備-」で準備したデータを使って、学習をしていきます。

参考【python AI】セマンティックセグメンテーションの実装方法 -データの準備-

続きを見る

 

コード全体は少し長くなるので、下記のGitHubを参照ください。

>> コードサンプル GitHub

 

上記コードを小分けにして紹介していきますが、ライブラリで紹介されているコードを参考にさせていただいています。

>> segmentation-models-pytorch のサンプルコード

 

ライブラリ読み込み

まず、必要なライブラリを読み込みます。

 

関数の宣言

いくつか関数を宣言します。

 

データセットの確認

データセットの中身を確認するための関数です

 

データ拡張

データが少ない場合、データをずらしたり反転したりすることで、データの量を増やしますが、その処理関数になります。

 

データ の前処理

imagenetの学習済みモデルを部分的に使うので、その正規化処理や、画像の「高さ,幅,CH」を「CH,高さ,幅」の入れ替えを行なっています。

 

データセット

関数ではありませんが、BaseDatasetを継承して、Datasetを作ります。

 

モデルを宣言

モデルを決めます。

今回はエンコーダーにresnet34、デコーダーにUNetを選んでいます。

色々な組み合わせが、ありますので、精度が良くなるように色々試してみると良いでしょう。

 

データセットを作成

データセットを作成します。

前回作った、データはtrain、valフォルダに分けましたので、それを読み込みます。

 

データを確認してみます。

ちゃんと読み込めていることが確認できます。

 

学習

データが読めたので、学習に進みます。

学習の精度指標やloss、最適化関数を決めます。

最適化関数など変更できる方は、色々試してみると良いでしょう。

精度指標は、IoUという指標ですが、下記リンクがとてもわかりやすく紹介されています。

>> IoUの説明(外部サイト)

 

ライブラリに、1エポック学習するものが用意されているので、それを使います。

 

あとは、決めた回数分学習しますが、今回は40とします。

25Epoch目に学習率を変更しています。

 

こんな感じで学習が完了します。

 

学習後の確認

学習したモデルを使って、どのようにセグメンテーションできるか確認します。

テスト用の画像を用意せず、そのままvalフォルダのデータを使っていきます。

 

これで、AIが予測して結果が取得できたので、表示してみます。

精度がいいとは言えませんね。

100枚の学習なので仕方がありませんが、AIモデルのエンコーダー、デコーダなど調整して色々試すとまた違った結果になりますので、色々試してみてください。

 

-AI, AI できること, Python, プログラミング

© 2021 ひつじ工房