GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials - 01/25 - #86

Open GENZITSU opened 2 years ago

GENZITSU commented 2 years ago

Lambdaの名前を変えただけなのに

本番環境でやらかしちゃった人カレンダーで見つけた記事。何気なくLambdaの名前を変更したらとんでも無いことが起こった事件の回顧録

アーキテクチャ

スクリーンショット 2022-01-19 18 55 57

なにが起きたか

Lambdaの名前変更を行った後に大量のデータがインサートされた。

よくよく見てみると、取得したデータは全てが1秒以内にインサートされたものでした。そうです。1秒以内にとてつもない量のインサートが走っていた ため検証のデータが見つからなかったのです。

スクリーンショット 2022-01-19 18 59 31

何が原因だったか。

じつは、Lambdaの名前はそもそも不可能で、実際は旧名称のLambdaが削除されたのちに、新しい名称のLambdaが生成されるという挙動をする。しかし著者はこのことを知っていたし、staging環境でも動作の確認は取れていた。

原因はそこではなくLambdaのリトライ仕様にあった。

Lamdbaのリトライの仕組みは呼び出し方によって異なります。 例えば非同期呼び出しでは、2回の再試行をしてくれます。 そして、DynamoDBストリームを使うとストリームの期限切れになるまで再試行を繰り返してくれます。

ストリームレコードは 24 時間後に自動的に削除されます。 なるほど、DynamoDBストリームは24時間保持されるので、インサートされたデータの期間と一致します。

新しいLambdaがこのストリームデータを読んで一気にinsertしてしまっというわけ...

どうするべきだったか

そもそもLambdaは同一のqueue itemに対して、2回処理が実行されてしまうことがある。

今回の事故が起きた原因として、 Lambdaの後続処理の冪等性 に問題がありました。後続処理で一度実施済みかどうかを判断するなど、Lambdaがリトライされた時にも問題ないようにしておく必要がありました。

非同期のイベントベースのシステムは、再実行されても冪等性を保つように設計する

コメント

読んでるだけで胃が痛くなってくるが、貴重な知見である...

出典

元記事

GENZITSU commented 2 years ago

天井カメラで捉えた人物をコンピュータビジョンで解析した3年間のトライアンドエラーとこれから

天井カメラを用いて、カフェでの人物行動解析を行った3年間の軌跡が綴られている。

気になったスライドのみ抜粋

Partial Affinity Fieldを用いた軽量な骨格推定 スクリーンショット 2022-01-19 20 29 54

スクリーンショット 2022-01-19 20 29 47

スクリーンショット 2022-01-19 20 30 10

スクリーンショット 2022-01-19 20 30 17

スクリーンショット 2022-01-19 20 30 28

スクリーンショット 2022-01-19 20 30 54

スクリーンショット 2022-01-19 20 31 02

スクリーンショット 2022-01-19 20 31 23

スクリーンショット 2022-01-19 20 31 31

コメント

やはりトレンドは3DCGソフトなんだなと

出典

天井カメラで捉えた人物をコンピュータビジョンで解析した3年間のトライアンドエラーとこれから

GENZITSU commented 2 years ago

写真内の物体を3Dモデルに変換するシステム、米Snapらの研究チームが開発

嘘か誠か不明だが、web上の同一写真が映る画像群を用いて、対象物の3Dモデルを生成するシステムが発表されたとのこと。

オンラインで公開している同一対象物が写る画像群を使い、その対象物の3Dモデルを高い忠実度で再構築するシステムを提案する。通常、オンライン上の画像は、照明やカメラの向きなど異なる条件で撮影しているため、単純にこれらを組み合わせても正確な再現は難しい。 開発したシステムは、対象物のジオメトリと周囲の照明を推定し、適切な照明条件で対象物の3Dモデルをレンダリングする。新しいビューを合成できるだけでなく、新しい環境と照明条件において、撮影した物体を再照明し、周囲と調和した合成が行える。

手法の全体像は以下のような感じ、細かいところは全くわからないが、入力には画像とsegmnetaionのマスクが必要とのこと。

