GENZITSU / UsefulMaterials

34 stars 0 forks source link

weekly useful materials - 02/09 - #88

Open GENZITSU opened 2 years ago

GENZITSU commented 2 years ago

Developing Web-Based Real-Time Video/Audio Processing Apps Quickly with Streamlit

streamlitによるwebカメラからの入力を利用したアプリの作り方が紹介されている。

streamlitの拡張ライブラリであるstreamlit-webrtcを使うのが肝

スクリーンショット 2022-02-02 22 07 19

コメント

メモ

出典

元記事

GENZITSU commented 2 years ago

文献紹介:Dynamic Contextualized Word Embeddings

分野と時間と文脈を考慮したembedding DCWEを提案した論文の紹介。 分野の情報はなくても精度が悪化しないものの、時間の情報を入れると下流タスクの性能も上がるらしい。

スクリーンショット 2022-02-03 22 27 23

スクリーンショット 2022-02-03 22 27 31

スクリーンショット 2022-02-03 22 27 42

スクリーンショット 2022-02-03 22 28 00

スクリーンショット 2022-02-03 22 29 04

スクリーンショット 2022-02-03 22 29 11

コメント

分野情報を入れるのは結構手間なので、どうしたものかと思っていたが、なくてもなんとかなるようでよかった。 実務で使うとなると、年/月ごとにembedderを変える必要が出てくるのが難点かも

出典

元記事

GENZITSU commented 2 years ago

DOTOWN

商用利用可能なドット絵の素材提供サイト

スクリーンショット 2022-02-03 22 32 11

コメント

一箇所ドットを使うと、統一感を持たせるために他もドットにしないといけないような気がして、若干使いにくいが、メモ

出典

元記事

GENZITSU commented 2 years ago

Kaggle振り返り PetFinder.my - Pawpularity Contest

犬や猫のペットの画像 + csvメタデータを用いてPawpularityという0~100の指標を予測するコンペの振り返り記事。
データセットサイズは9,912枚

面白かったアプローチだけ抜粋

半教師あり学習

クラス分類系のタスクであれば、出力が確率になっているため、例えば、別データに対して推論した結果、確率 0.9 以上のデータを採用する、といったように、比較的推論結果が合っていると思われるデータを利用すること

