投稿

2021の投稿を表示しています

[NVIDIA TAO] 画像分類モデル作成 - 環境構築編 [1/5]

はじめに NVIDIA TAO(Train, Adapt, and Optimize(旧名 NVIDIA TLT))とはNVIDIAが提供する様々な事前訓練済みのモデルを使用して転移学習を行うことで、ユーザのニーズに合わせたAIモデルを構築する為のツールです。 事前訓練済みモデルには 物体検出(Object Detection) 画像分類(Image Classification) 意図解釈(NLU) 視線推定 テキスト認識 を含めて他大多数の種類が提供されており、 それぞれのモデルをそのまま使うことも出来ますし、ユースケースに合わせて自由に訓練を行い、モデルをカスタマイズすることが出来ます。 今回はその中でも 画像分類(Image Classification) のモデルを使って、訓練や推論に挑戦してみるのを全5つの記事に分けて書いていこうと思います。 目的 自分のライブで撮影された大量の写真をパート毎に分類したい。 AIを使って自動で分類したい。 ローカルで完結したい。(大量の画像が存在して、クラウドにアップロードなんてしてられない) NVIDIAが好きなのでNVIDIA TAO(Train, Adapt, and Optimize)で画像分類モデル(Image Classification)を使ってみたい。 進捗 環境構築 ← 現在地 事前訓練モデルをダウンロード 訓練データの作成 モデルの訓練 推論 ハードウェア要件 ハードウェア 推奨 メモリ 32GB CPU 8コア GPU NVIDIA A100, NVIDIA V100, NVIDIA RTX 30X0 ストレージ 100GB ソフトウェア要件 ソフトウェア バージョン Ubuntu 18.04 LTS docker-ce >19.03.5 docker-API 1.40 nvidia-driver >455 筆者の環境 NVIDIA TAOはUbuntu +...

AWS SageMaker Studio Lab 登場

2021年12月1日、AWSが機械学習の訓練やデプロイを支援するサービス「Amazon SageMaker」の無料版「 SageMaker Studio Lab 」をパブリックプレビュー版として公開したました。             SageMaker Studio Labとは? 位置付けとしては初心者向けに機能を制限したSageMakerといったところでしょうか。 機械学習を勉強している人には馴染み深い、「JupyterLab」をベースにしたブラウザで完結するサービスのようです。 料金は 無料 で、プロジェクトによって「CPU」か「GPU」のインスタンスを選択出来ます。 選択したインスタンスは1ユーザセッションあたり CPUの場合:12時間 GPUの場合:4時間 の時間制限がありますが、ユーザセッション数の制限はないそうです。 また、プロジェクト毎に15GBのストレージが付与されるそうで、ユーザセッション終了時にプロジェクトのスナップショットが作成され、続きから作業ができます。 始め方 AWSの契約は不要 でSageMaker Studio Lab用のアカウントを 公式ページ から新規作成します。 無料なので、当然クレジットカードの情報も不要でメールアドレスと名前、会社名だけでOKです。 「Request Free Account」のボタンをポチるとアカウント作成のリクエストが飛び、承認されるまで待ちます。 インスタンスタイプについて 「変更されることがある」と記載されていますが、2021年12月1日現在、下記のインスタンスが使用されます。インスタンスタイプが固定なのでGoogle ColabのようにGPUガチャがないのはいいですね! CPU/GPU インスタンスタイプ プロセッサ CPU T3.xlarge Intel Xeon GPU G4dn.xlarge NVIDIA T4 Tensor Core 終わりに 機械学習に興味はあるけど、環境を揃えられない。という人は結構いそうですから、制限付きとはい...

[NVIDIA Omniverse Create] ダウンロード&インストール方法

