画像の一部をマスクするオーグメンテーションのまとめ (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 …

Python: バイナリデータを入出力したい (struct)

お仕事でバイナリのセンサデータをPythonで入出力する必要がありましたので、標準ライブラリ struct について整理します。 struct structは、Pythonの値 (int, double, charなど) とCの構造体 (Pythonではbytesオブジェクト) を相互変換するためのモジュール…

RustモジュールをPythonから実行する (PyO3)

最近少しずつRustに手を出し始めています。 CPUバウンドとなっている重い処理をPythonから切り出してコンバートするユースケースを考えたときに、PythonからRustを呼び出すための仕組みが必要となります。 今回はPythonからRustバイナリを実行する (あるいは…

torchtextを使った自然言語処理タスクの前処理

PyTorch: DatasetとDataLoader (画像処理タスク編) - け日記 にてDatasetとDataLoaderの使い方を紹介しました。 今回は自然言語処理のにフォーカスし、torchtextを使った自然言語処理 (NLP) タスクの前処理について整理します。 NLPタスクの前処理 大別する…

Python: 抽象クラスを実装する (abc)

お仕事のPythonコードを読んでいて、抽象基底クラス (abstract base class: ABC) で実装されているクラスがありました。そういえば使ったことがなかったので、この機に整理しましたのでその覚書です。 $ python --version Python 3.6.8 Pythonでは抽象基底ク…

Python: 辞書の値を属性参照する (AttrDict)

辞書の値を属性参照 (dic["key"] ではなく dic.keyでアクセスする) したいケースがしばしばあります。JSON形式の設定ファイルを読み込んで、オブジェクトの初期化に使うなどです。 そんなときに便利なAttrDictを紹介します。 typeを使えば良いのでは? 組み…

Python: subprocessでOSコマンドを実行する

ちょっとしたツールのためにPythonからGitやDockerなどのコマンドを実行してゴニョゴニョする、ということはよくあるかと思います。 OSコマンドを手軽に実行するPython標準ライブラリ subprocess で頻用する機能について使い方を整理します。 docs.python.or…

Amazon EKSでコンソール画面からKubernetesクラスタを作成する

年末年始にかけてKubernetesを少しだけインプットしてました。ローカルで環境を整えるのもしんどいし、現実的な利用も考えにくいので、Amazon EKS上でクラスタを作成して動かしてました。 今回はAWSコンソールからクラスタを作成する方法についてまとめまし…

AWS Inf1でPyTorchモデルの推論を行う

AWSの推論環境の新たな選択肢として登場したInf1インスタンスを使い、PyTorchのモデルをコンパイル・推論させてみます。 概ねチュートリアル (https://github.com/aws/aws-neuron-sdk/blob/master/docs/pytorch-neuron/tutorial-compile-infer.md) をなぞっ…

PyTorch: DatasetとDataLoader (画像処理タスク編)

引き続きPyTorchのお勉強です。 画像処理タスクの文脈でDatasetとDataLoaderの使い方を整理していきます。 DatasetとDataLoader PyTorchに限らず、ディープラーニングタスクのデータの入力については、一般的に以下の要件が挙げられます データをミニバッチ…

どうすれば自分の身に付く技術ブログになるのか

この記事は write-blog-every-week Advent Calendar 2019 の24日目の記事です。ポエム枠です。 adventar.org 2016年12月のアドベントカレンダーからスタートして、週1投稿を3年間継続してきました。投稿を通して技術的なトピックを幅広く学んできました。ま…

PyTorchのモデルをTorchScriptへ変換する

引き続きPyTorchのお勉強してます。 今回はPyTorchで計算資源を有効活用した推論を行うための仕組みの1つTorchScriptについてまとめます。 TorchScriptとは TorchScriptはPyTorchの中間表現 (intermediate representation) コードとその変換機構です。 主な…

PyTorchでネットワークを実装する

引き続きPyTorchのお勉強中です。 前々回はテンソル、前回は誤差逆伝播について見ていきましたが、今回はtorch.nnのモジュールを中心にネットワークの作り方について整理していきます。 前回より少し難しくして、2次関数 (w=4.5, b=7.0, εは誤差) を例にして…