スクリーンショット 2022-01-20 15 01 52

結果

スクリーンショット 2022-01-20 15 03 08

動画が凄いので確認是非確認してみてほしい

コメント

めちゃくちゃ凄そう。NeRF系理解していきたいところ。。

出典

元記事

論文のofficialページ

code (comming soon)

GENZITSU commented 2 years ago

3dスキャンアプリQloneの紹介

Qloneという3Dスキャンアプリ ドームに沿うようにスマホを動かすといい感じにモデルを作ってくれる。

コメント

googleplayなどのレビューを見ると精度はまだまだっぽいが、今後この手のアプリはどんどん進化するだろう

出典

元ツイート

GENZITSU commented 2 years ago

OpenAi - CLIP Example

petFinderコンペ2の1stの人が書いたCLIPの使用方法を説明したnotebook

コメント

いつのまにかCLIPはライブラリー化されていたようだ。 しらなかった。

出典

kaggle notebook

GENZITSU commented 2 years ago

isl-org / lang-seg

画像に対してクラス定義を行うことで、zero shot segmentationをするモデルを扱うことができるgithub。

スクリーンショット 2022-01-20 15 34 33

以下が仕組みで、image encoderにはImagenet1Kで学習されたResNetやViTを用いて、text encoderにはCLIPを用いてる。

スクリーンショット 2022-01-20 15 35 26

どうも未知物体にも適応できる模様

スクリーンショット 2022-01-20 15 36 38

コメント

マルチモーダル系のモデルの進化で、ZeroShot / few shot系の精度今後爆上げしたりするんだろうか?

出典

github (MIT)

元論文

GENZITSU commented 2 years ago

Survival Analysis in Python A Quick Guide to The Weibull Analysis

Pythonで生存解析を行うチュートリアル

以下のようなプロットが書けるようになる。

スクリーンショット 2022-01-21 21 28 48

コメント

メモ

出典

元記事

GENZITSU commented 2 years ago

cuGraph でページランクを計算したら爆速だった

RAPIDのcuGraphを用いてページランク計算をすると、networkXと比べて爆速になるとのこと

# from https://acro-engineer.hatenablog.com/entry/2021/05/21/120000

# Pandas.DataFrame を cudf に変換する
gdf = cudf.from_pandas(df)

# source (src), destination (dst) ベクトルのペアからグラフを生成する
cuG = cugraph.DiGraph()
cuG.from_cudf_edgelist(gdf, source='src', destination='dst')

# ページランクの計算時間を計測する
start_time = time.time()
df_page = cugraph.pagerank(cuG)
print(f'{time.time() - start_time:.3f}秒')
スクリーンショット 2022-01-21 22 06 47

コメント

メモ

出典

元記事

GENZITSU commented 2 years ago

AlphaFoldが商用利用可に

AlphaFold2のDeepMindモデルパラメータのライセンスが変更されたようです。従来はCC BY-NCで商用利用不可でしたが、CC BYに変更され、商用利用も可能になりました

コメント

メモ

出典

元ツイート

github

GENZITSU commented 2 years ago

Webサービスがバズったら1週間以内にやるべきこと

Qiita記事がトレンドインすると、瞬間的にWebサービスへのアクセス数が急増するが、数日でアクセス数は元に戻ってしまう。 そこで以下の施策を速攻で打ってバズっているうちに有益な学びを得るべきと考え、本記事はそれを実践した結果を実データと合わせて説明している。 事前登録フォームを作って興味を持ってくれた人と繋がる

  • いなくなってしまう前に連絡先を入手しておく
    • コメント欄を置いておくとたくさんコメントもらえる
  • Twitterやはてぶコメントからどうして興味を持ってくれたのか考察する
    • なぜ興味を持ってくれたのか、何を求められているかが機能改善につながる
  • 有料機能を作って単なるバズなのか、本当にニーズがあるのか判断できるようにする
    • 「お金を払ってでも使いたいのか」は重要な指標。最初の1週間で一番最初に開発してよかった。

コメント

よい

出典

元記事

GENZITSU commented 2 years ago