またまたNVIDIAが面白そうなアプリを公開してくれました。 その名も NVIDIA Omniverse Create!!           NVIDIA Omniverse Createは、高度なシーン構築を高速化するアプリで、Pixar USDでシーンの組み立て、照明を当て、シミュレーション操作、レンダリングをインタラクティブにリアルタイムで行えるとのこと。 ようは「質の高い3Dシーンを手早く構築できるよ!!」ってアプリです。 特に「照明を当て、シミュレーション操作」の部分。リアルタイム・レイトレーシングといえばNVIDIAの超得意分野ですからね。光と影の美しいシーンが作成できるのを期待しています。 これは昨今のメタバース需要の中で活躍出来るツールかもしれません。 実際どんなものが作れるの? NVIDIA Omniverse Createを起動すると5つのサンプルシーンがあります。 その内の1つ「Flight」を見てみましょう。 綺麗だなぁ。このレベルのものを作ってみたい。 サンプルシーンの他にもハイクオリティなアセットがデフォルトで入ってるので、3Dモデルを作成できなくても元から入ってる素材を並べるだけでそれなりのものが作れそうです!! ちなみに下記URLで様々なクリエータの作品が公開されています。(美しい...) https://www.nvidia.com/ja-jp/omniverse/gallery-submissions/ システム要件 NVIDIA提供ツール全般に言えることなのですが、要件が結構厳しいのですよね。 ストレージ空き容量が500GB以上必要というアホみたいにストレージを使うらしいので、普段使いのPCでは不足しそうです。 一瞬、500 MB だと思いましたが、見間違いではなく500 GB です。 GPUはRTX2080以上を推奨していますが、RTX2070 SuperやRTX3070 Laptopでも動きました。 レンダリングの時に多少動きがカクカクになりますが、それほど問題はなかったです。 要素 最小構成 OSサポート Windows 10 64 ビット(バージョン 1903 以降) CPU In...

[Python] motoでLambdaやDynamoDBをモックしてunittestを実行

目的 Pythonで書いたLambdaのAPIを標準ライブラリのunittestを使ってテスト。 motoを使ってLambdaとDynamoDBをモックすることで、AWSに接続せずにunittestを動かす。   motoとは? LambdaやDynamoDBに限らず、S3など様々なAWSサービスをモック出来る優れものです。 ただし、全てのAWSサービスに対応しているわけではないで、 motoのドキュメント から対応サービスを確認してください。 ディレクトリ階層 root ├ apis │ └ handler.py ← Lambdaのソースコード └ test └ test_handler.py ← handler.pyに対するテストコード ライブラリのインストール $ pip install boto3 $ pip install docker $ pip install moto 各バージョン Python 3.8.5 boto3 1.20.7 docker 5.0.3 moto 2.2.15 Lambdaの実装(handler.py) リクエストパラメータのnameをDynamoDBのtest-tableという名前のテーブルに登録するだけのAPI。 import boto3 import json import uuid from http import HTTPStatus DYNAMO_DB = boto3.resource('dynamodb', region_name='ap-northeast-1') TEST_TABLE = DYNAMO_DB.Table('test-table') def handler(event, context): # リクエストパラメータ取得 body = json.loads(event.get('body') or '{}') # DynamoDBに登録 item = { 'id': str(uuid.uuid4()), 'name': body.get('name') } TES...

ゲーミングノートPC「ASUS Zephyrus G15(RTX3070 Laptop)」でマイニングしてみた

  前回レビューしたゲーミングノートPC「ASUS Zephyrus G15」 に搭載されているRTX3070 Laptopを使ってマイニングしてみようと思います。 我が家では今までデスクトップ用のRTX2070 Superだけでマイニングしてましたが、これからはRTX3070 Laptopと合わせて2台でマイニングすることになります。 正直ノートPC用のGPUだし期待度は低です。ハッシュレートは 20MH/s くらい出てくれれば御の字かなと思ってます。 が、 予想外の結果になりました! ※記事の最後に1カ月続けた結果を載せてます。 マイニングツールをセットアップ 簡単お手軽、NiceHashのQuickMinerを使います。 セットアップ方法は こちらの記事 が非常に参考になりました。 NiceHashやコインチェックのアカウントは元々持っていたので、セットアップは5分程度で済みました。 注意! 2022年09月16日追記 この記事はイーサリアムがPoS移行する前に書いた記事です。 2022年09月15日からイーサリアムのマイニングは出来ないので、ここから先の内容は当てになりません。 とはいえ、2022年09月16日現在はイーサリアム・クラシックのマイニングは出来るようなので、 こちらの記事 を参考にしてください。 マイニング開始 あれ?RTX3070 Laptopのオーバークロックの最適化ボタンが出てこないな? Laptopでマイニングなんて推奨されてないから使えないのかな? 少し面倒ですが、自分で調教しますか。 取り敢えずデフォルト設定のままマイニング開始。   さてさて、ハッシュレートは。。。ん? 46.74MH/s ? ちょっと混乱中。RTX3070ってマイニング制限かかってて、デスクトップ用でも 30MH/s くらいしか出ないんじゃなかったっけ? って思って調べてみたら確かにデスクトップ用のRTX3070はマイニング制限がかけられてるけど、ノートPC用にはそんな情報なし。 これは嬉しい誤算ですな。 ノートPC用GPUのクセにデスクトップ用GPUのRTX2070 Superの 42.71MH/s 以上のハッシュレートを叩き出してくれて、且つ消費電力も低いとは。しかも調教が済んでない状態なのに。 マイニング収益 1日マイニングを続けてみ...

