FX初心者

バイナリデータとは

バイナリデータとは

Publaynetの画像データ

Amazon Kinesis Video Streams を用いた機械学習のためのパイプラインの構築

Amazon Kinesis Video Streams (KVS) は、コネクテッドデバイスから バイナリデータとは AWS にビデオを安全にストリーミングし、分析、機械学習 (ML) 、再生、その他の処理を簡単に行うことができるようにします。KVS は、数百万台のデバイスからストリーミングビデオデータを取り込むために必要なすべてのインフラを自動的に準備し、柔軟にスケールします。KVS は、ストリームのビデオデータを耐久性をもって保存、暗号化、インデックス化し、使いやすい API を通じてデータにアクセスできます。KVS は、ライブやオンデマンドでのビデオ再生、コンピュータビジョンやビデオ解析を活用したアプリケーションの迅速な構築を可能にします。2022年5月4日、KVS は、ビデオデータを分析し、顧客に実用的な洞察を提供するためのスケーラブルな機械学習パイプラインを容易に構築する新機能を発表しました。このブログ記事では、KVS に保存されているビデオデータを バイナリデータとは バイナリデータとは バイナリデータとは ML 処理に適した画像形式に変換するために必要なコンポーネントを設定する手順を説明します。

今日、お客様は、ビジネス上の課題を解決するために、ビデオストリームに ML 機能を追加したいと考えています。これらの課題は、人やペットの検出から、製造における欠陥の特定などのドメイン固有の課題まで多岐にわたります。このプロセスにおける共通の要件は、動画を ML パイプラインに配信可能な画像形式に変換することです。画像生成機能の提供開始以前は、KVS に保存された動画を分析したいお客様は、動画を JPEG や PNG などの画像形式に変換するための計算リソースを構築、運用、拡張する必要がありました。AWS は、このソリューションをお客様が独自に構築できるように多くのサービスを提供していますが、ゼロから構築すると何週間もの労力が必要となり、結局は製品の差別化にはつながりません。

  1. マネージドな Amazon S3 への画像送信
  2. オンデマンド画像生成 バイナリデータとは API
  3. Amazon Simple Notification Service のキューへのストリームイベントの配信

このブログでは、マネージドな Amazon S3 への画像送信に焦点を当てます。その他の機能については、APIドキュメンテーションのページを参照してください。

ソリューションの概要

カメラデバイスからKVSサービスへのビデオの流れを示すハイレベルの図。KVS サービスは、ビデオを画像に変換して、 Amazon S3 に保存します。

注意:このソリューションを導入すると、AWSの請求に費用が発生します。価格の詳細については、価格ページを参照してください。

Amazon S3 サービス

Amazon S3 サービスは、生成された画像を、タイムスタンプや関連する KVS フラグメント ID を含むメタデータとともに保存します。フラグメント ID は、画像生成に使用されたオリジナルのビデオデータを取得するために使用できます。

KVS C++ Producer SDK

KVS バイナリデータとは C++ Producer SDK は、GitHub で公開されているオープンソースの SDK です。この SDK の目的は、ビデオデータをフラグメントに分割し、そのフラグメントを KVS サービスに送信して、タイムインデックスを作成して保存することにあります。Producer SDK は、フラグメントにタグを追加する putEventMetadata という名前のメソッドを提供します。このタグは、KVS サービスに画像を自動生成するよう通知するために使用されます。 SDK バイナリデータとは が提供するサンプルアプリケーションは、このメソッドを自動的に呼び出して、サービスの画像生成機能をテストします。注:KVS は Java および C 言語の Producer SDK を提供しており、これらの SDK でもこのタグ付けメソッドを提供しています。

KVS サービス

KVS サービスは、映像のタイムインデックスを作成し、顧客が設定した保存期間中、映像を保存します。KVS の各カメラは、一意の “ストリーム” として表現されます。KVS サービスの画像生成機能は、ストリーム単位で設定する必要があります。この設定には、画像出力形式(JPEG、PNG)、サンプリング間隔、画質、保存先 Amazon S3 バケットを含みます。

