ichou1のブログ

主に音声認識、時々、データ分析のことを書く

AWSメモ(VPCエンドポイント集約)

VPCエンドポイントの課金は、時間課金と使用量課金の2つになる(=データ転送がなくても課金される)
そして、アベイラビリティゾーンごとに課金される。

Pricing Calculatorより(東京リージョン)

f:id:ichou1:20220123114032p:plain
1時間あたり「0.014 USD」

ということで、VPCエンドポイントを集約してみる。

下記2つのサービスを使用する。

  • VPCピアリング
  • Route53 PrivateHostedZone

環境としては下図のとおり。

f:id:ichou1:20220123123821p:plain

VPCピアリングに関しては、同一AZであればデータ転送が無料になる。

2021 年 5 月 1 日より、VPC ピアリング接続経由で 1 つのアベイラビリティーゾーン (AZ) 内で行われるすべてのデータ転送が無料になります。
VPC ピアリング接続を経由して複数のアベイラビリティーゾーンにまたがって行われるデータ転送に対しては、引き続きリージョン内の標準のデータ転送料金が適用されます。

Amazon VPC が VPC ピアリングの料金変更を発表



Route53 Privateホストゾーンに関しては、VPCエンドポイントごとに作成する。

const zone_ssm = new route53.PrivateHostedZone(this, 'HostedZone_SSM', {
    zoneName: 'ssm.ap-northeast-1.amazonaws.com',
    vpc: vpc_shared,    // VPCendpoint is created in vpc_shared
 });

f:id:ichou1:20220123115610p:plain


ホストゾーンにAレコードを追加する。

const vpce_ssm = new ec2.InterfaceVpcEndpoint(this, 'vpc_endpoint_ssm', {
    vpc: vpc_shared,
    service: ec2.InterfaceVpcEndpointAwsService.SSM,
    ...
});

new route53.ARecord(this, "AliasRecord_ssm", {
    zone: zone_ssm,
    target: route53.RecordTarget.fromAlias(new route53targets.InterfaceVpcEndpointTarget(vpce_ssm)),
});

f:id:ichou1:20220123115302p:plain


EC2インスタンス側から、DNS周りを確認してみる。

C:\Users\Administrator>ipconfig

Windows IP 構成


イーサネット アダプター イーサネット:

   接続固有の DNS サフィックス . . . . .: ap-northeast-1.compute.internal
   リンクローカル IPv6 アドレス. . . . .: fe80::71de:591d:b0f1:81b8%6
   IPv4 アドレス . . . . . . . . . . . .: 192.168.2.122
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.2.1


VPCエンドポイントを名前解決してみる。

.2アドレスによる解決
C:\Users\Administrator>nslookup ssm.ap-northeast-1.amazonaws.com
サーバー:  ip-192-168-2-2.ap-northeast-1.compute.internal
Address:  192.168.2.2

権限のない回答:
名前:    ssm.ap-northeast-1.amazonaws.com
Address:  10.100.0.66
AmazonProviedDNSによる解決
C:\Users\Administrator>nslookup ssm.ap-northeast-1.amazonaws.com 169.254.169.253
サーバー:  UnKnown
Address:  169.254.169.253

権限のない回答:
名前:    ssm.ap-northeast-1.amazonaws.com
Address:  10.100.0.66

AmazonProvidedDNS は Amazon Route 53 Resolver サーバーです。
...
DNS サーバーは、VPC の特定のサブネットまたはアベイラビリティーゾーン内に存在しません。
文字列 AmazonProvidedDNS は、169.254.169.253 (および VPC IPv4 ネットワークの範囲に 2 をプラスした値のリザーブド IP アドレスで) および fd00:ec2::253 で実行する DNS サーバーにマッピングします。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_DHCP_Options.html#AmazonDNS

通信相手の確認。
AmazonProviedDNSは出てこない。

C:\Users\Administrator>arp -a

