sqlparseを使って簡単にSQLをパースする

大量のSQLのリストやログから特定テーブルへのUPDATEを行うクエリだけを抽出したいといったケースが、しばしばあります。1つのアプリケーションからアクセスされるDBであればコードを追っていくことでどうにかなるのですが、異なる言語やORMで構成された複数…

panderaでDataFrameをバリデーションする

pandasのDataFrameは柔軟なテーブル構造を提供してくれますが、時に柔軟すぎて困ることもしばしばです。本番運用するアプリケーションですとなおさらこの欠点が目立ちます。 入力データに依存して意図しない型に変わってしまったり... ex. [1, 2, 3]だとint6…

MySQL: カラムをちょっと変えてテーブルをコピーしたい

SQL

テーブルのレコードをコピーしたい、だけどちょっとカラムの定義や値を変えたいケースがあります。 例として、以下の要件を満たしつつ、postsからcopied_postsへコピーしたいとします。 コピーした日時 (copied_at) を追加したい emailをNULLにしたい mysql>…

Kubeflow Pipelines SDKを用いた並列処理の実装

最近はお仕事でKubeflow Pipelinesを触り始めています。 PythonでDAGを定義し、SDK (KFP) を使ってArgo Workflowのマニフェストを出力して、それをKubeflowにアップロードしてパイプラインを作る、という流れで開発しています。 サンプルパイプライン proces…

論文メモ: An intriguing failing of convolutional neural networks and the CoordConv solution