ゲーミングノートPC「ASUS Zephyrus G15」レビュー

衝動買いしてしまったASUS  Zephyrus G15! 11月に入って仙台は結構肌寒くなってきました。 我が家ではもうコタツを出して、そこから抜け出せない状況が続いてます。 それでコタツに入りながら使えるノートPCを求めて、ついポチってしまいました。       用途 コタツに入りながら使ったり、エアロバイクを漕ぎながら動画鑑賞。 ブログ記事作成。 アプリの個人開発。 機械学習の訓練モデル作成。 オフラインゲーム。 PCを使ってない時間はマイニングで少しでもPC代を回収。 特に下3つのためにそこそこ高性能なGPU搭載のノートPCが必要でした。 GPUはゲーム用途ではCUDAコア、機械学習用途ではTensorコアが欲しいのですが、RTXシリーズは両方搭載しているんですよね。 でもRTX3070にはマイニング制限がかかってる点はイマイチ 。 Zephyrus G15の構成 ディスプレイ:15.6インチTFTカラー液晶/ノングレア/2,560×1,440@165Hz CPU:AMD Ryzen 9 5900HS(8コア16スレッド 3.0GHz) GPU:RTX3070 Laptop CUDAコア:5,120コア Tensorコア:160コア RTコア:40コア メモリ:16GB SSD:1TB 重量:1.99kg 目を見張るべきは搭載GPUですね。 我が家のメインPC(デスクトップ)に搭載しているRTX2070SuperのCUDAコア数が2,560コアなので単純に2倍!! もちろんコア数が全てではないですし、所詮ノートPCなので数値程の性能は期待してませんが、私の用途としては十分です。(元々はRTX3050tiを買おうをしてましたし。) あとAMDのCPUにNVIDIAのGPUってどうなの?って気持ちはありますが、これはしばらく使ってみて判断になるでしょう。 金額 こんな構成のPCですが、お値段なんとAmazon通常価格249,800円のところ、セール特価5万円OFFで 199,800円 ! RTX3070搭載ノートPCが20万円以下だと。。。? 他ノートPCで20万だとRTX3050Tiのモデルばかりで、RTX3070クラスだと30万近いのが殆どなのに、と思ってたらいつの間にか決済ページに飛んでました。 開封   ...

Serverless FrameworkでS3にデプロイしたWEBアプリに独自ドメインを設定