インターフェイス: 192.168.2.122 --- 0x6
  インターネット アドレス 物理アドレス           種類
  169.254.169.123       06-a2-d7-b5-c1-b3     動的  # NTP Server
  192.168.2.1           06-a2-d7-b5-c1-b3     動的  # Default GW
  192.168.2.2           06-a2-d7-b5-c1-b3     動的  # DNS Server
  192.168.2.255         ff-ff-ff-ff-ff-ff     静的
  224.0.0.22            01-00-5e-00-00-16     静的
  224.0.0.251           01-00-5e-00-00-fb     静的
  224.0.0.252           01-00-5e-00-00-fc     静的
  255.255.255.255       ff-ff-ff-ff-ff-ff     静的

AWSメモ(HTTPS 通信で AWS EC2 へのリモートデスクトップ接続)

「RDP over HTTPS」に関するメモ。

「Systems Manager」を利用することで、パブリックなIPアドレスを持たなくても接続できる。

aws.amazon.com


今回、試したAWS上の環境は下図のとおり。

f:id:ichou1:20211231121659p:plain
エンドポイントに関しては、VPCのAZ数を「2」にしたことで各AZに自動生成された


CDKを使って、CloudFormation スタックとしてAWSにデプロイした。
VPCエンドポイントして、下記を追加。

  • com.amazonaws.[region].ssm
  • com.amazonaws.[region].ssmmessages
  • com.amazonaws.[region].ec2messages
vpc.addInterfaceEndpoint("ssm-endpoint", {
    service: ec2.InterfaceVpcEndpointAwsService.SSM
});                      

vpc.addInterfaceEndpoint("ssm-messages-endpoint", {
    service: ec2.InterfaceVpcEndpointAwsService.SSM_MESSAGES
});                      

vpc.addInterfaceEndpoint("ec2-messages-endpoint", {
    service: ec2.InterfaceVpcEndpointAwsService.EC2_MESSAGES
});                      



EC2に関しては、下記のAMIを使用。

machineImage: ec2.MachineImage.latestWindows(
    ec2.WindowsVersion.WINDOWS_SERVER_2019_JAPANESE_FULL_BASE
),


SecurityGroupは下記のとおり。インバウンドルールでRDP「ポート3389」をオープンにしていない。
f:id:ichou1:20220101083332p:plain

f:id:ichou1:20220101085644p:plain

セッションマネージャ経由での接続はOK
f:id:ichou1:20220101085852p:plain


アクセス元となるクライアント端末で、セッション開始&ポート転送。

% aws ssm start-session --target  i-0355a33eb8da08120 --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389, localPortNumber=13389"
Starting session with SessionId: <IAM Username>-0b524196744cd5ce7
Port 13389 opened for sessionId <IAM Username>-0b524196744cd5ce7.
Waiting for connections...

RDPクライアント(ここでは、「Remmina」を使用)から「localhost:13389」
ドメインは入れなくてよい。
f:id:ichou1:20220101090950p:plain

接続できた。
f:id:ichou1:20220101091927p:plain

AWSメモ(VPC課金)

AWS」を試していて、いつの間にか課金が膨れていたので備忘として。

試したのは、「Transit Gateway」周り。
下図のように、「VPC」と「Direct Connect Gateway」をアタッチ。
f:id:ichou1:20211030112614p:plain

一週間ほど放置した後のBillingが下図(VPCエンドポイントは関係なし)
f:id:ichou1:20211030113550p:plain

このお金で本が買えるなあ。。

「EC2」や「EBS」の課金には気をつけていたけど、ネットワーク周りは気を付けないといけない。
流したトラフィック量でなく、「接続した時間」で課金される。

「Budgets」(予算)を設定してアラートが飛ぶようにしておきましょうという話。
f:id:ichou1:20211030114650p:plain

FinTechを考える(その1)

お金とは何かを考えてみる

まずイメージするのは紙幣やコイン。
それらは、世の中にどれほど回っているのだろうか。

マネタリーベース統計によると、2021年8月末の時点で、市中に出回っているお金(通貨流通高)はおおよそ「122兆円」(紙幣が「117兆円」、貨幣が「5兆円」)

f:id:ichou1:20210926112206p:plain
マネタリーベース : 日本銀行 Bank of Japan

