ailia SDKを試す<第11回> places365でシーン推定

 今回は1枚の画像から,ビーチ,書斎,公園といったシーン・カテゴリを推定する Places365系モデルをailia SDK上で試せるサンプル(places365.py)を紹介します.対象モデルは,同じPlaces365データセット(注1)で事前学習された resnet18_places365(以降はResNet-18と表記)とwideresnet18_places365(以降はWideResNet-18と表記) の2種類です.両モデルの推定精度/推論速度/モデル特性を比較し,それぞれのトレードオフを手元の環境で再現/体験できることを狙います.
ーーー
注1:Places365,https://github.com/CSAILVision/places365

 

●使用モデルの概要
▲1,ResNet-18
 ResNet-18は,画像認識で広く利用されている畳み込みニューラル・ネットワークであり,365クラスから構成されるシーン分類データ・セットPlaces365で学習されたモデルです.物体分類を主眼とするImageNet系モデルとは異なり,屋内外の場所や状況を識別する用途に最適化されています.軽量で扱いやすいため,ここでは比較の基準となるモデルとして位置付けます.
▲2,WideResNet-18
 WideResNet-18は,ResNetの残差ブロック構造を維持しつつ,チャネル幅(width)を拡張したモデルです.深さを増やさずに表現力を高められる設計であり,シーン分類での精度向上が期待できます.一方で,パラメータ数や計算量は増加するため,リソースの消費は大きくなります.ここではResNet-18と並べて,推定結果と推論時間を比較し,精度向上の効果と速度低下の度合いを確認します.
▲ResNet-18とWideResNet-18の違い
 両モデルの主な違いを表1にまとめます.

項目 ResNet-18 WideResNet-18
層の深さ 18層 同じ18層
チャネル数 標準
(64,128,256,512)
幅を拡大
(例:128,256,512,1024)
パラメータ数 少ない 多い(幅次第で数倍に)
表現力 標準的 より高い表現力
計算コスト 軽い 重い(ただし深いResNetよりは軽量な場合あり)

表1 ResNet-18 と WideResNet-18 の比較

 

●実行環境
 今回の検証に使用したシステム構成を表2に示します.おおむねミドルクラスのゲーミングPC相当のスペックであり,GPU による推論を手軽に体験できる環境です.

 
名 称 内 容
OS Windows11 Pro
CPU AMD Ryzen5 3600
RAM 32GB
GPU NVIDIA GeForce RTX 3060(12GB)
CUDA Cuda compilation tools, release 12.9, V12.9.86
Python python-3.10.11-amd64
ailia-SDK Version 1.5.0.0
ailia-models v1.4.0
https://github.com/axinc-ai/ailia-models

表2 使用したシステム構成

 

●環境構築
 環境構築の手順は基本的にailia-modelsのREADME.md に従えば問題ありません.ただし,今回利用するplaces365.pyを実行する際には,追加でonnxモジュールのインストールが必要です(リスト1).
******
> python –version
Python 3.10.11
> git clone https://github.com/axinc-ai/ailia-models.git
> cd ailia-models
> python -m venv .venv       <―― Pythonの仮想環境 作成
> .venv\Scripts\activate       <―― 仮想環境 で作業してください
> python -m pip install –upgrade pip
> pip install -r requirements.txt
> pip install onnx
******
リスト1 環境構築の手順

 

 なお,サンプル実行時に必要となる モデルファイルは自動的にダウンロードされるため,利用者が個別に取得する必要はありません.

 

●スクリプトの実行
 初回実行時には,必要なモデル・ファイルが自動的にダウンロードされます.そのため,インターネットに接続された環境でスクリプトを実行してください.ダウンロード済みのモデルはローカルに保存されるため,2回目以降の実行ではネットワーク接続は不要です.正常に実行できれば,推定結果としてシーンカテゴリ(Top-5)と確率値が出力されます.
▲1,デフォルト実行(ResNet-18)
 サンプル・スクリプトをそのまま実行すると,デフォルトでResNet-18が使われます.この場合,画像に対して推定されたシーン・カテゴリが表示され,Top-5の候補とその確率値が確認できます(リスト2).
