ACES エンジニアブログ

ACESのエンジニアブログです。

クラウド上でアルゴリズムを素早くセキュアに顧客に提供するためのインフラ基盤 (AWS Transit Gatewayを活用した構築パターン)

こんにちは、株式会社ACESのソフトウェアエンジニアの稲田です。 ACESは画像認識アルゴリズムに強みを持つAIスタートアップです。ACESでサーバエンジニアはどんな仕事してるのだろう?という疑問に答えるべく、ACESのソフトウェア技術関連の発信をしていきたいと思っております。 この記事では、ACESのセキュリティの根幹を支えるネットワークインフラを紹介させて頂きます。

ACESでは保険/スポーツ/報道/小売/建設/製造業など様々な顧客の課題に対してDX提案/取り組みを行っており、抱えているプロジェクト数も多くなっております。 そこで、当たり前の話ですが、

  • 顧客毎のデータをセキュアに保つ
  • オペミス等で誤って他の顧客の環境を壊さない

を満たすデータ管理が必須です。 ACESではこれを実現するため、以下のインフラを構築しております。

  • B2Bビジネスにおいてクラウドを利用する場合、顧客毎に利用するAWSアカウントをわけ、顧客データにアクセスできるメンバーをプロジェクトメンバーに限定する
  • 一方で認証や監視等の共通基盤はまとめる

顧客毎にAWSアカウントをわけることで、AWSクラウドで提供するセキュリティ責任がそのままダイレクトに顧客データに対して担保されることを顧客にわかりやすく説明することができ、安心してデータをお預け頂くことが出来ます。 また、顧客のIT内部統制などのコンプライアンス上の観点から、データへのアクセスログ等の監査ログの取得が必須となる場合にも、AWSアカウントをわけることで比較的簡単かつ柔軟に対応することが可能となります。

ここからは技術的な話にフォーカスして、主にサーバエンジニア向けに「セキュリティを担保しつつ認証や監視等の共通基盤はまとめる」部分をACESではどうやって実現しているか、システム事例紹介させて頂きます。

技術概要

ACESでは前述のインフラを構築するためにAWS OrganizationsとAWS Transit Gatewayというサービスを活用しています。AWS Organizationsを使って複数のAWS アカウントを管理しつつ、認証や監視等の共通基盤は専用のAWSアカウント(shared serviceアカウント)に集約しています。そして、個別のアカウントとshared serviceアカウントの通信ネットワークをAWS Transit Gatewayによって接続しています。利用シーンは大きく2パターンが存在しており、

  1. アルゴリズム推論単体をAPIとして提供 (アルゴリズム単体利用構成)
  2. アルゴリズム推論を活用したサービスを提供 (フルセットサービス構成)

があります。構築の中心となるAWS Transit Gatewayを説明した後に、これらの2パターンのネットワークの構成の詳細について説明していきます。

AWS Transit Gateway とは

まず、構築の中心となるAWS Transit Gatewayについて説明します。AWS Transit Gatewayは、AWSアカウントをまたぐネットワーク(VPC)やオンプレミスを含めた異なるネットワークを一つの中央ハブで接続して通信、通信制御出来る仕組みです。特徴として以下の項目が挙げられます。

  • VPC間接続を簡単に管理するためのシンプルなリージョナルゲートウェイ
  • 数千のVPC, VPN, DirectConnectを接続可能
  • アタッチメントごとのルーティングを可能にするルーティングドメインのサポート

f:id:takaaki_inada:20211005102349p:plain

引用元:[AWS Black Belt Online Seminar] AWS Transit Gateway

ネットワークは合理化され、スケーラブルになります。AWS Transit Gateway は、各 VPC または VPN との間のすべてのトラフィックをルーティングします。すべてのトラフィックを 1 か所で管理して監視できます。

引用元:AWS Transit Gateway(VPC およびアカウント接続を簡単にスケール)

インフラ構築方針

構築の方針を技術的にブレークダウンすると以下のような項目を実現することになります。

  • インフラ構築のリードタイムを最小限にする
  • アルゴリズム単体利用からフルセットサービスまで柔軟なユースケースに対応できるインフラ構成を実現する
  • shared serviceアカウントを活用して共通利用可能な機能を管理する

ネットワーク構成

アルゴリズム単体利用構成