前回の記事 Serverless Frameworkを使ってAWS S3にAngularアプリを自動デプロイする 今回やりたいこと 前回と同じくServerless Frameworkを使ってAWS S3にAngularアプリをデプロイする。 デプロイしたAngularアプリに独自ドメインを使用してアクセスできるようにする。   前提 前回の記事 の内容を把握済み。 AWS ACMで証明書を発行済み。 AWS Route53で独自ドメインを取得済み。 システム構成 serverless.ymlを修正 前回の記事で作成したserverless.ymlを修正します。 service: angular-test-app frameworkVersion: '2' plugins: - serverless-single-page-app-plugin - serverless-cloudfront-invalidate provider: name: aws stage: ${env:STAGE} region: ap-northeast-1 stackName: ${self:service}-${self:provider.stage} environment: stage: ${self:provider.stage} custom: # ↓ここを追加↓ domainName: Route53で取得した独自ドメイン hostedZoneId: Route53で取得した独自ドメインのホストゾーンID acmCertificateArn: ACMで発行した証明書のARN # ↑ここを追加↑ s3Bucket: ${self:service}-deploy-${self:provider.stage} s3LocalPath: dist/ cloudfrontInvalidate: - distributionIdKey: CDNDistributionId autoInvalidate: true items: - '/*' resources: Resources: WebAppS3Bucket:...

Serverless FrameworkでAngularアプリをAWS S3にデプロイ

やりたいこと AWS S3にAngularアプリを静的WEBホスティングする。 CloudFrontでHTTPS通信&高速化する。 開発環境やステージング環境など、複数の環境へのデプロイを簡単に切り替えたい。 上記作業をServerless Frameworkを使って自動化する。 独自ドメインは......設定出来るけど、今回は除外。 → 別記事 にしました。 前提 AWSアカウントを持っている。 デプロイに必要な権限を持ったAWS IAMユーザのアクセスキー・シークレットアクセスキーを持っている。 Angularアプリを作成済。(Angularである必要性はないです)   システム構成   Serverless Frameworkをインストール $ npm install serverless $ npm install serverless-single-page-app-plugin $ npm install serverless-cloudfront-invalidate Serverless Frameworkのバージョン この記事で使用しているServerless Frameworkのバージョンです。 serverless:2.52.0 serverless-cloudfront-invalidate:1.9.0 serverless-single-page-app-plugin:1.0.2 serverless.ymlを作成 下記内容の serverless.yml を作成してプロジェクトのルートディレクトリに配置します。 service: angular-test-app frameworkVersion: '2' plugins: - serverless-single-page-app-plugin - serverless-cloudfront-invalidate provider: name: aws stage: ${env:STAGE} region: ap-northeast-1 stackName: ${self:service}-${self:provider.stage} environment: stage: ${self:provider.stage} ...

エアラ(eA-R)でWF-1000XM4をカスタムIEM化

はじめに コロナの影響で対面ではなく、Web会議システムを使っての打ち合わせが増えましたよね。 それに伴って業務中であってもイヤホンを長時間つける機会も増えてきました。 そんな中、自分の耳に合わないイヤーピースをずっと付けてると非常にストレスを感じます。 そして自分に合うイヤーピースを探すのも一苦労です。 そんな悩みを解決してくれるのがこのエアラ(eA-R)です。   今回は完全ワイヤレスイヤホン(Sony WF-1000XM4)に eA-R を装着して完全ワイヤレスのカスタムIEM化してみようと思います。 エアラ(eA-R)とは 自分のインプレッション(耳型)からオーダーメイドでイヤーピースを作成するハードタイプのアクリル製カスタムイヤーピースです。 eA-R は自分の耳の型からイヤーピースを作成するため、完璧なフィット感が得られます。 オーダー&対応機種は こちら 。 メリット 自分の耳の形に合わせてイヤーピースを作れるので、完璧なフィット感と高い遮音性が得られる。 遮音性が高いので、ノイズキャンセルが不要になる。 ⇢ 耳には完全フィットしてるのに以外と外から音が入ってきたり、音漏れする。  ※ Ultimate Earsのイヤモニだとそんなことないからエアラ(eA-R)固有の問題か、WF-1000XM4との組み合わせの問題か... イヤーピースと耳の間に隙間が出来ないので、音が逃げていかない。 →そのため細かい音がより鮮明に聴こえるようになる。 耳に完全フィットするので、少し引っ張った程度ではイヤホンが外れない。 →不意に耳から外れて落とすことがない。   デメリット 高い。 eA-Rを装着するイヤホンによって金額が違うのですが、最低金額は17,600円〜でWF-1000XM4の場合は22,000円〜になります。 これに加え、インプレッション採取の費用も別途かかります。 未知の装着感のため、人によっては慣れるまでに時間がかかる。 WF-1000XM4の場合、eA-Rをつけたままだとケースに入らないため、充電の度にeA-Rを外す必要がある。しかも着脱が結構キツく、慣れないと難しい。 WF-1000XM4の場合、eA-Rが大きくてWF-1000XM4の近接センサーが上手く反応しない場合がある。その為、 外音取り込み機能やノイズキャンセリング機能...