ソリューションの構築

Amazon バイナリデータとは バイナリデータとは S3 バケットの作成

KVS の画像生成機能では、画像生成の設定の一部として、Amazon S3 バケットを指定する必要があります。Amazon S3 バケットは、KVS サービスを使用するのと同じ AWS リージョンに作成する必要があります。以下の例では、バケットを us-east-1 に指定しています。

KVS C++ Producer SDK のチェックアウトとコンパイル

注:このブログ記事では、Kinesis Video Streams C++ Producer SDK と Raspberry Pi を使用して、実機による画像生成のデモを行っています。KVS C++ Producer SDK バイナリデータとは に含まれるサンプルアプリケーションは、Mac、Windows、Linux でコンパイルすることが可能です。これらのプラットフォーム向けのビルド方法については、GitHub 上の readme の FAQ セクションを参照してください。

この手順は、Raspberry Pi 3 Model B Plus Rev 1.3 で、Raspberry Pi Camera V2.1 を使ってテストしました。Raspberry Pi には、イメージ バイナリデータとは 2022-01-28-raspios-bullseye-arhmf-lite.img を使用した Raspberry Pi OS “bullseye” を書き込みました。執筆時点(2022年5月20日)では、サンプルアプリケーションからカメラモジュールにアクセスするためには、raspi-config で Legacy Camera サポートを有効にする必要があります。

  1. 必要な依存関係のインストール
  2. KVS C++ Producer SDK バージョン 3.3.バイナリデータとは 0 のクローン
  3. build ディレクトリの作成
  4. SDK とサンプルアプリケーションのビルド

サンプルアプリケーションの IAM 認証情報の取得

SDK のビルド後、build ディレクトリに kvs_gstreamer_sample というバイナリがあるはずです。 このアプリケーションは、KVS の API にアクセスするために IAM バイナリデータとは 認証情報を必要とします。認証情報の権限は、以下のアクションを許可する必要があります。

権限情報を取得した後、kvs_gstreamer_sample を実行する前に、権限情報をエクスポートする必要があります。 次のセクションに例が示されています。

KVS サービスの設定

画像生成機能を有効にするための KVS サービスの設定は、3 つのステップで行います。

  1. 目的の AWS リージョンに KVS ストリームを作成します。

画像の生成

この時点で、Amazon S3 バケットを作成し、KVS C++ Producer SDK サンプルアプリケーションをコンパイルし、適切な認証情報を取得してお使いの環境にエクスポートし、KVS サービスを設定して画像を生成できるようになりました。

Amazon S3 のコンソールを開くと、目的の S3 バケットに画像が生成されているのが確認できるはずです。

S3 バケットに保存されているイメージのリストを表示する AWS S3 コンソールのスクリーンショット

このブログ記事では、Kinesis Video Streams の画像生成機能を使用して、機械学習に使用できるパイプラインを構築する方法を紹介しました。Amazon S3 が画像を保存しているので、Amazon S3 イベント通知を使用して、独自の ML パイプラインを起動したり、Amazon Rekognition による分析を起動したりすることができます。この新機能をぜひ試してみてください。終了したらリソースを削除することを忘れないでください。Happy building!

DENSO DENSO WAVE

デンソーウェーブ、細長く狭いスペースにも印字できる 長方形型の新しいQRコード「rMQRコード」を開発

デンソーウェーブは、長方形型の新しいQRコード (注1) 「rMQRコード (アール・エム・キューアールコード:長方形マイクロQRコード) 」を開発しました。rMQRコードは、QRコードの特性である優れた読み取り速度とデータ容量を持ちながら、細長く狭いスペースへの印字を実現するもので、製造業をはじめとした幅広い業界において、情報や資源の効率的な管理・運用に貢献します。また、rMQRコードは国際規格(ISO)を取得しており、世界中のすべてのユーザーに自由に安心して使っていただけます。
(規格番号:ISO/IEC バイナリデータとは 23941:2022)

