Open GENZITSU opened 2 years ago
天井カメラを用いて、カフェでの人物行動解析を行った3年間の軌跡が綴られている。
気になったスライドのみ抜粋
Partial Affinity Fieldを用いた軽量な骨格推定
やはりトレンドは3DCGソフトなんだなと
嘘か誠か不明だが、web上の同一写真が映る画像群を用いて、対象物の3Dモデルを生成するシステムが発表されたとのこと。
オンラインで公開している同一対象物が写る画像群を使い、その対象物の3Dモデルを高い忠実度で再構築するシステムを提案する。通常、オンライン上の画像は、照明やカメラの向きなど異なる条件で撮影しているため、単純にこれらを組み合わせても正確な再現は難しい。 開発したシステムは、対象物のジオメトリと周囲の照明を推定し、適切な照明条件で対象物の3Dモデルをレンダリングする。新しいビューを合成できるだけでなく、新しい環境と照明条件において、撮影した物体を再照明し、周囲と調和した合成が行える。
手法の全体像は以下のような感じ、細かいところは全くわからないが、入力には画像とsegmnetaionのマスクが必要とのこと。
結果
動画が凄いので確認是非確認してみてほしい
めちゃくちゃ凄そう。NeRF系理解していきたいところ。。
Qloneという3Dスキャンアプリ ドームに沿うようにスマホを動かすといい感じにモデルを作ってくれる。
googleplayなどのレビューを見ると精度はまだまだっぽいが、今後この手のアプリはどんどん進化するだろう
petFinderコンペ2の1stの人が書いたCLIPの使用方法を説明したnotebook
いつのまにかCLIPはライブラリー化されていたようだ。 しらなかった。
画像に対してクラス定義を行うことで、zero shot segmentationをするモデルを扱うことができるgithub。
以下が仕組みで、image encoderにはImagenet1Kで学習されたResNetやViTを用いて、text encoderにはCLIPを用いてる。
どうも未知物体にも適応できる模様
マルチモーダル系のモデルの進化で、ZeroShot / few shot系の精度今後爆上げしたりするんだろうか?
Pythonで生存解析を行うチュートリアル
以下のようなプロットが書けるようになる。
メモ
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}秒')
メモ
Qiita記事がトレンドインすると、瞬間的にWebサービスへのアクセス数が急増するが、数日でアクセス数は元に戻ってしまう。 そこで以下の施策を速攻で打ってバズっているうちに有益な学びを得るべきと考え、本記事はそれを実践した結果を実データと合わせて説明している。 事前登録フォームを作って興味を持ってくれた人と繋がる
- いなくなってしまう前に連絡先を入手しておく
- コメント欄を置いておくとたくさんコメントもらえる
- Twitterやはてぶコメントからどうして興味を持ってくれたのか考察する
- なぜ興味を持ってくれたのか、何を求められているかが機能改善につながる
- 有料機能を作って単なるバズなのか、本当にニーズがあるのか判断できるようにする
- 「お金を払ってでも使いたいのか」は重要な指標。最初の1週間で一番最初に開発してよかった。
よい
# from https://qiita.com/satoyuyapyaa/items/9f047fb2babcd028b002
import sys
sys.setrecursionlimit(999999999)
inは遅い
要素 in リストを使って存在判定を行ってしまうと毎回リストの長さ分だけのチェックを行うので簡単にTLE(時間切れ)になってしまいます。 リストの代わりにセットを使いましょう。 もっといえばハッシュテーブルを使うべき
二次元リストの作り方 雑に作ると参照の罠にハマるので注意。
# 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()
知らないことが多かった。
シンプルなNNとCLIPを用いて、クウラドソーシングで収集した顔画像データのチェックをするという話
マルチモーダル言語モデルの可能性を垣間見れた良い記事。
Active Leaningの評価に単純な精度だけ比較だけを用いるのは不十分ですよというお話。 サイクルごとのアノテーション一貫性やや、難易度別のサンプルに対する精度比較をすることでより適切に評価ができるとのこと。
これは不十分
サイクルごろのアノテーションの一貫性
難易度ごとの精度
単純な制度比較しか知らんかったので、勉強になった。
Tensorflow 2.7になって追加されたスパース系操作とA100の大きなメモリを活用することで学習速度を大幅に改善したとのこと。
メモ
文字通り99個あるので相当な分量。コンサル用の心得もあるので全部は参考にならないが、自分が気になったやつは以下。
後半はコンサル成分高め
コンサルの心得99。コンサルタントも、事業会社の皆さんも、この1本動画を見て、自分の成長を感じ、成長のヒントを見つけてください。
Kaggle GMの@nyanpさんおよび@mamas16kさんのやり取りが面白い。
いわく、1DCNNはしっかりチューニングすると結構強いらしい。 ここで言う1DCNNはraw feature → Dense → 1DCNNになっていることに注意。
なので、やってることとしては、「特徴量生成→kenel size分で交互特徴量の生成→予測」
1DCNNのkene sizeがmax depthに相当し、max depthよりも交互特徴量の作成に強い制約を与えていると言うイメージか
ただし圧勝していると言うわけではないらしい。(元ツイート)
明示的にkernel sizeで縛れるのが強みなのかなぁ?
1DCNNの実装についてはこちらのnotebookも参考になる
Lambdaの名前を変えただけなのに
本番環境でやらかしちゃった人カレンダーで見つけた記事。何気なくLambdaの名前を変更したらとんでも無いことが起こった事件の回顧録
アーキテクチャ
なにが起きたか
Lambdaの名前変更を行った後に大量のデータがインサートされた。
何が原因だったか。
じつは、Lambdaの名前はそもそも不可能で、実際は旧名称のLambdaが削除されたのちに、新しい名称のLambdaが生成されるという挙動をする。しかし著者はこのことを知っていたし、staging環境でも動作の確認は取れていた。
原因はそこではなくLambdaのリトライ仕様にあった。
新しいLambdaがこのストリームデータを読んで一気にinsertしてしまっというわけ...
どうするべきだったか
そもそもLambdaは同一のqueue itemに対して、2回処理が実行されてしまうことがある。
コメント
読んでるだけで胃が痛くなってくるが、貴重な知見である...
出典
元記事