******
(.venv) PS landmark_classification\places365> python places365.py
 INFO arg_utils.py (13) : Start!
 INFO arg_utils.py (163) : env_id: 3
 INFO arg_utils.py (166) : VulkanDNN-NVIDIA GeForce RTX 3060 (FP16)
 INFO model_utils.py (74) : Downloading onnx file… (save path: resnet18_places365.onnx)
 INFO model_utils.py (80) : ======================= 100.00% ( 44508KB )]
 INFO model_utils.py (82) : Downloading prototxt file… (save path: resnet18_places365.onnx.prototxt)
 INFO model_utils.py (88) : ======================= 100.00% ( 153KB )]
 INFO model_utils.py (89) : ONNX file and Prototxt file are prepared!
 INFO license.py (81) : ailiaへようこそ。ailia SDKは商用ライブラリです。特定の条件下では、無償使用いただけますが、原則として有償ソフトウェアです。詳細は https://ailia.ai/license/ を参照してください。
 INFO places365.py (162) : input.jpg
 INFO places365.py (177) : prediction on input.jpg
–SCENE CATEGORIES:
        0.621 -> patio
        0.310 -> restaurant_patio
        0.020 -> beer_garden
        0.011 -> courtyard
        0.011 -> porch
 INFO places365.py (212) : Script finished successfully.
******
リスト2 デフォルト実行ログ

 

▲2,モデルをWideResNet-18に変更して実行
 サンプル・プログラムの引数で使用するモデルをwideresnet18に指定すると,WideResNet-18を利用して推定を行えます.出力の基本は,ResNet-18と同じように,入力画像に対するシーン推定結果(Top-5分類)が表示されます(リスト3).
******
(.venv) PS  places365> python places365.py –model wideresnet18 –savepath output.png
 INFO arg_utils.py (13) : Start!
 INFO arg_utils.py (163) : env_id: 3
 INFO arg_utils.py (166) : VulkanDNN-NVIDIA GeForce RTX 3060 (FP16)
 INFO model_utils.py (74) : Downloading onnx file… (save path: wideresnet18_places365.onnx)
 INFO model_utils.py (80) : ======================= 100.00% ( 44502KB )]
 INFO model_utils.py (82) : Downloading prototxt file… (save path: wideresnet18_places365.onnx.prototxt)
 INFO model_utils.py (88) : ======================= 100.00% ( 149KB )]
 INFO model_utils.py (89) : ONNX file and Prototxt file are prepared!
 INFO license.py (81) : ailiaへようこそ。ailia SDKは商用ライブラリです。特定の条件下では、無償使用いただけますが、原則として有償ソフトウェアです。詳細は https://ailia.ai/license/ を参照してください。
 INFO places365.py (162) : input.jpg
 INFO places365.py (177) : prediction on input.jpg
–TYPE OF ENVIRONMENT:
        outdoor
–SCENE CATEGORIES:
        0.651 -> patio
        0.068 -> restaurant_patio
        0.043 -> porch
        0.026 -> courtyard
        0.022 -> picnic_area
–SCENE ATTRIBUTES:
         man-made, no horizon, natural light, open area, foliage, wood, vegetation, leaves, trees
 INFO places365.py (212) : Script finished successfully.
(.venv) PS places365>
******
リスト3 モデル変更後の実行ログ

 

 さらに,このサンプル・プログラムでは次の追加情報も得られる点が特徴です.
******
・TYPE OF ENVIRONMENT(屋内/屋外の区別)
・SCENE ATTRIBUTES(属性情報)
・シーン推定要素の可視化画像(以降は可視化画像と表記)
******
 この追加情報より,単にどの場所かを推定するだけでなく,シーンの特徴をより詳細に解釈できます.

 

●可視化画像の色の意味
 推定時に,画像のどの領域を判断材料としたかを示す可視化画像で表現される色の意味は次の通りです.
******
・赤や明るい部分:モデルが,そのシーンを判断するうえで重要と考えている領域
 (例:kitchen クラスならコンロ,流し台が赤くなる)
・青や暗い部分:モデルがほとんど参考にしていない領域.
******
 この可視化画像を利用することで,モデルが何を根拠にシーンを判定したかを直感的に把握できます.結果の妥当性を検証したり,誤判定時にモデルの着目点を分析する手がかりとして役立ちます.

 

●実行結果
 初回実行時には,必要なモデル・ファイルが自動的にダウンロードされます.そのため,インターネットに接続された環境 でスクリプト(places365.py)を実行してください.ダウンロード済みのモデルはローカルに保存されるため,2回目以降はオフラインで実行可能です.
 入力画像には,リポジトリ同梱のサンプル画像を用います.正常に実行できれば図1の結果が得られます.