f:id:takaaki_inada:20211006123207p:plain

まず、学習済のアルゴリズムAPI利用する場合ですが、shared serviceで基本的な認証や利用ログ等を含む共通的なFront画面とAPIを提供しており、shared serviceからアルゴリズムリポジトリテーブルを参照してアルゴリズムのendpointを特定しTransit Gatewayを経由してアルゴリズム推論を実行します。

ネットワークの簡単な説明を致しますと、shared serviceアカウントのネットワークを10.0.0.0/16、顧客アカウントを10.1.0.0/16としてTransit Gatewayで接続して、必要なネットワーク(VPC)間のみ通信可能となるようルーティングテーブルを設定します。個別サーバへのセキュリティは基本的には必要なセキュリティグループに所属していない場合はアクセス不可となり、セキュリティグループを作成しアクセス権を付与して担保します。 顧客が増えますと10.2.0.0/16、10.3.0.0/16とネットワークが増えていきますが、各々の顧客のネットワークはルーティング上、相互参照せず、shared serviceとのアクセスのみ可能となっています。

フルセットサービス構成

f:id:takaaki_inada:20211006123156p:plain

推論だけではなくて何らかの個別のドメインデータを持ってサービスを提供する場合はオーソドックスに顧客アカウントでサービスを構築します。この場合はshared serviceの認証や利用ログ等マイクロサービスで提供される機能を必要に応じて利用できます。ここまでくるとAWSアカウントをまたいだ認証情報を持っていなければ、Transit Gatewayは使わず、顧客アカウント内に全部機能を持ってしまって顧客アカウント内でネットワークは閉じてしまっても良いです。

各々の要素はInfrastructureAsCodeでテンプレート化できます。InfrastructureAsCodeでテンプレート化はエンジニアみんな大好きの楽しいお仕事です。

所感

スタートアップのスピード感を保ちながら、守るべきセキュリティーは担保するという課題を、大きすぎる仕組みにならず適切な手早さで実現できている構成だと思います。

顧客毎にAWSアカウントをわけると一言で言ってしまえば簡単ですが、API提供する場合個別AWSアカウントにAPI認証基盤を各々作るのか(例えば認証用に個別にbackendのDBの構築が必要な場合、DBの管理やDBのインスタンス費用を個別に持つのが果たして適切なのか)、実際の構築作業をはじめると多くの細かな問題と作業に悩まされてしまいます。 すぐ顧客にサービスを提供したいというビジネスのニーズは、InfrastructureAsCodeでインフラをコードでテンプレート化することで実現可能にも思えますし、実際できなくはないですが、NATや運用系のリソースを含めたフルセットのテンプレートはなかなかに重く、出来れば各々のビジネスで使うAWSアカウントで作成するリソースセットは最小限の依存関係に留め、誰でも理解できるレベルの小さなテンプレートにしたいものです。

また、ネットワーク周りのインフラは歴史ある組織だと既にVPC Peering等で実現している部分があったりで、それをわざわざ作りなおすかというとなかなかタスクの優先度の観点で後回しになりがちで、AWS Transit Gateway使って今どきのいい感じのシンプルなネットワークインフラを作ってみたくてもなかなか機会がない、組織が微妙に大きすぎてネットワークインフラの再構築はなかなか手がでないとかあったりするのではないでしょうか。 その点、スタートアップだとまっさらなキャンパスでワクワクしながら今どきのAWSのネットワーク構成を構築することができたりします。まだまだまっさらなキャンパス(=最新の技術を使ってみることでスキルが身に付きエンジニアとして成長する領域)はいっぱいあります。

ACESではAWSマルチアカウント構成をAWS organizationsとAWS Single Sign-On構成で実現していますが、こちらのご紹介はまたの機会に。

おわりに

この記事では、ACESのAWSマルチアカウントのネットワークインフラ構成をご紹介しました。 ACESでは、積極的に採用を行っています。ACESに興味をもっていただいた方がいらっしゃいましたら、お気軽にご連絡下さい!

ACESのリクルートページはこちら↓

acesinc.co.jp

モーションキャプチャスタジオを借りて3D姿勢推定用データセットを構築した話

こんにちは、株式会社ACESの武市です。アルゴリズムエンジニアとしてDeep Learningを中心としたアルゴリズムの開発や各アルゴリズムを社内外で効率的に利用できるようにするパッケージ化の業務を行っています。

