PyTorchモデル構造の確認方法

PyTorchモデル構造の確認方法

概要

  • PyTorchモデルの構造(テキスト/画像)を確認するための定型処理をまとめておく

環境

  • Python 3.10.14
  • PyTorch 2.3.1
  • torchview 0.2.6

確認方法

1.text形式

import torchinfo
import torch
import torchvision

input_size = (1,3,256,256)
model = torchvision.models.wide_resnet50_2()
depth = 3

def get_model_summary(model,input_size,depth,device=torch.device('cpu'),save_path=None):
    summary = torchinfo.summary(
        model=model,
        input_size=input_size,
        depth=depth,
        device=device, #'cuda:0',
        col_names=['input_size','output_size','num_params'])
    if save_path is None:
        print(summary)
    else:
        with open(save_path,mode='w',encoding='utf-8') as fw:
            fw.write(str(summary))
        pass

get_model_summary(model=model,input_size=input_size,depth=depth)

2.画像形式

from torchview import draw_graph
import torchvision

input_size = (1,3,256,256)
model = torchvision.models.wide_resnet50_2()
depth = 3

draw_graph(
    model,
    input_size=input_size,
    graph_name='model',
    depth=depth,
    expand_nested=True,
    graph_dir='TB', # TB:TopToBottom/LR:LeftToRight/BT:BottomToTop/RL:RightToLeft
    hide_inner_tensors=True,
    roll=False,
    show_shapes=True,
    save_graph=True,
    filename='model_graph',
    directory='./',
    ).visual_graph

torch.nn.functional.interpolateのalign_cornersの設定について

概要

  • torch.nn.functional.interpolateのalign_cornersの設定について、整理しまとめる

環境

  • PyTorch 2.5

まとめ

1.公式ドキュメント確認

  • 公式ドキュメントによると、align_cornersは以下のような働きをする
    • 幾何学的には、入出力のピクセルを点ではなく正方形として扱う
    • align_corners=Trueの場合、コーナーピクセルの中心にそろえられる
    • align_corners=Falseの場合、コーナー点にそろえられる
      • 補間時には、境界外の値はコーナー点の値となる

pytorch.org

2.図としてまとめ

公式ドキュメントの内容および、実際にコードを書いて動かした結果より、align_cornersの設定について図にまとめる

align_corners=False(Default)

  • 補間前後の点をそろえる(正方形として扱うので、実際は正方形をそろえるということになる)
  • 補間時に、境界外の値は、コーナーの値となる(以下例の場合、補間処理では白丸となるが、コーナーの値(1や2)の値に置き換えられる)

align_corners=True

  • 補間前後で、コーナーピクセルの中心をそろえる(これがalign cornersの意味)

3.どちらのパラメーターを選ぶべきか

  • 基本的にはタスク/データセットによって異なるため、実験して比較するのがよいと思われる
  • 一般的なケースでは、ひとまずalign_corners=Falseでよさそう
  • ピクセルレベルの精度が求められるようなケース(セマンティックセグメンテーションetc)では、align_corners=Trueのほうが適している場合もあるらしい

PyTorchモデル構造の可視化手法

概要

環境

  • Python 3.10.14
  • PyTorch 2.3.1
  • torchviz 0.0.2
  • hiddenlayer 0.3
  • torchview 0.2.6
  • torchlens 0.1.21

結果

1.torchviz

コード

import torch
import torchvision

from torchviz import make_dot

model = torchvision.models.resnet18()

x = torch.randn(1,3,256,256)
y = model(x)

make_dot(y.mean(),params=dict(model.named_parameters()))

可視化結果

2.hiddenlayer

コード

import torch
import torchvision

import hiddenlayer as hl

model = torchvision.models.resnet18()

hl.build_graph(model, torch.zeros([1, 3, 256, 256]))

可視化結果

→エラーとなって実行できず

AttributeError: module 'torch.onnx' has no attribute '_optimize_trace’

3.torchview

コード

import torch
import torchvision

from torchview import draw_graph

model = torchvision.models.resnet18()

draw_graph(model, input_size=(1,3,256,256), expand_nested=True).visual_graph

可視化結果

4.torchlens

コード

import torch
import torchvision

import torchlens as tl

model = torchvision.models.resnet18()

tl.show_model_graph(model,x)

可視化結果

VSCodeでPythonデバッグ時にモジュール実行する方法

VSCodePythonデバッグ時にモジュール実行する方法

※環境:VSCode 1.89.1

通常(コマンドライン実行)時、モジュール実行するには

$ python -m <dirname>.<modulename>

のように入力する。

[例:カレントディレクトリから見て、toolフォルダの中にtrain.pyがある場合]

$ python -m tool.train

このようなモジュールをVSCodeデバッグする場合、launch.jsonにて、

{
    ...
    "configurations": [
        ...
        "module":"<dirname>.<modulename>",
        ...
    ]
}

のように設定するとよい。

macOS SonomaでMeldが動作しない

macOS SonomaでMeldが動かない

概要

  • 下環境で、Meld(Diffツール)が動作しない
  • 現象:起動はするものの、頻繁にクラッシュする模様(クラッシュの条件までは現状不明)
    • 詳細バージョンをメモしていなかったが、Sonoma 14.2.1にアップデートする前は、そもそもMeldが起動できなかった
  • 現時点では、使える見込みはなさそうなので、mac(Xcode)標準のFileMergeあたりで代用するか…

メモ(調べたこと)

  • Githubを見ても、動作しないことについてのissueが現状open状態となっている

    • 現時点では、有効な解決方法はなさそう github.com
  • Meld公式ページでも、OS Xはまだサポートしていないとの記載 meldmerge.org

  • Homebrewとしても、Meldは非推奨となっている formulae.brew.sh

  • Meldの次バージョン(3.21.0-r4)が、現状はPre-release

    • これがリリースされれば、Sonomaでも動くのかもしれない(未検証) github.com

M1 MacでPyTorch2.1環境構築

M1 MacでPyTorch2.1環境構築

概要

  • M1 Macに以下のPyTorch環境を構築する
    • Python:3.11
    • PyTorch:2.1.2
  • conda(miniconda)は導入済みとする

環境

1.仮想環境を作成

$ conda create --name torch2_1 python=3.11
$ conda activate torch2_1

2.PyTorchのインストール

$ conda install pytorch::pytorch torchvision torchaudio -c pytorch
  • 2023/12/31時点での実行
  • これによりインストールされるのは以下のものとなる
    • pytorch:2.1.2
    • torchvision:0.16.2
    • torchaudio:2.1.2

3.パッケージのインストール

$ conda install numpy opencv matplotlib scikit-learn pandas jupyter tqdm imgaug torchmetrics torchinfo timm ttach lightning

4.動作チェック

>>> import torch
>>> torch.backends.mps.is_available()
True

M1 MacでTensorFlow環境構築(TF2.14版)

M1 MacでTensorFlow2.14環境構築

概要

  • M1 Macに以下のTensorFlow環境を構築する
    • Python:3.11
    • TensorFlow:2.14
  • conda(miniconda)は導入済みとする

環境

1.仮想環境を作成

$ conda create --name tf2_14 python=3.11
$ conda activate tf2_14

2.パッケージのインストール

$ conda install numpy opencv matplotlib scikit-learn pandas jupyter tqdm pydot imgaug

3.TensorFlowのインストール

$ pip install tensorflow==2.14
$ pip install tensorflow-metal==1.1.0

4.動作チェック

import tensorflow as tf
tf.config.list_physical_devices('GPU')

補足