■rMQRコードの開発背景
デンソーウェーブは1994年、QRコードを開発しました。QRコードは優れた読み取り速度とデータ容量を持ち、また、パブリックドメインであることから、世界標準となり幅広い分野で活用されています。次いで小型の「マイクロQRコード (注2) 」を開発するなど、デンソーウェーブは、社会やお客様の課題解決のためにQRコードを進化させてきました。一方、「人」と「モノ」と「情報」をつなぐIoT化が加速する現代において、製造業では、品質管理や業務効率化を促進するため、電子部品をはじめとする超小型部品の個体管理のニーズが高まっています。また、幅広い業界で伝票や帳票における情報管理の動きが進む中、余白のスペースが限られているためコードを印字できないといった課題がありました。さらにデンソーウェーブは、利便性を向上させた新しいQRコードを活用することで、企業や行政から、多様化する個人のニーズに寄り添ったサービスが提供される社会の到来を予測しています。そこで、幅広い業界が持つ「小さなスペースに多くの情報を格納したい」というニーズに応えるべく、rMQRコードを開発しました。

■rMQRコードの特長 バイナリデータとは
(1) 余白になりがちな細長く狭いスペースに大容量データを格納可能なため、
高さ寸法が制限された小さなスペースでの情報管理やモノのデザイン性向上に寄与。
→QRコードの技術を展開することで、QRコードでは対応できなかった細長く狭いスペースへの印字と、最大で数字で361文字、英数字で219文字、漢字で92文字もの大容量データの格納を両立。

(2)QRコードと同様の高速読み取りが可能。
→QRコード同様の構成パターンを配置することで、高速読み取りを実現。

(3)国際規格を取得しているため、誰でも安心して使用可能。
→デンソーウェーブが開発したQRコード、マイクロQRコードに続き、国際規格を取得。誰もが自由に安心して使うことができます。
(規格番号:ISO/IEC 23941:2022)

■活用イメージと今後の展望
工場やサプライチェーンにおける部品単 位のトレ ーサビリティや、デザイン性が重視されるブランド品、伝票・帳票での情報管理をはじめとしたDXに関わる新たな幅広い分野に貢献します。デンソーウェーブは、5月から順次、rMQRコードに対応する製品をリリースする予定です。デンソーウェーブはQRコード開発会社として、今後も、QRコードを活用したソリューションや、新型QRコードの開発を通し、社会の皆様の課題解決に貢献します。

エクセルソフトは、エンドツーエンドの DevOps プラットフォームを提供する JFrog 社の製品を販売開始しました。

エクセルソフト株式会社 (東京都港区) は、バイナリのリポジトリを管理し、水が流れるようにソフトウェアをシームレスにアップデートする Liquid Software ビジョンを掲げ、エンドツーエンドの DevOps プラットフォームを提供する JFrog 社の製品 JFrog Platform を 2022年 5月 30日より日本国内で販売開始します。エクセルソフトは JFrog 社と協力し、日本国内での JFrog 製品の販売とサポート サービスの拡張を図ってまいります。


「JFrog は、常に時代のニーズに応えるべく新しい製品をソフトウェア開発者に提供するエクセルソフトとのパートナーシップにより、日本市場における DevSecOps 採用の加速を支援できることを大変嬉しく思います。エクセルソフトの付加価値を提供するサービスと JFrog の受賞歴のある DevOps プラットフォームの組み合わせによって、ソフトウェア開発者の DX (デジタル トランスフォーメンション) 推進に貢献できることを楽しみにしています。」
JFrog 社 APAC 営業、地域担当副社長 Doron Ben Sira 氏からのコメント

■ 製品名: JFrog Platform は以下の製品で構成されています:
JFrog Artifactory、JFrog Xray、JFrog Pipeline、
JFrog Distribution、JFrog Container Registry、JFrog Connect

■ 製品カテゴリ:
DevOps プラットフォーム

■ 製品概要:
JFrog Platform では、業界初のハイブリット、エンドツーエンド、ユニバーサル DevOps プラットフォームを使用して、ソース管理から配布までのソフトウェア開発ワークフローを管理します。