pythonで競技プログラミング(AtCoder)の問題を解くとき、注意すべき落とし穴

  1. 最大再帰回数制限 pythonのデフォルトの最大再起制限は1000くらいと結構浅いので、limitをあげておく 当然メモリ使用量も増加するのでそこは注意
# from https://qiita.com/satoyuyapyaa/items/9f047fb2babcd028b002

import sys
sys.setrecursionlimit(999999999)
  1. inは遅い

    要素 in リストを使って存在判定を行ってしまうと毎回リストの長さ分だけのチェックを行うので簡単にTLE(時間切れ)になってしまいます。 リストの代わりにセットを使いましょう。 もっといえばハッシュテーブルを使うべき

  2. 二次元リストの作り方 雑に作ると参照の罠にハマるので注意。

# from https://qiita.com/satoyuyapyaa/items/9f047fb2babcd028b002

board = [["."]*3]*3
for line in board:
    print(line)

#出力
#['.', '.', '.']
#['.', '.', '.']
#['.', '.', '.']

これはこうなる

# from https://qiita.com/satoyuyapyaa/items/9f047fb2babcd028b002

#盤の真ん中に「o」を描きこむ
board[1][1] = "o"

for line in board:
    print(line)
#出力
#['.', 'o', '.']
#['.', 'o', '.']
#['.', 'o', '.']
#[1][1]に1つだけ〇を描いたつもりが、縦に3個〇が並んでしまう。

なぜなら["."]*3というリストに対する参照が3つ作られるから

内包表記を使うと良い

# from https://qiita.com/satoyuyapyaa/items/9f047fb2babcd028b002

board = [["." for i in range(3)] for j in range(3)]

多次元リストへのインデックスの順番に注意!

以下のコードの速度は全く異なるものになる

# from https://qiita.com/satoyuyapyaa/items/9f047fb2babcd028b002
lst = [[[0 for k in range(300)] for j in range(300)] for k in range(300)] 

for i in range(300):
  for j in range(300):
    for k in range(300):
      lst[i][j][k] += 1

lst = [[[0 for k in range(300)] for j in range(300)] for k in range(300)] 

for i in range(300):
  for j in range(300):
    for k in range(300):
      lst[k][j][i] += 1 #インデックスの順番が[i][j][k]から[k][j][i]に変わっている

プログラミング言語にはキャッシュという機能があり、あるメモリを見たときに「多分次に使われるだろうな」ということで近くにあるメモリもついでに高速にアクセスできるように準備してくれます。同じリストの中の要素はメモリ上でも近くにあることが多いので、リストのある要素を見た直後は、同じリスト内の別の要素には高速にアクセスできる

forループのループ変数とリストのインデックスの順番は合わせよう。 二次元リストくらいなら大して気にしなくても大丈夫なことが多いですが、三次元リストくらいになると致命傷になります。

切り捨て除算

# from https://qiita.com/satoyuyapyaa/items/9f047fb2babcd028b002

print(int(11111111111111/1))
#出力
#11111111111111110656

少数の誤差によって数値計算がバグることがある。

pythonには初めから切り捨て除算専用の演算子//があるのでint()を切り捨て除算に使う必要はないです。 ちなみに小数の誤差をテーマに扱った問題はちょくちょく出てきます。対処法は「文字列として扱う(小数点.より左側と右側で分けて考える)」「乗算して整数にする」「方程式の変形で割り算や√が出てこない形にする」などがあります。

インデントなし(グローバルスコープ)で直接処理を書くと遅い

# from https://qiita.com/satoyuyapyaa/items/9f047fb2babcd028b002

#インデントなしで直接書く(グローバルスコープ)
a = 0
b = 0
print(a + b)

#関数スコープの中で書く
def main():
    a = 0
    b = 0
    print(a + b)
main()

コメント

知らないことが多かった。

出典

元記事

GENZITSU commented 2 years ago

AI-Assisted Annotation with Multimodal Neural Networks

シンプルなNNとCLIPを用いて、クウラドソーシングで収集した顔画像データのチェックをするという話

スクリーンショット 2022-01-22 11 54 14

