はじめに

こんにちは、戦略技術センターでActive Learningの研究に取り組んでいる梁です。本記事では、弊社が開発した画像セグメンテーション (以下セグメンテーション) 用のActive Learningツール、SegALについて紹介します。

本記事の内容は、以下のとおりです。

  • セグメンテーションにおけるActive Learning
  • セグメンテーションにおけるActive Learningツールとその課題
  • セグメンテーション用のActive Learningツール: SegAL
  • SegALの使い方

セグメンテーションにおけるActive Learning

セグメンテーションにおけるActive Learningは、セグメンテーションのアノテーションコストを減らすことを目的としています。セグメンテーションのアノテーションはピクセル単位で行うため、時間がかかります。そこで、Active Learningを用いて学習に有用なデータを優先して選択・アノテーションすることで、少ないデータ数で高性能なモデルを作成します。セグメンテーションとActive Learningの詳細については、以下の記事を参照してください。

セグメンテーションにおけるActive Learningのワークフローを以下の図に示します。まずは少量の教師ありデータを用いてモデルを学習し、そのモデルで教師なしデータに対して予測を行い、一定の基準で選ばれたデータに対して人手でアノテーションし、最初の教師ありデータと合わせてモデルの再学習を繰り返します。このワークフローは一般のActive Learningと変わりませんが、セグメンテーション用のモデルとサンプリングアルゴリズムを使う点が異なります。

(図1:Active Learningサイクル)

セグメンテーションにおけるActive Learningツールとその課題

現状では、セグメンテーション用のActive Learningツールとして、表1に示すツールがあります。公開されているツールのうち、実行できたのはViewALのみでした。ほとんどのツールは、論文の実現手法として公開されています。そのため、ドキュメントの記述が少なく、セットアップも難しいという問題があります。また、実験で選択できるモデルの数も多くありません。

ツール セットアップの難易度 ドキュメント モデル数
ViewAL
DEAL
ReDAL
ALS4GAN
active_learning
active-segmentation

(表1:GitHubで公開されているセグメンテーション用のActive Learningツール。セットアップ難易度:●成功、▲やや複雑、✕失敗;ドキュメント:●使い方とドックストリングがある、▲使い方がある、✕使い方の記述がない;モデルの数:●:>5、▲:2〜5、:<2)

既存のツールの問題を解決するため、我々は使いやすいツールであることを目標にして、SegALを開発しました。

セグメンテーション用のActive Learningツール: SegAL

SegALの概要

SegALはセグメンテーションのモデルを簡単に構築するためのフレームワーク「segmentation-models-pytorch」に基づいたセグメンテーション用のActive Learningツールです[2]。手軽に利用できることを目指して開発を進めています。

SegALの効果

SegALのデータ数の削減効果について、CamVidPASCAL VOC 2012CityScapes3つのデータセットを使い、実験を行いました。

実験設定

設定名
データセット CamVid, CityScapes, PASCAL VOC 2012
モデル DeepLab V3+
エンコーダ resnet34
エンコーダの重み imagenet
シードデータのパーセンテージ 0.02
サイクルごとに選択するデータのパーセンテージ 0.02
サイクルごとのエポック数 20
バッチサイズ 8
学習率 0.0001

(表2:実験のセットアップ)

データ数の削減

Active Learningを用いた学習データの選択割合と、テストデータでのモデルの性能の関係を次のグラフに示します。グラフの横軸はデータの割合、縦軸はmIoUを示しています。サンプリングアルゴリズムとしては、random sampling (Random)、least confidence (LC)、margin sampling (Margin)、entropy sampling (Entropy)、CEAL sampling (CEAL)、vote sampling (Vote)を使用しています。Supervisedはすべての学習データを用いて学習した際のmIoUを表しています。

(図2:CamVidでの各サンプリングアルゴリズムと性能の結果)

CamVidで性能が一番良かったサンプリングアルゴリズムはCEAL samplingです。フル学習性能の95%に達成したとき、ランダムより、CEAL samplingの方は16%のデータ量を削減できました。

(図3:Cityscapesでの各サンプリングアルゴリズムと性能の結果)

Cityscapesで性能が一番良かったサンプリングアルゴリズムはCEAL samplingです。フル学習性能の95%に達成したとき、ランダムより、entropy samplingの方は20%のデータ量を削減できました。

(図4:PASCAL VOC 2012での各サンプリングアルゴリズムと性能の結果)

PASCAL VOC 2012について、テストデータの正解ラベルが公開されていないため、検証データセットをテストデータとして使い、学習データセットの10%を検証データセットとして使いました。結果として、フル学習性能の95%に達成したとき、ランダムより、entropy samplingとvote samplingの方は18%のデータ量を削減できました。

各データセットの結果により、データセットごとに、相性が良いサンプリングアルゴリズムは異なっていることがわかりました。

SegALの使い方

インストール方法

pip install segal

利用方法

以下のコマンドで、セグメンテーションのActive Learningを簡単に実行できます。

python examples/run_al_cycle.py 
        --dataset CamVid  
        --data_path ./data/CamVid/ 
        --model_name Unet 
        --encoder resnet34 
        --encoder_weights imagenet 
        --num_classes 12 
        --strategy LeastConfidence 
        --seed_ratio 0.02 
        --query_ratio 0.02 
        --n_epoch 1

各パラメータを簡単に紹介します。

  • dataset: データセットを指定する。現在はCamVidVOCCityScapes3つのデータセットを対応している。
  • data_path: データセットのパス。
  • num_classes: データセットのクラス数。
  • model_name: モデルを指定する。利用できるモデルはsegmentation-models-pytorchホームページのarchitecturesセクションで確認できる。
  • encoder: モデルのエンコーダを指定する。エンコーダの種類はencodersセクションで確認できる。
  • encoder_weights: 学習済のエンコーダの重みを指定する。重みの種類は各エンコーダのセクションに記載している。
  • strategy: サンプリングアルゴリズムを指定する。利用可能なサンプリングアルゴリズム:RandomSamplingLeastConfidenceMarginSamplingEntropySamplingCealSamplingVoteSampling
  • seed_ratio: シードデータを全学習データの何パーセントを指定する。
  • query_ratio: サイクル1回でデータの何パーセントを選択する。
  • n_epoch: サイクルを回す回数。

パラメータの設定、各ステップの設定などの詳細はSegALのGitHubページを参照してください。

おわりに

本記事では、セグメンテーション用のActive Learningツール「SegAL」の性能と使い方を紹介しました。もしSegALが研究者のお役に立てれば幸いです。

参考資料

  1. 画像セグメンテーションにおけるActive Learning
  2. SegAL: An active learning freamwork for semantice segmentation