また、ソフトウェアの開発、配布に対する企業のニーズに対応するよう設計されており、DevOps チームにソフトウェアの作成、管理、配布を容易にするために必要なツールを提供します。これらのツールには CI/CD ツール、バイナリ管理、成果物の達成度、セキュリティと脆弱性保護、リソース管理、分析、配布に至るまで、すべてをカバーします。

さらに、JFrog Platform では Docker や Python、NuGet、Conda などのテクノロジとの統合が可能です。これを使用すれば、生産性を向上させ、管理に必要な労力を削減し、さまざまなパーツの自動統合を促進できます。

世界初のユニバーサル リポジトリとして JFrog Artifactory は JFrog Platform のミッション クリティカルな中心部であり、開発サイクルを通してバイナリを保存、管理し、複製機能により、すべてのチームが同様のコンポーネントを使用できるようにします。

JFrog Xray はすべてのコンポーネント、ビルド、依存関係をより深くスキャンして脆弱性や、ライセンス違反を調べ、さまざまなパラメータに基づいたポリシー アラートを提供します。

  • 完全に自動化された DevOps プラットフォームでコード作成から本番環境に至るまで信頼性の高いソフトウェア リリースを提供します。
  • ユーザー、リソース、アクセス権を備えた DevOps プロジェクトにオンボードし、デプロイの頻度を向上します。
  • オープンソースの脆弱性とライセンス コンプライアンス違反を事前に検出することができます。
  • エンタープライズに合わせた高可用性とアクティブ/アクティブ クラスタリングにより、DevOps パイプライン全体のダウンタイムをゼロにします。
  • バイナリデータとは
  • 即時利用可能なネイティブとエコシステムとのインテグレーションにより、お使いの DevOps 環境をコントロールします。
  • 成長に合わせて拡張する、オンプレミス、クラウド、マルチクラウド、ハイブリッドのいずれのデプロイも選択できるエンタープライズ対応します。

■ エクセルソフト株式会社について
エクセルソフト株式会社(東京都港区 代表取締役 神田聡 TEL 03-5440-7875)は、グローバル ソフトウェア ディストリビューターとして、ソフトウェア開発ツールを中心に世界中の優れたソフトウェアを日本、アジアを含むグローバルに販売しています。

コンパイラー、テスト自動化、Office バイナリデータとは ファイル互換 API ライブラリー、PDF 帳票、API プラットフォーム、デバイスドライバー開発、アプリケーション開発コンポーネント、モバイルアプリ開発、ヘルプ作成、セキュリティ バイナリデータとは バイナリデータとは ソフトウェア、ネットワーク監視、DevOps、クラウド サービスなど、IT 環境を支える時代のニーズに応じたソフトウェア製品とサービスを提供しています。ソフトウェアの日本語および他言語へのローカライズ業務も承っています。

1. この記事は?

そのため、機械学習のために大量の画像データが必要になってきます。TURINGでは2022年に500時間、2023年に50,000時間の公道上の走行データをカメラによって収集する計画を立てています。50,000時間、というとピンと来ないかと思いますが、仮に平均時速25kmだとすると、合計で125万kmになります。これは日本の道路総延長(=128万km) に匹敵する距離です。(もちろん、日本の全ての道路を走行するわけではなく、都市部を中心に同じ道をさまざまな角度・条件で撮影していくことになります。)

重要なことは、データが大量の動画という形で取得されるという点です。動画はエンコードされて圧縮されている状態でも~1GB/時間、複数カメラで機械学習用のテンソルに成形すると数十GB/時間程度にもなります。そのため、50,000時間の走行でおよそ1ペタバイト程度のデータとなります。

TURINGはこのような大規模な機械学習に向け、ストレージシステムの検討やI/Oパフォーマンスの測定、そして100基単位でのGPUによる並列分散学習のための技術検証を進めています。この記事では、開発段階の小規模なデータセットからペタバイトスケールの機械学習まで対応できるデータローダーの仕組みの一例として、PyTorchで学習するケースを紹介していきたいと思います。

2. 学習データをロードする5つのシナリオ