ACESでは「アルゴリズムで、社会をもっとシンプルに。」というビジョンの元、「Issue driven, simple solution.(最重要の課題発見から、最高の課題解決をしよう。)」、「Fact based, build trust.(客観的事実を大切にし、信頼関係を構築しよう。)」、「Gemba first, verify quickly.(自分の足で情報を得て、自分の手で検証しよう。)」という行動指針を掲げ、画像認識を中心に様々なアルゴリズムの開発を行っています。

AIアルゴリズムの開発にはモデルのアーキテクチャに加えて学習データが重要になりますが、特にACESの取り組んでいる現実世界の問題を解決するためには研究用に公開されているデータでは不十分なことも多いので、ACESでは「Gemba」の課題解決のために泥臭くデータの収集を行うことを含めてアルゴリズムの改善を行っています。

今回、普段我々がどのようにして「Gemba first」なアルゴリズムの開発を行っているかを知って頂くため、最近モーションキャプチャスタジオをお借りして行った3D姿勢推定のためのデータセットの構築についてご紹介させて頂きたいと思います。

3D姿勢推定とは

3D姿勢推定とはヒトの姿勢を3次元的に認識する技術のことを言います。3次元的に認識することができるようになるため、2次元の姿勢推定に比べてより高度な分析や多様なアプリケーションが可能になります。

従来は深度カメラが用いられることが多かったですが、近年ではDeep Learning技術を用いることで2次元画像から高精度に認識することができるようになってきています。ACESでも画像から3次元姿勢推定を行う技術の開発を行っています。

f:id:kazunaritakeichi:20210916130040p:plain

3D姿勢推定 [1]

3D姿勢のデータセット

Deep Learningを用いたアルゴリズムの開発には学習データが重要となります。

3D姿勢のデータセットとしてよく用られるものにHuman3.6M Dataset [2]があります。Human3.6Mは11名の被験者を4台のカラーカメラとモーションキャプチャシステムで食事、歩行等の15種類の動作を撮影した計約360万フレームのデータから構成されるデータセットです。

f:id:kazunaritakeichi:20210915180533p:plain

Human3.6Mデータの例

なぜデータセットの構築を行うのか

Human3.6Mのようなデータセットが世の中にあるにも関わらず新たに構築を行う理由は2つあります。

1つ目はデータセットのライセンスに制限があるためです。Human3.6Mもそうですが、公開されているデータセットには商用利用が不可のものが多くあります。

2つ目は多様かつ実世界での利用シーンに適した行動のデータセットを構築することで精度の向上が見込まれるためです。Human3.6Mでは食事や歩行などの日常的な動作を中心に15種類の動作で構築されていますが、ACESが解決しようとしている現実世界の課題では床に横たわっているなどより複雑な動作を認識する必要がある場合もあります。

撮影手順

モーションキャプチャスタジオ

3次元の姿勢データを計測するモーションキャプチャシステムには様々な種類がありますが、一般的には光学式モーションキャプチャシステムが最も高い精度で計測できます。光学式モーションキャプチャシステムを自社で構築するには数百万円単位での投資が必要ですが、国内にレンタルスタジオが10以上あります。複数のスタジオを検討し、今回は株式会社スパイスのモーションキャプチャスタジオを利用させて頂きました。

マーカーの貼り付け

モーションキャプチャ用スーツの上からモーションキャプチャシステムで認識することのできるマーカーを50点以上に貼り付けます。

f:id:kazunaritakeichi:20210917102032p:plain

ACESの社員が被撮影者をしました

モーションキャプチャシステムのキャリブレーション

モーションキャプチャで認識できるマーカーのついたワンドと呼ばれる器具を用いてモーションキャプチャシステムのキャリブレーションを行います。キャリブレーションを行うことでマーカーの3次元的な位置及びそれらから構築した人体のスケルトンが認識できるようになります。

f:id:kazunaritakeichi:20210916102124j:plain

モーションキャプチャシステムで認識している様子

カラーカメラのキャリブレーションによる内・外部パラメータ、歪みの推定

3D姿勢推定モデルの出力はカメラの位置を原点としたカメラ座標系であることが一般的です。しかし、モーションキャプチャシステムから得られた3次元姿勢はワールド座標系と呼ばれる別の座標系で定義されているため、学習に活用するには、カメラ座標系への変換が必要となります。変換を行うためには、カメラの内・外部パラメータ、歪みの値が必要で、それらの値はカラーカメラのキャリブレーションによって推定することができます。内部パラメータはカメラの焦点距離やカメラ中心の情報を持ち、外部パラメータはワールド座標系に対する回転・並進の情報を持ちます。

モーションキャプチャスタジオをお借りする場合、モーションキャプチャシステムのキャリブレーションはスタジオのスタッフの方に行って頂ける場合が多いようですが、カラーカメラのキャリブレーションは自分たちで行う必要があり、私たちは以下のような手順で行いました。

カラーカメラの内部パラメータ、歪みの推定

まずは内部パラメータ、歪みの推定のために各カメラでチェスボードパターンを多様な角度から撮影します。各画像から認識したチェスボードの角の位置の情報を用いて内部パラメータ、歪みの推定を行います。

f:id:kazunaritakeichi:20210915184828p:plain

内部パラメータ推定のためのキャリブレーションの様子
カラーカメラの外部パラメータの推定

外部パラメータの推定のためにモーションキャプチャで認識できるマーカーのついたワンドを各カメラで多様な角度から撮影します。カラーカメラ画像中のマーカーの位置とモーションキャプチャで計測されたマーカーの位置の関係から外部パラメータの推定を行います。

f:id:kazunaritakeichi:20210915190248p:plain

外部パラメータ推定のためのキャリブレーションの様子

動作の撮影

今回、ACESの取り扱う「Gemba」で認識したい動作を中心に51種類の動作について撮影を行いました(歩く、手を挙げるなど基本的な動作から、投げる打つなどのスポーツ動作、脚立の昇降、転倒、床に横たわるなどより実用的な動作まで含みました)。また、撮影をスムーズに行うために被撮影者の前方にカンペ動画を表示して撮影を行いました。

 

f:id:kazunaritakeichi:20210916102437p:plain

撮影の様子

効果の確認

今回構築したデータセットを用いて学習したモデル行い、ベンチマークモデルと比較してみました。例えば、床にうつ伏せになっている姿勢は、ベンチマークモデルでは認識が難しいですが、今回構築したデータセットで学習したモデルを用いることで正しく認識ができるようになっていることが確認できます。

f:id:kazunaritakeichi:20210928140601g:plain

3D姿勢推定結果の比較(黒:モーションキャプチャで認識した正解データ、青:今回構築したデータセットを用いて学習したモデルで認識した結果、赤:ベンチマークモデルで認識した結果

ACESでは積極的に採用を行っています!

ACESでは、積極的に採用を行っています。ACESでは「Gemba」の課題を解決するために様々な観点からアルゴリズムの開発を行っています。ACESに興味を持っていただいた方がいらっしゃいましたら、お気軽にご連絡下さい!

会社紹介資料はこちら↓

リクルートページはこちら↓

[1] J. Martinez, R. Hossain, J. Romero, J. J. Little, “A simple yet effective baseline for 3d human pose estimation,” In ICCV, 2017.

[2] C. Ionescu, D. Papava, V. Olaru, C. Sminchisescu, “Human3.6M: Large Scale Datasets and Predictive Methods for 3D Human Sensing in Natural Environments,” In TPAMI, 2014.

ACESの開発概要・開発思想のご紹介 ~ACESエンジニアブログの開設にあたって~

こんにちは、株式会社ACESの開発部責任者の久保 (@seishin55) です。

ACESは「アルゴリズムで、社会はもっとシンプルになる。」というビジョンのもと、アルゴリズム事業を展開する会社です。これまで「ヒトの知見を数式化する」ために、画像認識アルゴリズムの開発を特に強みとして開発を行ってきました。さらに現在では、音声認識自然言語処理といったアルゴリズム領域の開発やソフトウェアプロダクトの開発も行っています。そのため、アルゴリズムのエンジニアのみならず、フロントエンド、サーバーサイド、モバイル、インフラなど様々なポジションのエンジニアが活躍しています。

このように、様々な領域で様々なエンジニアが活躍しているにも関わらず、積極的な外部への情報発信をこれまで行ってきておらず、ACESは「謎の多き組織」になってしまっていました。そこで、ACESで「普段どのような開発が行われているか」、「どのような技術・アルゴリズムに注目しているか」、など、ACESの開発について、社外の方々に知ってもらいたいと思い、エンジニアブログを始めることにしました。

ブログを開設するにあたって、ACESがどのような開発を、どのような考えに基づいて行っているのかを紹介していきたいと思います。

ACESの開発概要

ACESの事業は、Deep Learningを中心としたアルゴリズムの価値を社会に届けるという考えのもと設計されています。事業の形態は、具体的には以下の2つに大別されます。

ACESのビジネスモデル
ACESのビジネスモデル

DXパートナー事業

1つ目の 「DXパートナー事業」は顧客の課題に対して、ACESが伴走して一緒に価値実現していくという形態です。ACESが強みとしているリアル産業では、まだまだアルゴリズムによって価値が出せる余地が大きいものの、実際に事業価値に落とし込むところには依然として難しさがあります。ACESはAIのプロフェッショナルの立場から、パートナーとして一緒にAIを事業に組み込んでいきます。

ところで、アルゴリズムを事業価値に落とし込むのはなぜ難しいのでしょうか? 確かに、2012年にDeep Learningアルゴリズムが注目されはじめ、特にここ数年で、アルゴリズムのパフォーマンスも大きく向上しましたし、様々なライブラリやサービスの登場で手軽にアルゴリズムを使用できるようになってきています。ただ、そのような潮流の中で、事業に簡単にアルゴリズムを組み込めるようになったかというと必ずしもそうではないのが現状かと思います。というのも、実際の現場では、Deep LearningモデルのInput/Ouputだけで完結することは多くなく、最終的な価値から逆算した上で、モデル構築や検証、オペレーションの実装などを行っていく必要があるためです。単にSOTA(State of the art / 最先端)のアルゴリズムを提供することが大事なのではなく、最終的な価値を実現するためのプロセスを回すことが大事だと考えています。ACESではこれを「アルゴリズムバリューデザイン」と呼んでいて、1つのコアコンピタンスになっていると思っています。

なお、「アルゴリズムバリューデザイン」を実現する上で、最先端のアルゴリズムの開発を疎かにしてもいいとは思っていません。むしろ、最先端のアルゴリズムを理解した上で選択できるようにしておく必要があります。つまり、単に精度が少し高いアルゴリズムを盲目的に実装することはやらずに、価値を実現する上で必要なものを選択することが大事だということです。そういった考え方に共感してくださる技術者・研究者の方はACESでチャレンジできることが多々あるので、是非ジョインしてほしいと思います。

アルゴリズムソフトウェア事業

次に、2つ目の「アルゴリズムソフトウェア事業」は、ACESで開発してきたアルゴリズム及びノウハウを生かして、アルゴリズムが組み込まれたソフトウェアを提供していく形態です。「DXパートナー事業」は個社ごとのバリューチェーンを意識した形態ですが、「アルゴリズムソフトウェア事業」では企業問わず、または、業界問わずに顕在化する共通の課題に対するソリューションを提供するところに大きな違いがあります。

例えば、現在、特に力を入れて開発を行っているのが、「ACES Meet」というオンライン商談の共有・解析サービスです。昨今ではオンライン会議が一般的になったことによって、商談等の会議がデジタル化され、活用できる土壌が整ってきており、そこに対するソリューションの提供を行っています。

meet.acesinc.co.jp

アルゴリズムを十分に活用するためには、ソフトウェアプロダクトとしてすぐに価値を享受できる状態にして提供することには大きな価値があります。その意味でソフトウェアプロダクトの開発も広義の「アルゴリズムバリューデザイン」のひとつです。プロダクト開発の側面から、どのようにアルゴリズム価値を届けられるかのUXを一緒に創ってみたいという方に是非ジョインしてほしいです。

レバレッジを効かせる開発思想

ACESの開発の特徴のひとつに、レバレッジを効かせる開発を行っていることがあります。元々、プロジェクト型の事業がメインという背景もあり、単にプロジェクトごとに開発を行うだけでは規模の拡大に合わせて、事業は線形にしか伸びていきません。そこで、アルゴリズムをパッケージとしてまとめ上げ、パッケージとしてのアセットの蓄積と提供するアルゴリズムのライセンス提供による積み上げによる非線形な成長を意識して開発を行ってきました。

ACESのパッケージ化戦略
ACESのパッケージ化戦略

アルゴリズムパッケージ

現在では社内のパッケージは複数存在するのですが、特に初期から作り上げてきた社内パッケージの一つに、aces-visionと名付けられたパッケージがあります。このパッケージは動画像系のDeep Learningを中心としたアルゴリズム群が共通の規約の元で実装され、統一されたインターフェース・環境で利用できるようになっています。

例えば以下は、aces-visionによるクラス分類モデルの推論のサンプルです。モデルを選択して読み込み、モデルの設定や重み (model_hashとして定義)を指定するだけのシンプルなインターフェースでアルゴリズムを簡単に利用できます。このパッケージだけでも数十のアルゴリズムモデルが実装されていて、どのアルゴリズムも同様のやり方で利用可能です。動画での推論や複数のアルゴリズムを連続的に適用するためのラッパーも用意しているため、様々なケースに活用できます。

from acesvision.Classification import BasicModel
model = BasicModel(model_hash='BasicModel_xxx_xxx')

image = 'path/to/sample.jpg'

# 1枚の画像の推論
model(image)

# 複数枚の画像の推論
images = [image] * 3
model(images)
# [1, 1, 1]

また、学習も以下のようなインターフェースで簡単に実行できます。学習済みの重みを使ったり、学習を再実行したりする各種オプションが実装されていたり、設定ファイルを変更することでオーグメンテーションやロス関数、Optimizerなどを変更できたりします。

from acesvision.Classification import BasicModel

model = BasicModel(
    model_hash='BasicModel_xxx_xxx',
    dataset_hash='xxx_xxx',
    training=True,
)

# 学習の実行
model.train(initialize='random')

全てのモデルの実装が、ベースとなるクラスを継承してすっきりと実装してあり、学習の実装もPyTorch Lightningのようにシンプルに実装できるように設計しています。そのため、新規のモデルの開発を行う場合も、質の高いアルゴリズムモデルを早く実装できるようになっています。

現在開発を行っている他のアルゴリズムパッケージにもaces-visionの設計思想は継承されています。

アルゴリズム提供基盤とプロダクト

アルゴリズムを提供するにあたって、以下のようにアルゴリズムパッケージを中心とした技術の展開を考えて開発を行っています。

ACESの技術展開
ACESの技術展開

ACESではアルゴリズムを活用した単独のソフトウェアプロダクトを開発しているわけではなく、複数のソフトウェアプロダクトを開発しています。このような開発をするにあたって、全てを1から作ろうとするとコストが線形に積み上がってしまいます。そこで、ここでもレバレッジを効かせるために、アルゴリズムのソフトウェア利用のためのモジュールを基盤として切り離し、その基盤をプロダクト開発で活用するような疎結合な設計を取っています。これによって、複数のソフトウェアプロダクトを開発するときに、都度、共通の基盤が強化され、新規のプロダクト開発のコストが下がっていきます。これによって、プロダクト開発の回転率を高くすることができます。現在では基盤としては「ACES Platform」と呼んでいる社内のAPIの基盤が中心的に開発されています (どのような設計になっているかは別途記事になる予定です)。

その他にも、オンプレでの提供やモバイルパッケージの提供、エッジデバイスへの展開のための開発なども行っていますが、今後さらに力を入れたい項目となっています。開発思想に共感して、一緒に作り上げていってくださる方を絶賛募集中です。

おわりに

この記事ではACESの開発概要と開発思想についてご紹介しました。開発するアルゴリズムの詳細、基盤やソフトウェアプロダクト開発で使用されている技術の詳細は説明しきれませんでしたが、今後このエンジニアブログで紹介していきたいと思っています。(是非、「読者になる」や「シェア」等して頂けると励みになります!)

また、ACESでは各種ポジションで積極採用を行っています。この記事を読んで、「興味あり!」と思った方は是非応募頂きたいです。アルゴリズムエンジニアも引き続き募集していますし、フロントエンド、バックエンドのエンジニアなど広く募集しています。

ACESのリクルートページはこちら↓

acesinc.co.jp

Meetyも開設しているので、とりあえず話を聞いてみたいという方はこちらからどうぞ↓

meety.net