図1 サンプル・データの実行結果

 

 デフォルトで実行(ResNet-18)した場合の結果は,
******
–SCENE CATEGORIES:
0.621 -> patio
0.310 -> restaurant_patio
0.020 -> beer_garden
0.011 -> courtyard
0.011 -> porch
******
が得られ,モデルをWideResNet-18に変更して実行すると
******
–TYPE OF ENVIRONMENT:
outdoor
–SCENE CATEGORIES:
0.651 -> patio
0.068 -> restaurant_patio
0.043 -> porch
0.026 -> courtyard
0.022 -> picnic_area
–SCENE ATTRIBUTES:
man-made, no horizon, natural light, open area, foliage, wood, vegetation, leaves, trees
******
が得られます.
 両モデルともに,入力画像を patio(中庭)と最も高い確率で推定し,公式サンプルと整合する結果が得られました.また,可視化画像からは屋外に設置されたテーブル/椅子/暖炉付近が推定根拠になっていることが確認できました.これにより,単に結果を得るだけでなく,モデルが何を手がかりに判断しているかを解釈できる点が大きな利点といえます.

 

●さまざまな画像を入力しシーン推定する
 初期動作確認に続き,異なるシーン画像(注2)を入力し,ResNet-18とWideResNet-18 の推定傾向や特徴を比較検討します.今回対象とするシーンを用いることで,両モデルの特性の違いを多様な状況で具体的に確認します.
ーーーー
注2:今回の評価画像は,それぞれのシーンを想定して ChatGPTにより生成したものです.そのため,生成画像特有のバイアスが推定結果に影響する可能性があります.ここでは,その点を踏まえ,単に出力されたシーン名を比較するだけでなく,画像を構成する要素の違いが推定結果にどのように影響するかにも注目し,両モデルの特徴を分析していきます.
▲1,地下鉄
 検証に使用した入力画像と,そのシーン判断要素を示す可視化画像を図2に示します.

 


図2 地下鉄画像を入力した結果

 

 推定結果は,デフォルト実行(ResNet-18)の場合は,
******
–SCENE CATEGORIES:
0.893 -> subway_station/platform
0.106 -> train_station/platform
0.000 -> arcade
0.000 -> railroad_track
0.000 -> corridor
******
となり,モデルをWideResNet-18に変更して実行すると
******
–TYPE OF ENVIRONMENT:
indoor
–SCENE CATEGORIES:
0.785 -> subway_station/platform
0.208 -> train_station/platform
0.002 -> arcade
0.001 -> bus_station/indoor
0.001 -> jail_cell
–SCENE ATTRIBUTES:
no horizon, man-made, enclosed area, indoor lighting, transporting, natural light, metal, glossy, railroad
******
が得られました.
 この画像では,停車している電車とプラット・フォームが主要な判断要素として抽出されました.また,次も確認できました.
******
・両モデルともにsubway_station/platformを最も高い確率で推定しており,ResNet-18は0.893,WideResNet-18は0.785と非常に高いスコアをを示した.
・次点はいずれもtrain_station/platformであり,誤認は見られない.
・WideResNet-18ではScene Attributesとしてenclosed area,indoor lighting,railroadなどが出力され,地下鉄駅の特徴を的確に反映していることが確認できた.
******
 注目すべきは,WideResNet-18がtrain_stationの確率を0.208と,ResNet-18(0.106)より高めに評価した点です.実際に,屋根付きの通常の駅と地下鉄駅は外観が類似するため区別が難しいケースがあり,この挙動はむしろ現実的で妥当な判定といえます.
▲2,オフィス
 検証に使用した入力画像と,そのシーン判断要素を示す可視化画像を図3に示します.


図3 オフィス画像を入力した場合の結果

 

 推定結果は,デフォルト実行(ResNet-18)の場合は,
******
–SCENE CATEGORIES:
0.244 -> office_cubicles
0.190 -> computer_room
0.141 -> office
0.135 -> library/indoor
0.120 -> classroom
******
が得られ,モデルをWideResNet-18に変更して実行すると,
******
–TYPE OF ENVIRONMENT:
indoor
–SCENE CATEGORIES:
0.237 -> library/indoor
0.119 -> computer_room
0.108 -> office_cubicles
0.103 -> legislative_chamber
0.093 -> classroom
–SCENE ATTRIBUTES:
enclosed area, no horizon, man-made, working, reading, wood, cloth, indoor lighting, studying
******
が得られました.
 入力画像はオフィス風景でしたが,両モデルともに推定結果は次のように分散しました.
