はじめに
2月14日から25日までの2週間、NTTコミュニケーションズのインターンシップに参加させていただいた八木です。普段は大学院で画像処理の高速化に関する研究をしています。インターンシップでは技術コースのうち「AI/MLシステムとの統合を志向した、メディアAI技術の研究開発」ポストに応募しました。全日リモートでの参加で、joinしたチームのマルチA100 GPUサーバなどを用いて画像認識モデルを学習し、NTT Com で独自に構築しているデータセットでその性能評価をしました。この記事では、その体験談を記載します。
インターンシップまでの経緯
就活イベントで NTT Com の紹介を聞いたのですが、そこで色々と説明してくださった社員の方からメディアAI技術開発チームを紹介してもらい、後日今回のメンターさんらと懇談していただきました。その際、チームの紹介を受け興味を持ち、このインターンシップに応募しました。面談で期待することを聞かれた際には、取り組みに用いるデータサイズに対し適切な計算リソースを提供してほしいと伝えたのですが、その希望が反映されたテーマだったと感じます。インターンシップの中ではチームが持つGPUサーバ群の紹介もしていただき、それらがラッキングされた NTT Com のデータセンターを写真(例えば以下)で紹介いただく機会もありました。
インターンシップで取り組んだこと
インターンシップでは、大きく以下の3つに取り組みました:
- 公知の人物検出データセットを複数組み合わせて学習データの規模を大きくする
- 構築した学習データを用いて人物検出器を学習する
- NTT Com が内製で構築しているデータセットを用いて学習したモデルを評価する
公知のデータセットにはいくつか選択肢があったのですが、今回はCOCO とCUHK-SYSU を選びました。人物検出に関する各データセットの統計を以下の表にまとめます。
平均物体サイズは、物体(人物)バウンディングボックスの画素数をそれが含まれる画像の画素数で割って算出しました。画像数・物体数ともにCOCOが最も多いですが、CUHK-SYSUは画像の解像度が高めな一方で物体は小さめに映り込んでいることが分かります。NTT Com で内製構築しているデータセット(NTT Com 内製)の平均物体サイズは、それらのおよそ中間でした。
COCOとCUHK-SYSUはアノテーションのフォーマットが異なるため、そのままでは1つのデータセットとして用いることができません。そこで今回は、CUHK-SYSUのフォーマットをCOCOのそれにコンバートし、かつそれをCOCOの人物アノテーションと結合することで1つのアノテーションデータを構築しました。コーディングにはPythonを使用しました。CUHK-SYSUのフォーマットを解読したり、複数データセットのインデックスを正しくアラインメントしたりするのはなかなか大変で、アノテーションを可視化してフォーマットの解釈が正しいか確認したり、またメンターと画面共有しながらデバッグしたりもしました。
モデル学習速度の比較
そんなこんなで構築したデータセット(COCO + CUHK-SYSU、総画像枚数64115+18184=82299枚)を用いて、まずは異なるGPUサーバでモデルの学習速度を比較しました。結果を以下の図に示します。異なるGPUサーバとして、チームが持つV100 GPUを4基搭載するサーバ(V100 x4)、A100を4基搭載するサーバ(A100 x4)およびA100を8基搭載するサーバ(A100 x8)を使用させていただきました。人物検出モデルはFaster R-CNNで揃えています。
図から、どちらのバッチサイズのケースでも、バッチあたりの学習にかかる時間はV100 x4よりもA100 x4の方が短く、A100 x8では更に短いことが分かります。具体的には、A100 x4はV100 x4の1.4倍程度、A100 x8はA100 x4の1.7倍程度高速でした。大きなバッチサイズですと当然バッチあたりの時間は増えますが、2倍のバッチサイズに対しかかる時間は1.8倍程度に抑えられていました。どの条件でも12エポック学習を回しましたが、V100 x4で9時間程度かかっていた学習がA100 x8では3.5時間ちょっとで終わりました。A100速い。
NTT Com 内製データセットを用いた性能比較
続いて、データセットを組み合わせてそもそも人物検出の精度が向上しているのか確認するため、NTT Com 内製データセットをテストデータとして性能評価をしました。比較のため、COCO・CUHK-SYSUいずれかのみを学習データとして得られたモデルでの評価もしています。以下の表に、Intersection-over-Union (IoU) の閾値を0.5と設定したときのAverage Precision (AP)を示します。
表から分かるように、CUHK-SYSU単独よりもCOCO単独の方が検出性能は高くなります。けれども、それらを1つのデータセットとして組み合わせることで、APが更に0.02以上向上しています。より規模の大きなデータセットでモデルを学習することは、実際に性能向上に寄与することが分かります。なお今回の例では、バッチサイズを16よりも8とした方がわずかながら性能は高い傾向でした。
検出結果例を以下に示します。人物が小さめに映り込むCUHK-SYSUをCOCOと組み合わせてモデルを学習することで、COCO単独の場合に比べ、小さな物体の検出漏れが減っている印象を受けました。
インターンシップの感想
普段は主にC++/CUDAを用いて、深層学習とは直接関連しない画像処理を高速化する研究をしているため、Pythonを用いた深層学習は不慣れな点がありました。しかし、メンターやチームの皆さんのサポートもあり、内部の成果発表までできました。トライ&エラーを含めると結構な回数の学習を回しましたが、期間中にまとめられたのはjoinしたチームが潤沢な計算リソースを有していたことも大きかったと思います。貴重な体験をさせていただき、ありがとうございました。
メンターからのコメント
メンターを担当したイノベーションセンターの田良島です。八木さんインターンシップお疲れ様でした!今回のインターンシップはコロナの影響で完全リモートでの開催でした。チームメンバーとのコミュニケーションはオンラインのみで、また大学での研究とは毛色の異なる作業もあってきっと大変だったと思うのですが、根気強く課題に取り組んでいただいてとても感謝しています。複数のV100やA100が搭載された我々のGPUサーバに触れていただけたことはよかったのかなと感じています。本当は、NTT Com のデータセンターに来てもらい、GPUサーバ群を見学いただけるとよりよかったのですが、今回は残念ながら叶いませんでした。 このインターンシップでの経験が今後の八木さんの研究やキャリアに少しでも役立てば嬉しいです。ありがとうございました!