(1) オンメモリ
(2) ローカルディスク
(3) Web/ファイルサーバー
(4) クラウドストレージ
(5) 高速分散ストレージシステム

全てのデータがメモリ上に収まるサイズのデータセットであれば、多くのケースで特別なデータハンドリングは必要ありません。一度データを読み出せば高速で処理が可能です。一方、画像分類等の大きな訓練用データセットは、しばしばメモリサイズを超過します。そのようなケースでは、ディスク上に配置されたファイルを逐次読み込む必要があります。

インターネット上に公開されているデータセットは、前もって全てダウンロードすればローカルディスクと同様に扱えますが、ネットワーク帯域によっては多くの時間が要求されます

また、Amazon S3など、クラウドストレージ上に保存されているデータを読み出す場合、ファイルシステムとしてマウントしたり、公式のS3 IO datapipesを使ってデータパイプラインを作成します。さらに大規模な環境では、LustreやGPFSなど高速な並列分散ファイルシステムが採用されることがありますが、このような場合でもやはりネットワーク帯域やファイルシステムのパフォーマンスに影響を受けます。

小さなデータセットで開発/テストをしてから、大きなデータセットにスケールアップさせていく場合、ストレージシステムを変更する状況がしばしば生じます。学習データのスケールにあわせ、システムごとにデータローダーの実装やパフォーマンスチューニングをするのは大変にコストがかかります。そのため、ファイル形式やロードのためのコードをできるだけ変更せずに対応したいわけですが、どうしたらよいでしょうか?

3. WebDatasetとは

PyTorchに対するWebDatasetライブラリは、このようなデータ読み込みの問題を解決し、(1)~(5)までの全てのシナリオに対してペタスケールまでの統一的で効率のよいアクセスを提供してくれます。

WebDataset is an ideal solution for training on petascale datasets kept on high performance distributed data stores like AIStore, AWS/S3, and Google Cloud.

WebDataset also is very useful for such smaller datasets, and it can easily be バイナリデータとは used for developing and testing on small datasets and then scaling up to large datasets by simply using more shards.

同様のライブラリとしてTensorFlowのTFRecordがありますが、WebDatasetではPOSIX バイナリデータとは tarによるファイルベースを採用しており、シリアライズされた形式に変換する必要がないという特徴があります。

4. 基本的な使い方

4-1. インストール

4-2. データセット

Publaynetのサンプル画像


Publaynetの画像データ

まずデータセットの一部として、290MB程度のシャードファイルを適当な場所(ここでは /tmp )にダウンロードしておきます。

実態は普通のtarファイルで、中身は画像ファイル(png)メタデータ(json) のセットが985組アーカイブされています。

4-3. ローカルディスクからの読み出し

webdataset.WebDataset はPyTorch標準の IterableDataset と同じインターフェースが実装されています。IterableDatasetなのでイテレータでデータを取り出すことができます。

データセットの前処理として、サンプリングされたデータに対し、任意の関数を map() を使うことで適用できます。ここではjsonから category_id をラベルとして設定しておきます。

さらにデータ拡張として、画像データから、さらにランダムに256x256のイメージサイズに切り出す処理を入れてみます。 compose() と任意のジェネレータを用いることで、データセット全体に処理することができます。

データセットの準備としてはこれで終わりです。
最後にPyTorch標準の DataLoader に渡して完了です。

また、複数のファイルを読み出すには最初のURLを publaynet_.tar のように指定するだけでOKです。

4-4. Webサーバ

先ほどはtarファイルをローカルにダウンロードしてデータセットとしました。WebDatasetではWebサーバのURLを直接設定することが可能です。 url を http://storage.googleapis.com/nvdata-publaynet/publaynet-train-.tar に設定します。

ローカルストレージの場合とURLを変えるだけで、他のコードを変更することなくWebサーバから連続的に訓練用のバッチを取得することができます。WebDatasetでは任意の前処理やデータ拡張を定義してデータパイプラインとしてストリーミングできるため、学習前に個別にファイルをダウンロードする必要はありません。

4-5. Amazon S3