スクリーンショット 2022-01-22 11 54 22

スクリーンショット 2022-01-22 11 54 28

コメント

マルチモーダル言語モデルの可能性を垣間見れた良い記事。

出典

元記事

GENZITSU commented 2 years ago

Active Learning Behind the Scenes

Active Leaningの評価に単純な精度だけ比較だけを用いるのは不十分ですよというお話。 サイクルごとのアノテーション一貫性やや、難易度別のサンプルに対する精度比較をすることでより適切に評価ができるとのこと。

これは不十分

スクリーンショット 2022-01-22 12 51 42

サイクルごろのアノテーションの一貫性

スクリーンショット 2022-01-22 12 52 11

難易度ごとの精度

スクリーンショット 2022-01-22 12 51 58

コメント

単純な制度比較しか知らんかったので、勉強になった。

出典

元記事

GENZITSU commented 2 years ago

Improved TensorFlow 2.7 Operations for Faster Recommenders with NVIDIA

Tensorflow 2.7になって追加されたスパース系操作とA100の大きなメモリを活用することで学習速度を大幅に改善したとのこと。

スクリーンショット 2022-01-23 22 41 54 スクリーンショット 2022-01-23 22 42 00 スクリーンショット 2022-01-23 22 42 06

コメント

メモ

出典

元記事

GENZITSU commented 2 years ago

コンサルの心得99。コンサルタントも、事業会社の皆さんも、この1本動画を見て、自分の成長を感じ、成長のヒントを見つけてください。

文字通り99個あるので相当な分量。コンサル用の心得もあるので全部は参考にならないが、自分が気になったやつは以下。

スクリーンショット 2022-01-24 22 58 46

スクリーンショット 2022-01-24 22 58 58

スクリーンショット 2022-10-31 21 29 17

スクリーンショット 2022-01-24 23 03 58

スクリーンショット 2022-10-31 21 32 04

スクリーンショット 2022-01-24 23 04 12

スクリーンショット 2022-01-24 23 03 17

スクリーンショット 2022-10-31 21 40 24

スクリーンショット 2022-01-24 23 06 25

スクリーンショット 2022-01-24 23 08 35

スクリーンショット 2022-10-31 21 50 18

スクリーンショット 2022-01-24 23 11 12

スクリーンショット 2022-01-24 23 12 02

スクリーンショット 2022-01-24 23 12 41

スクリーンショット 2022-10-31 22 00 22

スクリーンショット 2022-01-24 23 13 30

スクリーンショット 2022-01-24 23 14 41

コメント

後半はコンサル成分高め

出典

コンサルの心得99。コンサルタントも、事業会社の皆さんも、この1本動画を見て、自分の成長を感じ、成長のヒントを見つけてください。

GENZITSU commented 2 years ago

1x1 convはLinearで実装する方が早いらしい

元ツイートによるとLinearで実装する方が20%ほど早いみたい。

コメント

ちなみに、ConvNeXtの実装でも1x1 convはLinearで実装されている。

FJdN9snaMAIVaFu

出典

元ツイート

GENZITSU commented 2 years ago

1DCNN結構強いらしい

Kaggle GMの@nyanpさんおよび@mamas16kさんのやり取りが面白い。

いわく、1DCNNはしっかりチューニングすると結構強いらしい。 ここで言う1DCNNはraw feature → Dense → 1DCNNになっていることに注意。

なので、やってることとしては、「特徴量生成→kenel size分で交互特徴量の生成→予測」
1DCNNのkene sizeがmax depthに相当し、max depthよりも交互特徴量の作成に強い制約を与えていると言うイメージか

ただし圧勝していると言うわけではないらしい。(元ツイート)

FJjUXAOaAAcxUhn

コメント

明示的にkernel sizeで縛れるのが強みなのかなぁ?

1DCNNの実装についてはこちらのnotebookも参考になる

出典

元ツイート

GENZITSU commented 2 years ago

ビッグデータ分析・活用のためのSQLレシピ

高度なSQLなどの実装例が盛りだくさんの本らしい。

コメント

メモ

出典

元記事