GAS(Google Apps Script)で言語判別機能付き翻訳APIを作成

目的 翻訳APIを使いたいなぁ。でもお金かけたくないなぁ。という ケチな あなた。 GAS(Google Apps Script)の LanguageApp には翻訳機能が備わっていて無料で利用できます。 今回は LanguageApp を使って無料で使える翻訳APIを作成してみます。 機能 パラメータで渡した値を翻訳する。 言語を自動で判別して、日本語以外なら日本語に翻訳する。 パラメータで渡した値が日本語なら英語に翻訳する。 全体のコード function doGet(event) { let params = event.parameter; let text = params.text; let transText = LanguageApp.translate(text, '', 'ja'); if (text == transText) { transText = LanguageApp.translate(text, '', 'en'); } let response = ContentService.createTextOutput(); response.setMimeType(ContentService.MimeType.JSON); return response.setContent(JSON.stringify({ "code": 200, "text": transText })); } 解説 API実行時のクエリパラメータを受け取ります。 let params = event.parameter; let text = params.text; LanguageApp.translate() で翻訳します。 第2引数には翻訳元の言語、第3引数には翻訳先の言語を指定して、第2引数が空だと言語を自動判別してくれます。 この例の場合、自動判別した言語を日本語に翻訳します。 let transText = LanguageApp.translate(text, '', 'ja'); 翻訳前後が同じ=翻訳元が日本語とい...

Demucsを使って音源分離にチャレンジ

Demucsとは? Facebook Research が開発した音源分離用のAIシステムです。 Demucs は、人による評価を基準とした分離後の音楽の品質において、これまでに報告されている音源分離のシステムよりも上回っているといいます。 しかも GitHub に無料で公開されているようです。 以前、 librosaを使った音源分離 の記事を書いた身としては試さないわけにはいきません。 環境構築 今回は 公式 を参考にして Windows10 に環境構築します。   Anaconda をインストール Windows の場合は Anaconda コンソールから実行する必要があるので、まず こちら から Anaconda のインストーラをダウンロードして PC にインストールします。 ソースコードをダウンロード GitHub から Demucs のソースコードをダウンロードします。 GitHubに馴染みのない方には分かりにくいですが、緑色の「Code」をクリックすると 「Download ZIP」という項目が表示されます。 ダウンロードが完了したら zip を解答して好きなフォルダに配置してください。 私は 「c:/demucs」に配置しました。 音源分離を実行 音源分離は Anaconda コンソール から CUI で操作しますが、基本コピペで問題ないと思います。  Anaconda Prompt を起動 Windows のスタートメニューから Anaconda Prompt を起動します。 ↓のような真っ黒い画面が出てくればOKです。       作業フォルダに移動 下記のコマンドを入力して、作業フォルダに移動します。 cd c:\demucs 設定ファイルを読み込む 使っている PC に GPU を積んでるかどうかでコマンドが違うので注意してください。 [GPU を積んでる場合] conda env update -f environment-cuda.yml conda activate demucs [GPU を積んでいない場合] conda env update -f environment-cpu.yml conda activate demucs 音源分離実行 python.e...

Pythonのrandom.shuffle()を使ってリストをランダムに並び替える