マネタリーベースとは、「日本銀行が供給する通貨」のことです。
具体的には、市中に出回っているお金である流通現金(「日本銀行券発行高」+「貨幣流通高」)と「日銀当座預金」の合計値です。

マネタリーベース=「日本銀行券発行高」+「貨幣流通高」+「日銀当座預金

マネタリーベースの解説 : 日本銀行 Bank of Japan

下図は2010年からの通貨流通高の推移。10年前の2012年はおおよそ「85兆円」で、「40兆円」近く増えたことになる。
f:id:ichou1:20210926112321p:plain

1980年まで遡ってみると、おおよそ「20兆円」だった流通高が40年で6倍になり、「100兆円」ほど増えた計算になる。
f:id:ichou1:20210926112439p:plain

2021年第2四半期の「資金循環(速報)」によると、
https://www.boj.or.jp/statistics/sj/sjexp.pdf

  • 家計の金融資産は「1,992兆円」(うち、「現金・預金」が「1,072兆円」)
  • 企業(民間非金融)の金融資産は「1,226兆円」(うち、「現金・預金」が「316兆円」)

ということになっている。

f:id:ichou1:20210926115333p:plain

「誰が現金を保有しているか」の保有内訳は別の資料をあたる必要がありそうだが、
「預金」は、「現金」の10倍以上、存在しているということになる。

また、「電子マネー」についても少し。
あらかじめ現金をチャージする「プリペイド式」の場合、チャージ等で払われる「現金」については「電子決済等代行業を営む企業」の手持ちになり、ユーザ(チャージした側)もある意味「預金」に変えているといえる。
また、「電子マネー」を支払い方法とする店舗に関しても、「預金」という形で振り込まれる形なので、ここで「現金」が姿を消している。

電子マネー」の普及に伴って「現金の流通高」が減っていきそうなものだが、「現金の流通高」は増え続けている。


"「お金」とは何か?"と考えた時、お札やコインとして存在するもの額よりも、はるかに多くの数値が積み上がっており、数字として存在するものでしかないことを感ずる。

(続く)

音声合成メモ(AutoVC)

「AutoVC」を試してみる。
GitHub - auspicious3000/autovc: AutoVC: Zero-Shot Voice Style Transfer with Only Autoencoder Loss

AUTOVC is a many-to-many non-parallel voice conversion framework.

モチベーション
  • 「SpeechSplit」を試してみようとして、デモの実装で使われていたから

GitHub - auspicious3000/SpeechSplit: Unsupervised Speech Decomposition Via Triple Information Bottleneck

  • Zero-Shotの実力を知りたい(英語のデモはあるが、日本語だとどうか?)


Modelのパラメータは学習済みのものを使う。
アウトプットはMel-Spectrograms

G = model_vc.Generator(32, 256, 512, 32).eval().to(device)
g_checkpoint = torch.load('autovc.ckpt', map_location='cuda:0')
G.load_state_dict(g_checkpoint['model'])

_, x_identic_psnt, _ = G(uttr_org,  # ソース音声(Mel)
                         emb_org,   # 話者Embed (ソース)
                         emb_tgt    # 話者Embed (ターゲット)
                         )

uttr_tgt = x_identic_psnt[0, 0, :-len_pad, :].cpu().numpy()  # 変換音声(Mel)

これをVocoder(今回はWaveNet)で音声に変換する。

試してみる(その1)

ATR503の発話音声を、綾波レイの音声に変換してみる。
ターゲット音声となる"綾波音声"データは下記を使用させていただいた。
Scyclone Demo Page

ソース音声(ATR503)

ターゲット音声(話者Embedの生成に使用)

変換結果


話者Embedをplotしてみる。
本来、複数の音声から平均を求めるようだが、単一音声ファイルから生成した。

左: ソース音声
右: 綾波音声

f:id:ichou1:20210429115433p:plainf:id:ichou1:20210429115441p:plain

試してみる(その2)

公開されている話者「p228」のEmbedで試してみた結果。

変換結果

こちらの方は女性声のように聞こえる。

試してみる(その3)

話者「p256」のEmbedで試してみた結果。
(wavファイルが公開されていないが、おそらく男性と思われる)

変換結果