******
・ResNet-18:最上位はoffice_cubicles(オフィスの仕切りスペース)で0.244,次いでcomputer_room,officeが続く.
・WideResNet-18:最上位はlibrary/indoor(図書館)で0.237,その後にcomputer_room,office_cubiclesが続く.
******
 いずれも確信度は0.25以下と低く,モデルがシーンを一意に特定できず判断に迷っていることが分かります.
 一方,Scene Attributesにはworking,reading,studyingといった要素が示されました.これは机/コンピュータ/人の配置から 学習や作業の空間と解釈された結果です.確かに画像を見直すと,図書館や教室にも見える要素が含まれており,誤判定の理由として納得できます.
▲3,庭(Formal garden)
 検証に使用した入力画像と,そのシーン判断要素を示す可視化画像を図4に示します.


図4 庭の画像を入力した結果

 

 推定結果は,デフォルト実行(ResNet-18)の場合は,
******
–SCENE CATEGORIES:
0.231 -> botanical_garden
0.224 -> park
0.211 -> formal_garden
0.084 -> orchard
0.077 -> field/wild
******
が得られ,モデルをWideResNet-18に変更して実行すると,
******
–TYPE OF ENVIRONMENT:
outdoor
–SCENE CATEGORIES:
0.590 -> formal_garden
0.342 -> topiary_garden
0.033 -> vineyard
0.013 -> vegetable_garden
0.005 -> roof_garden
–SCENE ATTRIBUTES:
vegetation, foliage, open area, shrubbery, natural light, leaves, grass, sunny, man-made
******
が得られました.
 このシーンでは,両モデルの推定に明確な違いが見られました.まとめると次のようになります.
******
・ResNet-18:最上位は,botanical_garden(植物園)で0.231,次いでpark(公園)が0.224,formal_garden(幾何学式庭園)が0.211と確信度が分散した.
・WideResNet-18:最上位は,formal_garden(幾何学式庭園)で0.590と高い確信度を示し,次点もtopiary_garden(刈込庭園)となった.
******
 ResNet-18は,画像の部分的な特徴から植物園と解釈したのに対し,WideResNet-18は広範囲のパターンを捉え,幾何学的に配置された植栽を正しく推定できたと考えられます.また,Scene Attributes にvegetation,shrubbery,sunnyなどが含まれており,庭園の特徴を的確に反映しています.この結果から,広範囲の特徴を認識できるWideResNet-18 の強みがよく表れているといえます.
▲4,動物(ねこ)
 検証に使用した入力画像と,そのシーン判断要素を示す可視化画像を図5に示します.


図5 動物画像を入力した結果

 

 推定結果は,デフォルト実行(ResNet-18)の場合は,
******
–SCENE CATEGORIES:
0.338 -> field_road
0.271 -> lawn
0.181 -> rice_paddy
0.066 -> pasture
0.047 -> hayfield
******
となり,モデルをWideResNet-18に変更して実行すると,
******
–TYPE OF ENVIRONMENT:
outdoor
–SCENE CATEGORIES:
0.283 -> lawn
0.248 -> rice_paddy
0.091 -> field/wild
0.082 -> hayfield
0.058 -> pasture
–SCENE ATTRIBUTES:
grass, no horizon, natural light, open area, vegetation, natural, camping, sunny, farming
******
となりました.
 入力画像は,芝生の上を歩く猫でしたが,両モデルともlawn(芝生)やrice_paddy(田んぼ)といった背景シーンのみを認識し,猫に関するカテゴリは出力されませんでした.
 Scene Attributes にもgrass,sunny,vegetationなど環境的な特徴のみが示され,動物を反映する要素は含まれていません.さらに可視化画像を確認すると,猫自体ではなく毛並みの模様を背景の一部として扱っているように見られました.
 これは,使用したモデルが物体ではなくシーン(場所カテゴリ)を推定するために設計されているためです.動物や人物といった個別対象の検出は対象外であり,この結果はPlaces365系モデルの適用範囲を理解する好例といえます.

 

●GPUの有効化による処理時間の変化
 モデルごとの処理時間およびGPU有効化による違いを確認します.
▲計測条件
 モデルごとの処理時間およびGPU有効化による違いを確認します.計測にはPowerShellのMeasure-Commandを用い,各条件で5回実行した平均値を算出しています.
 本検証環境におけるenv_idの割り当ては次の通りです.