これは分類系でしか使えないので、今回はTensorFlow Speech Recognition Challenge 3rd place solution](https://www.kaggle.com/c/tensorflow-speech-recognition-challenge/discussion/47722) を参考にした手法をとった。

Discussion の中で2つの方法が紹介されています。 1つ目は、学習データとして「100% of training data + 20%-35% of test data selected per epoch」を利用する方法、 2つ目は「100% of test data」を利用する方法です。 どちらも試した結果、精度向上が出来た2つ目の方法を採用しました。

メタデータの利用方法

スクリーンショット 2022-02-05 15 44 10

BCE Lossへの変換

0~100 の値を 100 で割り、0~1 に変換し、BCE Loss(Binary Cross Entropy Loss)を計算するという手法が主流になっていました。Loss を変更しただけで精度向上が確認できたので、これは応用範囲の広い手法だと思いました。

Cross Validation (bin)

Pawpularity を Rice Ruleで分割した bin で、Stratified KFold しているものがありました。またしても、コードの内容はほぼ同じで、 bin のところだけが異なり精度が高いという現象が起きていたため、私も bin に変更しました。 Rice Rule は、正規分布のデータに対して bin 数を算出する式であり、他にも Sturges’ Rule や、Square-root Rule 等があります。どれを選ぶかは分布の形と、試行錯誤というところでしょうか。

ちなみにこんな方法で分割するとのこと

スクリーンショット 2022-02-05 15 46 35

コメント

なぜにBCE Lossにした方が精度が高くなったのかが謎ではある。
BCEとRMSEは仮定している誤差分布が異なるとか、ネットワーク的に相性の良いロスだからなんだろうか...?

rice ruleが聞いたと言うことは分布自体は正規分布のはずなので、RMSEでも十分な気がするので、やはりネットワークとの愛用かなぁ。

出典

元記事

GENZITSU commented 2 years ago

Pet Finder 2 振り返り②🐶🐱(上位者解法編)

犬や猫のペットの画像 + csvメタデータを用いてPawpularityという0~100の指標を予測するコンペの振り返り記事 (上位解法)。

面白かったアプローチだけ抜粋

OpenAI CLIP

1st Solutionでは OpenAI CLIPから得られるMetaデータを使用していました。 OpenAI CLIPのサンプルコードが公開されています。Sleeping dog、PoodleといったYOLO以上の情報が得られるので、いい特徴量が得られる

Auxiliary output・Multi-tasking

  • Metaデータをinputではなくoutputに使い、Multi-taskingさせる手法があるようです。
  • 今回、犬猫情報をinputとして与えても精度があがりませんでしたが、Outputに加えて犬猫判定もタスクに加えることで、モデル全体が賢くなり、結果的にPawpularityの精度も改善したようです

Deep Label Distribution Learning (DLDL)

回帰問題を順序付きの分類問題にする手法

Loss : (KLDivLoss and HuberLoss) or (FocalLoss and HuberLoss)

Ordinal Regression

CPMPさんが使っていた解法。

コードはこれだが、何をやってるのかがよくわからない。

スクリーンショット 2022-02-05 21 21 43

MixOut

dropoutの派生系の手法

dropoutは一つのニューロンを完全に消し去ってしまうが、mixoutでは元々の値とdropoutした値を確率pで混ぜる。

論文の図

スクリーンショット 2022-02-05 21 13 47

コメント

面白い手法が多い。
ordinal regressionはランキング学習とかでも使えそうな感じがしているが、理論が不明...

出典

元記事

GENZITSU commented 2 years ago

pandasの日時カラムから月や時間を抜き出す

今までpandasのdatetime型から月とかを取り出すとき df['datetime].map(lambda x: x.month) でやっていたけど df['datetime'].dt.month が圧倒的に速いのか(そりゃそうか)

コメント

確かに

出典

元記事

GENZITSU commented 2 years ago

「コード書きました、あとはよろしく」では優れたソフトウェアは生まれない コンテナのスペシャリストが語る、運用性を損なう8つの実装例

1. スケールアウトできない、しにくいアプリ実装

スクリーンショット 2022-02-05 21 51 20

これはNode.jsのコードです。ユーザーIDのサフィックスをつけたファイルにセッションを書き出している。AWS環境の構築をしている方は、これを見れば笑うと思います。「こんなことしたら、Load BalancerのスティッキーセッションをONにしないとうまくいかないじゃん」

2. 依存パッケージ解決を自動化できない

スクリーンショット 2022-02-05 21 54 18

3. 安全に停止的できない

スクリーンショット 2022-02-05 21 55 16

4. 起動処理が長い

スクリーンショット 2022-02-05 22 05 47
5. ビルド/パッケージング前に手作業が必要
スクリーンショット 2022-02-05 22 06 50

6. 実装が実行環境の環境名などに依存している

スクリーンショット 2022-02-05 22 08 35

7. ログをファイルにしか出力できない

スクリーンショット 2022-02-05 22 09 24

8. “Readレプリカ”を使えない

スクリーンショット 2022-02-05 22 11 15

コメント

基本中の基本らしいが「3. 安全に停止できない」「8. “Readレプリカ”を使えない」は意識したことがなかった。

出典

元記事

参考記事(The Twelve-Factor App)

GENZITSU commented 2 years ago

ONNXでTransformerを爆速にしてみる

ELYZA主催のNLPHACKSで紹介されていたtransformerモデルの推論速度をONNXで高速化する手法の紹介。

スクリーンショット 2022-02-05 23 06 38 スクリーンショット 2022-02-05 23 09 00 スクリーンショット 2022-02-05 23 09 06 スクリーンショット 2022-02-05 23 09 40 スクリーンショット 2022-02-05 23 10 47 スクリーンショット 2022-02-05 23 10 57 スクリーンショット 2022-02-05 23 11 05 スクリーンショット 2022-02-05 23 11 15

コメント

ONNXでcuda推論できるの知らなかった。

ONNX + 最適化で3枚程度高速化するのすごい。

ドキュメントによるとONNXでcuda推論するのは、バージョンの依存関係がちょっと厳しいらしい。

スクリーンショット 2022-02-05 23 17 15

出典

元記事

GENZITSU commented 2 years ago

【2022年版】Azure/GCP/AWS OCRサービス比較(随時更新)

現状azureのOCR機能が一番強い模様

スクリーンショット 2022-02-06 21 57 45 スクリーンショット 2022-02-06 21 57 52 スクリーンショット 2022-02-06 21 58 57

コメント

メモ

出典

元記事

GENZITSU commented 2 years ago

Solafune 市街地画像の超解像化コンペ 5位解法と取り組み

375×300ピクセルの画像を4倍の1500×1200ピクセルに拡大したときにどれくらい元の画像を復元できているかを争いました

公開されている001_classicalSR_DF2K_s64w8_SwinIR-M_x4.pthを初期値として、3モデルを学習させた出力を平均

公式の学習データ60枚中54枚(90%)と、外部データから作成した学習データ477枚、合計533枚を学習に使用 今回は練馬区が公開している航空写真のデータセットを用いました。

低解像度の画像を64×64にCropし、それを256×256に超解像するような学習を実施

2300Epochまでは上記の533枚で学習、そこから3000epochまでは公式の学習データのみで学習

コメント

超解像度タスクに取り組んだことがないので、ケースとしてとても参考になる。

出典

元記事

GENZITSU commented 2 years ago

Mac版DevToysがなかったので3日で作って公開した。

コメント

出典

元記事

GENZITSU commented 2 years ago

画像認識技術を活用した新規サービス創出に向けた 価値検証プロセスの提案

従来のプロトタイピング手法で模擬できない行動認識器を作成し,短期間で実証実験を実施する価値検証プロセスを提案

スクリーンショット 2022-02-07 20 52 13

既存の特定用途向け認識器を複数組み合わせ, 計算コストの小さい一部の認識器のみを学習対象にすることで,少量のデータかつ短期間で行動認識器を学習で きる.仮想の新規サービス案に対し提案プロセスを適用することで,一から認識器を学習する従来のプロセスよ り短期間で実証実験が可能であることを示す

第1に,認識器を一から学習するプロセスと 同様に学習データを作成するが,これまでの使用実績から, データ量は認識器を一から学習する場合の1/10~1/100程度 である 第3に,1日程度の短時間で認識器を学習する.

学習対象である認識器は,行動ラベルを出力する直前の 計算コストの小さい認識器のみ したがって,再学習認識器の入力は低次元 のベクトルであり,浅いニューラルネットワーク,あるい は,サポートベクターマシン[12]やXGBoost[13]などの機械 学習手法が利用できる

どのような学習済み認識機を使うかは、判定したいタスクに応じて変えればよい。

スクリーンショット 2022-02-07 20 56 23

学習データ作成に関して,提案プロセスの学習に必要なデータは少量であり,スクワットとスク ワット以外を認識する易しい認識タスクの場合は20個程度 の動画,複数の行動を認識する場合は50個程度の動画が学 習データとして必要である. 一方,一から認識器を学習する プロセスの場合,約1000個以上の動画が必要となる.デー タセット[6][7]の10000個以上の動画で事前学習をした場合 でも,第2図で示すディープニューラルネットワークを学習するためには,多数のデータが必要である.

コメント

動画認識あんまりやったことないので参考になる。  

出典

元記事

GENZITSU commented 2 years ago

音声グローバルデータベースMozilla Common Voiceの紹介と貢献方法

世界中のボランティアの音声データが収録された音声認識用データベースCommon Voiceの紹介記事

Common Voiceは音声認識サービスを誰でも開発できるようになることを目的としてMozillaが立ち上げた音声データ収集プロジェクトです。ボランティアによる協力でデータは作成されており、貢献はテキストの読み上げによる音声データの収集だけでなく、音声データを相互に聞くことでその質の検証も行われています。

現在公開されている音声コーパスは中流階級の男性の音声で作成されていることが多く、女性の音声や非ネイティブ話者の音声が少なくそれらの音声認識が難しくなっているという問題があり、その対応として多様な話者の音声を収集することも目的としています。実際に日本語の音声データをいくつか聞いてみたところ、確かに非ネイティブ話者による読み上げが多く行われていました。

本記事執筆時点では言語数87、検証済み録音データは14122時間分集まっており、日々その種類・量は更新されています。 ちなみに2022-01-19更新の最新版であるCommon Voice Corpus ver.8では日本語データは検証済みの音声が40時間分とまだまだ少量です

これらのデータセットはクリエイティブ・コモンズのパブリックドメインライセンス(CC0)で提供されており、利用者は商用利用を含めて自由に利用することができます。PythonであればHugging Faceの提供するdatasetライブラリを利用することで簡単にアクセスすることができます。

データセットの利用方法は以下のような感じ

# from https://www.ai-shift.co.jp/techblog/2512

from datasets import load_dataset

cv_data = load_dataset("common_voice", "ja")

# メタ情報と音声データが以下のような構造で取得できる
cv_data['train'][0]
{'client_id': '51e9ed35447037faf8743d586cdb3e1ec9f5c36145456d83cad5e923288fd71278ff6fc1d932eb62a8693da3a224ac54418f66c8577dfa57bbc8a4f3497fe700',
 'path': 'common_voice_ja_19779220.mp3',
 'audio': {'path': 'cv-corpus-6.1-2020-12-11/ja/clips/common_voice_ja_19779220.mp3',
  'array': array([ 0.        ,  0.        ,  0.        , ..., -0.00034094,
         -0.00028092, -0.00025344], dtype=float32),
  'sampling_rate': 48000},
 'sentence': '午後は、溜った書類に目を通して返す。',
 'up_votes': 2,
 'down_votes': 0,
 'age': 'twenties',
 'gender': 'male',
 'accent': '',
 'locale': 'ja',
 'segment': "''"}

データセットへの貢献はwebから簡単に行うことができる模様。

スクリーンショット 2022-02-07 22 44 20 スクリーンショット 2022-02-07 22 44 25 スクリーンショット 2022-02-07 22 44 30

コメント

しらんかった。
データセット貢献用のUIが整っているのがすごい。

出典

元記事

GENZITSU commented 2 years ago

OpenAI GPT-3 Text Embeddings - Really a new state-of-the-art in dense text embeddings?

OpenAIが新しく公開したGPT-3のembeddings endpoint (paper)がその他のembeddingモデルと比べてどうかを検証した記事。

GPT-3のembeddingは現状、推論コスト(速度/時間)に対して、性能があまり良くないという結果になっている。

現状のラインナップ

  • Ada (1024 dimensions)
  • Babbage (2048 dimensions)
  • Curie (4096 dimensions)
  • Davinci (12288 dimensions)
スクリーンショット 2022-02-07 22 56 06 スクリーンショット 2022-02-07 22 59 56 スクリーンショット 2022-02-07 23 00 30

ちなみに同じような検証をするには1億円以上のコストをかける必要があるとのこと

Running the tests now would costs $1,000,000+.

コメント

prompt learning や コード生成など様々な文脈で活躍しているGPT-3だが、embeddingではあまり成果が出ないのは面白い

出典

元記事