話者Embedを適切に作れれば、求める音声に変換できるかもしれない。

MakeItTalkその1

「MakeItTalk」を試してみる。
音声ファイルに合わせて、口パク動画を生成してくれるもので、インプットとなる音声ファイルも画像も「1つだけ」でよいのがすごい。

github.com

実際に生成された口パク動画のデモ。
多少、画像の精度が落ちているようだが、音声にマッチした動きになっている。
cedro3.com

上記サイトのデモ画像を使わせていただいたが、真正面を向いていなくても動くし、まばたきもする。
声のボリュームに合わせて、口の大きさも変わる。
f:id:ichou1:20210418093835p:plain

これを使えば、映像やアニメの作成がラクになると思われる。


どのような技術が使われているかを見てみる。
githubの要約情報の抜粋。

our method first disentangles the content and speaker information in the input audio signal.
The audio content robustly controls the motion of lips and nearby facial regions, while the speaker information determines the specifics of facial expressions and the rest of the talking-head dynamics.

"content"(話の内容)から"唇の動き"を求めて、"speaker information"から"顔のパーツの動き"を求める模様。
(後半の内容はおそらく、声の大きさや早さのことと思われる)

"speaker infomation"というのがResemblyzerを使った256次元の特徴量抽出。

# audio embedding
from thirdparty.resemblyer_util.speaker_emb import get_spk_emb
me, ae = get_spk_emb('<audio file>')
# Embedding dim: 256
# --> me: embeds(MEAN), (256, ) 
# --> ae: embeds(ALL),  (batch_size, 256)
au_emb.append(me.reshape(-1))


そして、AUTOVCを使った声質変換。
(ここでは、オバマ氏の声質に変換している)

from src.autovc.AutoVC_mel_Convertor_retrain_version import AutoVC_mel_Convertor
c = AutoVC_mel_Convertor('examples')
au_data_i = c.convert_single_wav_to_autovc_input(audio_filename='<audio file>',
                                                 autovc_model_path='ckpt_autovc.pth')


音声から、landmark情報を求める。
(landmarkについては、下記を参照)
work-in-progress.hatenablog.com

''' STEP 4: RUN audio -> landmark network'''
from src.approaches.train_audio2landmark import Audio2landmark_model
model = Audio2landmark_model(opt_parser, jpg_shape=shape_3d)
model.test(au_emb=au_emb)
# <-- input:  landmark fake placeholder
#             examples/dump/random_val_fl.pickle
#                           random_val_au.pickle
#                           random_val_gaze.pickle (rot_trans/rot_quat/anchor_t_shape)
# --> output: landmark network as TEXT
#             examples/pred_fls_<video_name>_<audio_embed_key>.txt


landmark情報をもとに、イメージを生成する。

''' STEP 6: Imag2image translation '''
model = Image_translation_block(opt_parser, single_test=True)
with torch.no_grad():
    model.single_test(jpg=img,
                      fls=fl,  # landmark network(de-normalized)
                      filename=fls[i],
                      prefix=opt_parser.jpg.split('.')[0])

次回に続く。

日銀のEFT買い入れを可視化してみる(2021年4月9日までのデータ)

日銀によるETF購入の方針が変わる。

jp.reuters.com

日銀の黒田東彦総裁は22日、参院・財政金融委員会で、上場投資信託ETF)の買い入れ対象をTOPIX連動型のみに変更したことについて「個別銘柄に偏った影響ができるだけ生じないように、指数構成銘柄が最も多いTOPIX連動型のみにした」と説明した。

野村アセットマネジメントが運用するETF銘柄(日銀の買付対象)を見てみる。
NEXT FUNDS TOPIX連動型上場投信(1306) | NEXT FUNDS
「組入全銘柄情報」のエクセルを開くと、「2187」銘柄。


4月に入ってからの買入れは無し。

この1年間、日経平均株価は下降局面において日銀によるETF買入れに支えられていたことがよく分かる。
f:id:ichou1:20210411112438p:plain

(下記で公開)
https://analytics.katakanadojo.tokyo/d/WtlmSAaWz/nikkei?viewPanel=2&orgId=1&from=now-13M&to=now