******
•–env_id=0 : CPU 実行
•–env_id=1 : CPU-IntelMKL
•–env_id=2 : VulkanDNN – NVIDIA GeForce RTX 3060 (FP32)
•–env_id=3 : VulkanDNN – NVIDIA GeForce RTX 3060 (FP16)
******
▲実行結果
 実行結果を次に示していきます.

 
オプション 実行環境 実行時間[ms]
–env_id=0 CPU 実行 637
–env_id=1 CPU-IntelMKL 623
–env_id=2 GeForce RTX 3060(FP32) 869
–env_id=3 GeForce RTX 3060 (FP16) 865

表3 resnet18_places365

 
オプション 実行環境 実行時間
[ms]
–env_id=0 CPU 実行 733
–env_id=1 CPU-IntelMKL 727
–env_id=2 GeForce RTX 3060(FP32) 941
–env_id=3 GeForce RTX 3060(FP16) 938

表4 wideresnet18_places365

 
オプション 実行環境 遅延時間
[ms]
–env_id=0 CPU 実行 95
–env_id=1 CPU-IntelMKL 104
–env_id=2 GeForce RTX 3060(FP32) 72
–env_id=3 GeForce RTX 3060(FP16) 73

表5 wideresnet18_places365を利用した事による遅延時間

 

▲評価
 本計測には,プロセス起動/モデル読み込み/終了処理を含む全体の時間を計測しています.両モデルのファイル・サイズは約44Mバイトと同等であるため,起動や読込の差はほとんど無視でき,観測された差分は主に推定処理における計算量の違いによるものと考えられます.
 評価をまとめると次となります.
******
・WideResNet-18を利用すると,ResNet-18 に比べて約 0.1秒の遅延が発生した.
・今回の条件の場合,単発推論ではCPU実行が有利であったが,ランタイムや最適化,I/O条件によって結果は変化する可能性がある.
・GPUを指定した場合の方がCPUとの時間差が少ないことにより,WideResNet-18においては,GPUが有効だと考えられる.
******
 GPUの性能をより生かすには,動画処理や大量画像の連続処理といったシナリオでの検証が望まれます.ただし,そのためにはサンプル・プログラムの改造が必要なため,今回は対象外としました.動画処理における性能検証については,次回以降の課題とします.

 

●まとめ
 今回はPlaces365系モデルをailia-SDK上で動作させ,画像からシーンを推定するデモを紹介しました.今回の検証結果を整理すると,次の通りです.
******
・ResNet-18 Places365は軽量で推論も速く,初期動作確認や組み込み環境などリソース制約があるケースに適している.
・WideResNet-18 Places365は計算量は増えるものの,より広範囲の特徴を捉えられScene Attributes(シーン属性)を含む詳細な推定ができ,精度面で優位性がある.
・検証した複数のシーン(地下鉄/オフィス/庭園/芝生と猫)では,明確な特徴を持つ場面は高精度に分類可能である一方,オフィスのように曖昧な映像では推定結果が分散する傾向が確認された.
・処理時間の計測では,単発画像の判定においてはCPU実行がGPUより高速となり,CPUだけでも十分に高速な処理が可能であることが分かる.GPUの有効性は動画や大量画像の連続処理時にこそ発揮されると考えられる.
******
 以上の結果から,ResNet-18は軽量/高速性,WideResNet-18は精度/表現力という特徴を持ち,用途に応じて使い分けることで,Places365 モデルをより効果的に活用できるといえます.
 なお,今回はChatGP による生成画像を評価に用いたため,推定結果にバイアスが含まれる可能性があります.しかし,今回の検証を通じて得られた シーン推定の得手/不得手の傾向は,実写画像でもおおむね再現されると考えられます.この技術は,ロボティクスやスマート・カメラなど周囲環境を理解するシステムの基盤として応用が期待できます.今回紹介したサンプルは多様なシーンを試せますので,ぜひ手元の環境で実行し,モデルの挙動を体験してみてください.

 

氏森 充(うじもり・たかし)
約30年間,(株)構造計画研究所にてIoT,ビッグデータ,機械学習,AI関連のシステム開発や実務応用に従事.退職後はLLM(大規模言語モデル)関連の情報収集や技術動向の調査・発信に注力し,雑誌「Interface」でもLLM技術に関する記事を執筆中.