畳み込みニューラルネットワークが持つ座標変換の問題に着目してCoordConvを提案したAn intriguing failing of convolutional neural networks and the CoordConv solution (NeurIPS'18, arXiv) について紹介します。 @incollection{NIPS2018_8169, title = …

Python: Parquetフォーマットファイルを入出力する (Pandasとpyarrow)

今回はテーブルデータをParquetファイルで扱う方法について2つ紹介します。 Apache Parquet サポートされるデータ型 Pandas DataFrameを用いたParquetファイルの変換 Apache Arrow pyarrowを用いたParquetファイルの変換 まとめ コードは以下の環境で動作確…

Python: poetryでパッケージの依存管理

私はこれまでPythonのパッケージ管理として pyenv + pipenv を主に使ってきました。が、最近はpipenvは色々あって使いづらさを感じていました。 pipenv lockやpipenv syncが遅い (気がする) pipenv自体の更新が怪しかった (参考、今年に入って4月と6月にリリ…

Python: 安全・手軽に一時ファイル・一時ディレクトリを作る (tempfile)

一時的に使うファイルやディレクトリを作成して、処理が終わったら削除する、という手続きを実装する機会はしばしばあると思います。 簡単なことではあるのですが、処理の例外ハンドラで削除の実装を忘れてゴミファイルができてしまったり、並列実行したとき…

論文メモ: LUVLi Face Alignment: Estimating Landmarks’ Location, Uncertainty, and Visibility Likelihood

先週に引き続き顔ランドマーク推定に関わる論文として、CVPR2020で提案された LUVLi Face Alignment: Estimating Landmarks’ Location, Uncertainty, and Visibility Likelihood (arXiv) を紹介します。 LUVLi Face Alignment: Estimating Landmarks’ Locati…

論文メモ: Adaptive Wing Loss for Robust Face Alignment via Heatmap Regression

今回は顔ランドマーク推定に関係する論文を取り上げます。 Adaptive Wing Loss for Robust Face Alignment via Heatmap Regression ヒートマップ回帰 損失関数にMSEを用いた場合の問題点 提案 Adaptive Wing Loss Weighted loss mapで前景画素を強調 実験 考…

複数の画像を組み合わせるオーグメンテーション (mixup, CutMix)

CV

複数の画像を組み合わせたオーグメンテーションであるmixupとCutMixについてまとめます。 mixup CutMix mixup 2枚の画像をラベルともどもブレンドするのがmixup1です。次に紹介するCutMixの論文の図がわかりやすいです。 [2] Table 1 抜粋 入力 と を重みλで…

Optunaでハイパパラメータチューニング

今回はハイパパラメータチューニングを自動化するOptunaを触りながら紹介していきます。 Optuna BayesianOptimizationのかゆいところ Optunaを用いた実装 1変数関数の最適化 分散最適化 scikit-learnの最適化 まとめ Optuna 勾配ブースティング木やニューラ…

画像の一部をマスクするオーグメンテーションのまとめ (Random Erasing, Cutout, Hide-and-Seek, GridMask)

CV

画像の一部をマスクすることでオーグメンテーションする手法について代表的なものをまとめました。 そもそも: なぜ画像の一部をマスクするのか? Random erasing Cutout Hide-and-Seek GridMask まとめ そもそも: なぜ画像の一部をマスクするのか? オーグメ…

物体検出で重なったバウンディングボックスを除去・集約するアルゴリズムのまとめ (NMS, Soft-NMS, NMW, WBF)

物体検出の分野では、検出した物体をバウンディングボックス (BBox) で囲んで、それぞれに信頼度 (スコア) を算出します。 このとき重複したBBoxを除去あるいは集約するアルゴリズムにはバリエーションがあります。物体検出モデルの後処理やコンペなどでよく…

Amazon EMRのステップを使ってPySparkバッチアプリケーションを実装する

前回に引き続きEMRについてです。今回はEMRのステップを用いてPySparkのバッチアプリケーションを実装していきます。 ohke.hateblo.jp EMRのステップ 前回は、JupyterノートブックからSpark環境へジョブをリクエストしていました。これは分析やモデリングの…

Amazon EMRでSparkクラスタを作ってSageMakerからジョブを実行する

Jupyter Notebookなどで作業中に、メモリに乗り切らないような大量のデータに対して何らか処理が必要になるケースがしばしばあります。 これを解決するツールの一つとしてAmazon EMRをきちんと知っておきたいというモチベーションで、今回はAmazon EMRでSpar…

rust-ndarrayを使った行列演算

Rustの行列演算ライブラリ rust-ndarray についての紹介です。ほとんどが備忘録的なコード例となります。 rust-ndarray Rustの行列演算ライブラリはいくつかあります。rust-ndarrayもその1つで、概ねプリミティブな行列演算のみをサポートしたものです。 git…

論文メモ: High-Resolution Representations for Labeling Pixels and Regions

姿勢推定の分野でブレイクスルーとなったHRNetを、顔ランドマーク推定タスクなどに適用した High-Resolution Representations for Labeling Pixels and Regions (arXiv) についてのメモです。 @misc{sun2019highresolution, title={High-Resolution Represen…

Python: HDF5ファイルの作成と読み込み (h5py)

お仕事で触れる機会が増えてきたHDF5について調べて整理します。また、h5pyを使ってWFLWデータセットをHDF5へ変換してみました。 HDF5 HDF (Hierarchical Data Format) は大量のデータを格納するファイルフォーマットで、The HDF Groupによって開発・メンテ…

AWS Service Brokerを使ってKubernetesでマネージドサービスを管理する

EKSのおかげでEC2・ASG・ELBなどが一式揃ったKubernetes環境を楽に構築できるようになりました。 一方で、上記以外のAWSマネージドサービスに依存したアプリケーションの場合、それらマネージドサービスもKubernetes (つまりマニフェストファイル) の管理下…

論文メモ: Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks

今回はCVPR'18で提案されたWing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks1 (arXiv) という論文を紹介します。 ポイント 顔ランドマーク検出の損失関数として新たにWing Lossを定義 正面向き以外の画像をオーバサン…

顔ランドマークデータセットまとめ (AFLW, LFPW, COFW, 300-W, WFLW)

仕事で顔ランドマーク推定について調査・検証などを行い始めているのですが、各手法の学習・評価で使われているデータセットについてかなり混乱しました。 元々は何を目的として (= 評価したくて) 作られたデータセットなのか? ランドマークの点数や位置、…

yacsで実験パラメータを設定する

今回はyacsを用いたパラメータ管理について整理します。 yacs yacsはPythonコード + YAMLファイルで実験条件などのパラメータを管理できるようにするPythonライブラリです。 Pythonでyamlの設定ファイルを読み込むようなライブラリとしてはPyYAMLやruamel.ya…

Python: motoでS3・DynamoDB・SQSのモックを作る

AWSで稼働するアプリケーションのユニットテストを作るときに厄介なのが、依存しているマネージドサービスのモックをどうやって整えるかです。無しというわけにはいかないですが、unittest.Mockなどで自作するのもかなり大変です。 こうしたモックを簡単に作…

Python: サクッとカウンタを実装する (collections.Counter)

文字列のリストから単語の出現頻度をカウントする、といったケースはしばしばあるかと思います。 dictやdefaultdictで実装すると初期値0の設定が必要だったりしてちょっとめんどくさいです。 words = ["dog", "cat", "dog", "dog", "mouse", "cat"] # dictの…

Pythonの列挙型 (enum)

これまで定数クラスを作ってやり過ごすことが多かったのですが、enumが比較的使いやすかったので、 enum enumはPython 3.4から標準ライブラリに追加されたモジュールで、列挙型をサポートするものです。 docs.python.org 実装 最初にenumをインポートしてお…

SQSのメッセージを別のSQSへ転送するCLIツール sqstransfer をRustで作りました

SQSのメッセージを別のSQSへ転送するCLIツールを作って、crates.ioに公開しました。 https://crates.io/crates/sqstransfer GitHubでバイナリを公開してます。 github.com 使い方 こちらから自身の環境にあったバイナリをダウンロードいただくか、または、ca…

RustでSQSのメッセージを送受信する (Rusoto)

AWSのマネージドサービスのSDKライブラリの最右翼Rusotoの使い方を、SQSとのメッセージのやり取りを通して、ひと通り触れていきます。 Rusoto RusotoはAWSマネージドサービスの非公式SDKです。AWSの各サービスのAPIを叩くラッパ (バインダ) となっており、cr…

pandas小技: 複数の文字列のいずれかを含む (OR + 部分一致) 検索したい

例えば↓のテーブルから 東京都または千葉県 を含む値だけをフィルタする場合に、pandasではどう書くかです。 name 0 東京都葛飾区 1 神奈川県川崎市 2 埼玉県蕨市 3 千葉県蘇我市 pandasのstr.containsは正規表現パターンを含めることができます。 そのため…

Python: データ保持用のクラスを定義する (dataclasses)

DBのエンティティクラスを定義するときなど、データを持つことに特化した構造体のようなクラスが必要なケースがよくあります。 かつてはdict + typeやnamedtupleなどで用をなしてましたが、そういったクラスを簡単に定義できる標準ライブラリとして、Python …