0. ディープラーニング向けのライブラリ [概要]
Deep Learning 向けのライブラリ・フレームワーク・ソフトウェアのうち代表的なものを,このページでまとめる.
近年(2022年現在)よく使用されているものを汎用的(1節),ビジョン向け(2節),NLP向け(3節)の,3カテゴリに分けて紹介し,その他(4節)はリンクだけ列挙する:
- 1節 汎用的な Deep Learning ライブラリ
- 1.1 2大ライブラリ (PyTorch , Tensorflow+Keras)
- 1.1 第3の候補:JAX系ライブラリ(Flax や Haiku など)
- 2節 コンピュータビジョン向けライブラリ
- 2.1 大きな実装コードベース.OpenMMLab など
- 2.2 ビジョンのタスク・モデル別
- 2.3 Transformer 系 (ViT, DETR )
- 3節 自然言語処理向けライブラリ
- HugginFace
- 4節 その他
公的な研究・論文向けの,無償で使用できるものを中心に一覧化してある.商用使用を目的とするライブラリや,クラウドデプロイ目的の商用サービス(例えばAmazon SageMakerなど)は,このページではリストアップしていない.
※ この記事では,「ライブラリ」と「フレームワーク」の2つを,便宜上,同じ意味であるとグループ化し,両者を区別せずにライブラリとまとめて呼びたい.この記事で登場するものには,どちらに相当するかの境界線が怪しいものも多く,いちいち呼び分けるの面倒だからである.また「ツールキット」もその中に含める.
1. 汎用的な DL ライブラリ
1.1 2大 DLライブラリ
汎用的な,特定のタスクやライブラリに特化していないディープラーニング向けのライブラリでは,PyTorch と TensorFlow (+ Keras)が,特に研究開発向けでは2強であった (2021年ごろまで).
①PyTorch
- PyTorch 【紹介記事】
- Pytorch-Lightning:
- 軽量・高速化されたPyTorchラッパー.
- 2021年以降,よく使われている印象.
- Catalyst:
- 軽量・高速化されたPytorchラッパー.
- 学習ループを各関数で分離分割管理でき,関数型プログラミング的に短く書ける.
- PyG (PyTorch Geometric):
- 各種構造化データむけのGraphNNを用いた,予測モデルを学習できる.
- 測地線,メッシュ幾何など,3次元や幾何系処理などのグラフ(+点群)データむけに使える.
- 千葉直也氏が,CV最前線 2022 Winterと,詳解 3次元点群処理にて,PyTorch Geometricの導入記事を書かれており,参考になる.
- Pytorch-Lightning:
②TensorFlow2 (と Keras)
- TensorFlow2
- Keras:
- コーディングに癖があるTensorflow本体と違い,Kerasはシンプルなインターフェース.PyTorchのようにさくさくコードを書ける.
- Tensorflow Lite :
- エッジ計算・モバイル向け.
- Tensorflow.js:
- ブラウザ向け.
- Keras:
これらに加えて MXNet 勢,というのが,2021年前半の状況だった.そこに,Google界隈から「JAXを用いた深層学習フレームワーク」が登場しはじめる.
※ [2022年6月末追記] PyTorch 1.11から,β版として,JAXライクに,gradやvmapなどを使えるfunctorchモジュールが追加された.JAXの影響の波及が,本格的になってきたといえる.
1.2 ③JAX をベースにした深層学習ライブラリ (第3の定番へ?)
2021年ごろから「Google JAX を用いた,FLAXなどの深層学習ライブラリ」が第3の定番DLライブラリの主軸候補として,研究者中心に普及しはじめている.
JAX をバックエンドに用いたFLAXなど深層学習ライブラリを用いると,JAXが提供する関数 (vmap,grad, vjpなど) による,「コンポーザブルな関数変換」の恩恵を,科学技術計算・深層学習のコーディングにおいても得られる (JAXのgithubの説明などを参照のこと).
ViT(Vision Transformer)やMLP-mixerの,Googleによる公式コードgithubレポジトリはJAX/Flaxベースであるなど,最先端研究者だと,JAXも触る必要性が少しずつ出てきている状況ではある(2022年後半記述).
2023年2月末には,Google Cloudの中井さんから,日本語のJAX/Fllaxの入門書が登場した.基礎的なことをJAX/FLAX/Optaxで構築する方法を学べる:
JAX/Flaxで学ぶディープラーニングの仕組み 2023/2/28/ 中井悦司, マイナビ出版.
1.3 その他の汎用DLライブラリ
2 コンピュータビジョン向けライブラリ
2.1 多種タスクのコードベース/Example集
- コンピュータビジョン・ディープラーニング全般のライブラリ
- OpenMMLab:SenseTimeやその創立元である香港中文大学(CUHK)の研究者・学生が中心として開発されている,PyTorchベースの深層学習ライブラリ.
- MM=Multimediaであるのは,SenseTimeの創業を行ったXiaoou Tangの研究室MMLabが,コンピュータビジョンだけでなく,画像映像に対するマルチメディア系の研究(画像検索・映像検索・映像要約など)も含めて研究していて広義で「マルチメディアラボ」という名前の研究室であるため.OpenMMLabは,(主にコンピュータビジョンの)タスクごとに,細かくサブフレームワークに分離されている(代表的ものは3.2節で紹介).特に物体検出向けの MMDetection が有名だったが,2020年以降は,他のタスクの MMSegmentation や MMAction2 なども充実してきている印象.全体像や使用法は CVPR2021のチュートリアルが参考になる.
一方で,Mask R-CNN の提案以降,Facebookラボが得意とするインスタンスセグメンテーションに関しては,OpenMMLab は成長できていない印象.
- MM=Multimediaであるのは,SenseTimeの創業を行ったXiaoou Tangの研究室MMLabが,コンピュータビジョンだけでなく,画像映像に対するマルチメディア系の研究(画像検索・映像検索・映像要約など)も含めて研究していて広義で「マルチメディアラボ」という名前の研究室であるため.OpenMMLabは,(主にコンピュータビジョンの)タスクごとに,細かくサブフレームワークに分離されている(代表的ものは3.2節で紹介).特に物体検出向けの MMDetection が有名だったが,2020年以降は,他のタスクの MMSegmentation や MMAction2 なども充実してきている印象.全体像や使用法は CVPR2021のチュートリアルが参考になる.
- GluonCV:MXNetを使用したコンピュータビジョン用のフレームワーク.
- 画像認識/物体検出/セグメンテーション/人物姿勢推定/アクション認識など,代表的な問題設定むけのDeepネットワークを,少ない行数で構築することができる.
- Model Zoo を見ると,用意されている学習済みネットワーク一覧を確認できる
- NVIDIAのDeep Learning Examples
- OpenMMLab:SenseTimeやその創立元である香港中文大学(CUHK)の研究者・学生が中心として開発されている,PyTorchベースの深層学習ライブラリ.
2.2 タスク別のフレームワーク(ツールキット)
- 物体検出 ( + インスタンスセグメンテーション・人物姿勢推定):
- Dectron2 (from Facebook Research )
- Dectorn2 Beginner's tutorial (Google Colab上のチュートリアル)
- MMDetection (from OpenMMLab):
- Dectron2 (from Facebook Research )
- セマンティックセグメンテーション:
- MMSegmentation (from OpenMMLab)
- 人物姿勢推定・人物姿勢追跡
- OpenPose (CMUのpart affinity field)
- OpenPifPaf
- MMPose (from OpenMMLab)
- アクション認識
- MMAction2 (from OpenMMLab)
- PytorchVideo
- テキスト検出(自然画像からのOCR)
- マルチモーダルGPT (V-Lなどの事前学習)
- Multimodal-GPT (from OpenMMLab)
2.3 Transformer系
Transformerのモデルは,(ライブラリではなく)個別のソフトウェアも多い整理しておくと,皆様便利かもしれないので,(少しだけ)まとめておく:
- Vision Transformer(ViT)系:
- DETR系
これらのTransformer系モデルのコードも多く含んでおり,大変便利な「HuggingFace Tranformers」については,次の3.1節で紹介する
3. NLP 向けライブラリ
3.1 HugginFaceのTransformers
Huggingface🤗のTranformersは(元々は)自然言語処理むけの「Transformerを仕様した各種有名モデル」を提供するオープンソース・フレームワークである.言語としてはPyTorch (主), Tensforflow, JAXなどに対している.
Huggingface🤗のTranformers のHP
※ 登場の経緯については,TechBlitzでの創業者インタビュー が参考になる
HuggingFaceのTransformerには,以下のような特徴や機能がある.
- (2022年5月追記) 日本語BERT の例:
- HuggingFace Transformersに,「日本語で事前学習したBERT」が集結しつつある.
- 例1 ) 乾研の BERT-japanse
- 例2 ) 黒橋研 BERT-japanese (ただし,古くなっているので以下のROBERTa-japanese使用を推奨している)
- 例3 ) 河原研 ROBERTa-baseとROBERTa-LARGE
3.2 他の主要なNLPライブラリ
- AllenNLP:Allen Instituteが提供するDeep Learning手法ベースの自然言語処理ライブラリ.
- spaCy: 実応用向けの,Pythonによる総合NLPツールキット.
- 最先端の研究者やその成果を使いたい人はHuggingfaceを使うようになってきているが,spaCyは様々なタスクの学習済みモデルが収録されており使い勝手が良い
- v2.3 から日本語モデルも正式に追加され,日本語でのNLPにも使える.更に, v3.0からTransformerモデルも導入された.
- また,64以上の言語向けで各種NLPモデルが収録されており,Pytorch/Tensorflowで独自モデルも組める.
- Stanza (github) : Stanford NLP Groupによる,PyTorchベースの自然言語処理ライブラリ.
- 66種類の言語向けに「多言語対応」している
- Stanford としては,NLTKの後継「多数言語向け」ライブラリである.
- spacyでのラッパーを使うと,spacyからもStanzaの各機能を使える.
4. その他 ライブラリ(用途別)
- Graph Neural Networks
- 学習高速化
- 分散学習の簡易化•高速化
- 画像データセットのラベリング・可視化ツール