見出し画像

ギリアの画像認識ライブラリZeusの紹介


はじめに

はじめまして、ギリアでエンジニアをしている井上と申します。
今回は、技術資産や最新の研究成果を集約したPyTorch Lightning *1 ベースの社内ライブラリ「Zeus」を紹介します。
Zeusは、Hydra *2 やTensorBoard *3 などを活用し、オートクチュールのモデルを構築するための基盤として、効率的な開発と技術の進化を支援するものです。ギリアでは、本記事で紹介するZeusをベースにしてモデルをカスタマイズしており、様々な導入方法において利用しています。

Zeusとは

「Zeus」とは、技術の蓄積やノウハウの横展開などを目的として、2019年に立ち上げた社内ライブラリで、主に画像処理タスクを対象としています。
Zeusを作り始めたきっかけとしては、当時、以下のような課題や要望があったことが挙げられます。

  1. 保有する技術資産やノウハウを他の案件に有効に横展開できていなかった。

  2. 技術資産の管理方法が社内で明確に決まっていなかった。

  3. 特定のライブラリ内で論文実装などを行うことで内容を共有し、案件に導入できるようにしたい。

  4. 実装してほしいモデルなどをissueにまとめることで、インターンや業務に余裕がある社員が有効に時間を使えるようにしたい。

検討を始めた当時の社内では、技術の横展開や開発の効率化への取り組みを始めており、PyTorchをベースとしたフレームワークを採用しようと話し合われていました。その結果、Catalyst *4、Ignite *5、PyTorch Lightningの3つが候補にあがりました。この中から、各フレームワークの盛り上がり方や長期的なメンテナンスの見通しを考慮し、最終的にPyTorch Lightningを採用しました。

GitHubリポジトリのStar数の推移(star-history *6 で作成)

Zeusという名称は、PyTorch “Lightning”にちなみ、ギリシャ神話に登場する雷を操る全知全能の神「ゼウス」からつけました。

構成

Zeusは案件へ導入していく想定で作り始めたため、実験管理や再現性の管理を意識せずに行えるようにしています。具体的には、パラメータ管理はHydraに、ログや学習の管理、可視化はTensorBoardに任せています。
しかし、現状では、実験管理やパラメータ管理にはまだ人の手が必要です。例えば、案件や実験ごとに重みや実験パラメータを後から把握できるように保管したり、実行時のコードのバージョンがわかるようにしたりする必要があります。
今後は、HydraやTensorBoardをWandB *7 に置き換えて一元管理できるようにするとともに、コードと実験管理を紐付けることを検討しています。なお、PyTorch LightningはWandBをはじめとする様々なloggerをサポートしています。


どの様に使っているか

リポジトリ内にいくつか実装例が載っているので、それらを参照しながら使っていく形になっています。
モデル自体は既に実装されているので、案件に合わせてデータ読み込み部分(Dataloader)やモデルの設定値などを変更していきます。
DataloaderもCOCOなどの一般的なデータセット形式には対応しているため、タスクの仕様によっては実装例をそのまま利用できることもあります。
実装例をそのまま利用して良い結果が出る場合もありますが、改善の余地がある場合も多いです。その時には、新しいモデルをZeus内に実装して使うこともあります。

git cloneや社内のpypiリポジトリを使ってpip installされたり、Zeusを元にデータやモデルを個別のものにカスタマイズしたりと、色々な導入方法が試されています。この辺りのZeusの導入方法に関しては、案件とZeusの既存資産部分の分離や難読化などより柔軟に対応できるよう、Zeus担当チームで対応を続けています。

また、Zeusは、Ghelia Spectre(ギリア・スペクター) *8 のベースモデルとしても使われています。
Ghelia Spectreとは、遺伝的アルゴリズムと深層学習の組合せで、高い精度を維持したまま小さなサイズのニューラルネットワークを自動設計するAIです。Zeusに対してGhelia Spectreを使用することで、様々な用途の性能が良いモデルから最適化を開始し、より高い精度でより早くカスタマイズしたモデルを作成することができます。

まとめ

ギリアでは、より良いサービスを提供するために社内の既存コードを有効に活用する取り組みを継続していますが、その中でZeusは2019年にいち早く立ち上げ、社内の知財管理やコード品質の向上に着眼して活動を続けてきました。
そして、今では、これまでの案件のノウハウや近年の論文実装、社内の研究開発などから多くの技術が集約されたライブラリに成長し、このZeusをベースにオートクチュールのモデルを用いて開発される案件も増えてきました。
まだまだZeusそのままでは良い精度が出ないタスクや行えないタスクもありますが、これからもさらに良いモデルやノウハウをZeusに集積し、Zeusがベースラインになることで、今後もより良い成果をお客様に届けることができると考えています。                                     


引用:
*1: Welcome to PyTorch Lightning — PyTorch Lightning 2.2.3 documentation https://lightning.ai/docs/pytorch/stable/
*2: Hydra https://hydra.cc/
*3: tensorboard — PyTorch Lightning 2.2.3 documentation https://lightning.ai/docs/pytorch/stable/api/lightning.pytorch.loggers.tensorboard.html
*4: Catalyst https://catalyst-team.com/
*5: Ignite Your Networks! — PyTorch-Ignite v0.5.0.post2 Documentation https://pytorch.org/ignite/
*6: GitHub Star History https://star-history.com/
*7: Weights & Biases: The AI Developer Platform https://wandb.ai/site/
*8: ギリア、遺伝的アルゴリズムを応用し、任意のサイズのニューラルネットワークを自動設計する「Ghelia Spectre(ギリア・スペクター)」の技術検証を完了 https://ghelia.com/news/news_page_201027/

この記事が気に入ったらサポートをしてみませんか?