はじめに Python の random.shuffle() は list の内容をランダムに並び替えてくれる関数です。 この関数を使って、複数ある作業を各担当者にランダムに振り分けるスクリプトを作ってみました。(誰がどの作業を担当しても大丈夫という条件付きですが。) やること 作業一覧をファイルに羅列する。(1行につき1作業) Pythonで作業一覧をランダムに並び替える。 ランダムに並び替えた作業一覧を1つずつ担当者に割り振る。(トランプをシャッフルしてみんなに配るイメージ) 作成物 [tasks.txt] タスク1 タスク2 タスク3 タスク4 タスク5 タスク6 タスク7 タスク8 タスク9 [random_task.py] import random # 作業メンバー members = [ 'メンバー1', 'メンバー2', 'メンバー3' ] # 作業タスクを読み込む with open('./tasks.txt', mode='r', encoding='utf-8') as f: # list()やreadlines()で読み込むと改行コードが含まれるのでsplitlines()を使う tasks = f.read().splitlines() # 空のタスクを除去 tasks = list(filter(None, tasks)) # tasks.txtの順に並んでいる作業タスクをランダムに並び替える random.shuffle(tasks) # ランダムに並び替えたタスクをメンバーに振り分ける assign = list(range(len(members))) for i in range(len(members)): assign[i] = [] for i, task in enumerate(tasks): assign[i % len(members)].append(task) # メンバー毎のタスクを表示 for i in range(len(members)): assign[i].sort() print(f'{members[...

[NVIDIA Maxine] Audio Effects SDKをインストール&サンプルアプリ実行

はじめに 今年の4月に発表されたソフトバンクが実施した 5G + MEC の実証実験。 https://robotstart.info/2021/04/15/softbank-nvidia-maxine-mec.html ここで使われている技術の NVIDIA Maxine が気になったので使ってみようと思います。 NVIDIA Maxineとは 公式より抜粋。 NVIDIA Maxine™ is a GPU-accelerated SDK with state-of-the-art AI features for developers to build virtual collaboration and content creation applications such as video conferencing and live streaming. Maxine’s AI SDKs—Video Effects, Audio Effects, and Augmented Reality (AR)—are highly optimized and include modular features that can be chained into end-to-end pipelines to deliver the highest performance possible on GPUs, both on PCs and in data centers. Maxine can also be used with NVIDIA Riva, an SDK for building conversational AI applications, to offer world-class language-based capabilities such as transcription and translation. Developers can add Maxine AI effects into their existing applications or develop new pipelines from scratch using NVIDIA DeepStream, an SDK for building intelligent video analyt...

Python + CoeFont CLOUDでリアルな音声合成を体験

CoeFont CLOUD を使おうと思った経緯 チャットボットとかアプリの音声ガイドとか作る時に、音声合成サービスを使うことってありますよね。 私はそういう時はWebアプリならブラウザ標準のもの、スマホアプリなら OS 標準のものを使うのですが、どうにも機械っぽい声が好きになれませんでした。 CoeFont CLOUD はそんな不満を払拭してくれる流暢な日本語を話してくれるAI音声合成サービスです。 ちなみに無料の CoeFont STUDIO もありますが、こちらは API が公開されてません。 CoeFont CLOUD の凄いところ 自然な日本語。声の種類によってクオリティの差はあるものの、基本的にクオリティは高く、人の温かさを感じられる音声合成です。 声の種類が豊富。というのも、 CoeFont CLOUD は自分の声を収録して音声合成として使うことが出来、さらにそれを公開して収益化も出来ます。 その為、色んな人の声が音声合成として登録されているわけです。 利用プランと料金 月ごとにポイントが付与されて、音声合成を使用する度にポイントが消費されるようです。 声の種類によりますが1文字5ポイント~100ポイントくらい消費され、無料のものもありました。 利用登録 CoeFont CLOUD を開いてアカウント登録します。 登録にはクレジットカードの情報が必要です。 アカウント情報を入力します。 FireFoxでは↓の登録画面が表示されずに登録出来ませんでしたが、Chromeではうまくいきました。 Access key と Client Secret を生成する 画面右上のアカウント設定を開き、左メニューのAPI情報からAccess key と Client Secret を生成します。         使用する CoeFont の ID を検索する CoeFont CLOUD のWEBページから使いたい CoeFont を検索します。 使いたい CoeFont の画面URLの最後の UUID が CoeFont を使う為に必要な ID です。 今回は公式のアベルーニ(2b174967-1a8a-42e4-b1ae-5f6548cfa05d)を使ってみます。 Python で CoeFont CLOUD の音声合成を使用...