SageMakerパイプモードはAmazon SageMakerが提供するS3に保存されているデータをやり取りするための専用APIです。パイプモードを使用すると、データは専用のLinux FIFOパイプを介して高速にストリーミングされます。データバイナリを解析する必要があるため、ここでは前の二つの方法を見ていきたいと思います。

オブジェクトのストリーム [1]

さらにこれを WebDataset.tariterators.url_opener にオーバーライドすることで webdataset.WebDataset でS3のURLを直接取り込むことが可能になります。

ファイルシステムのマウント

Amazon S3はS3FsgoofysなどFUSEベースのライブラリでマウントすることができます。またここでは扱いませんが、WebDataset以外でも、公式のS3 Pytorchプラグインをを使用することで、 IterableDataset バイナリデータとは のようにS3からデータをストリームすることが可能です。

4-6. データセットの作成

WebDatasetで扱うのは単なるtarファイルなので、通常はtarコマンドを使用するだけで作成可能です

またはGoで実装されたtarpをインストールし、 tarp create コマンドでファイルからtarアーカイブファイルを生成するのが特に簡単になります。

また、既存のデータセットに対して、 webdataset.TarWriter を用いることでPython上で作成することも可能です。また、自分でデコーダーを定義することで任意のファイル形式にも対応させることができます。

5. パフォーマンス

ローカルディスクで展開済のデータではPyTorch標準のDatasetが上回っていますが、Webサーバー・Aamzon S3からストリーミングする場合ではファイルを直接ダウンロードするのと同等の時間で(つまり学習中にネットワーク帯域をフルに使って)データセットをロードすることができるという結果になりました。シンプルな実装でさまざまなデータローディングに対応できる、スケールアウトも容易な点は大きなメリットかと思います。

6. おわりに、そして超大規模学習に向けて

今回はペタバイトスケールの機械学習にも対応可能なデータローダーの検証としてWebDatasetの使い方やパフォーマンスを紹介しました。あくまで機械学習の実装視点からのものですので、実際の大規模学習ではストレージシステムネットワーク、並列分散で計算させるGPUクラスタなど、さまざまな要素が必要になってきます。

- 真に大規模な深層学習モデルの設計・実験・評価
- ペタバイトスケールのデータストレージシステム/クラウドインフラ構築・管理
- 走行データ収集のためのiOS/Androidアプリ開発・運用

詳しくはTURINGの採用ページをご覧ください。一緒に完全な車をつくりませんか? ご不明な点があればTURING MLチーム 担当者 (Yu Yamaguchi)までお気軽にDMしてください。

二分探索木(BST)

ルートよりも1つの値が小さい右のサブツリーを持つツリーは、有効な二分探索木ではないことを示すために示されています。

4が見つからないので、8の左側のサブツリーをトラバースします。 4が見つからないので、3の右側のサブツリーをトラバースします 4が見つからないので、6の左側のサブツリーをトラバースします 4が見つかりました

お気づきかもしれませんが、return search(struct node *)を4回呼び出しました。 新しいノードまたはNULLのいずれかを返すと、search(root)が最終結果を返すまで、値が何度も返されます。

値がいずれかのサブツリーで見つかった場合は、値が上に伝搬されて最終的に返されます。それ以外の場合はnullが返されます。

値がいずれかのサブツリーで見つかった場合は、値が上に伝搬されて最終的に返されます。それ以外の場合はnullが返されます。

Algorithm:

4

4> 3なので、8の右の子を横切る
4

ノードをアタッチしましたが、ツリーの残りの部分に損傷を与えることなく、関数を終了する必要があります。 これは、 return node; 最後に重宝します。 の場合 NULL、新しく作成されたノードが返され、親ノードに接続されます。それ以外の場合は、ルートに戻るまで上に移動しても、同じノードが変更なしで返されます。

上向きの再帰ステップ中に要素が位置を失わないように、最後にルート要素を返すことの重要性を示す画像。

上向きの再帰ステップ中に要素が位置を失わないように、最後にルート要素を返すことの重要性を示す画像。

関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる