yiskw note

機械学習やプログラミングについて気まぐれで書きます

python

【Python】特定の行だけBlackによるコード整形を行わないようにする

概要 PythonのPEP8準拠のコードフォーマッターとして、Blackが有名です。 Blackは、他のフォーマッターよりもカスタマイズ性が低く、制限が多いです。 その代わり、コードの書き方が統一されるので、細かい書き方で議論したり、悩んだりする必要がなくなり、…

【Python】定数管理のための、値の追加・変更を不可にするクラスを実装する

概要 機械学習の実験を回していると、しばしば複数の定数を管理したくなることがあります。(例えば、実験を回すマシンごとのデータセットのパスなど) Pythonでは、他のプログラミング言語のconstのような定数がサポートされていません。 PEP8の慣例に従って…

【numpy】特定の範囲だけにseedを設定する

概要 最近、numpyの配列をとある方法でシャッフルする関数を実装していたのですが、 与えたseedの値によってシャッフルの仕方が固定されるようにしたいと考えていました。 np.random.seedをシャッフルの処理の前に挟んでやれば、必ず同じシャッフルの仕方に…

【Python】boxに公開されているデータを一括ダウンロードする

概要 行動認識などの動画データセットは、youtubeから動画をダウンロードするのが一般的ですが、 稀にboxなどで提供されていることがあります。 軽量なファイルであればweb上で一括ダウンロードが可能なのですが、動画などのサイズが大きいファイルがあると…

【Python】Factory / Factory Method / Abstract Factory の違い

概要 今回は、オブジェクトの生成方法に関するデザインパターンである、 Factory パターン、Factory Method パターン、Abstract Factory パターンの違いについてまとめました。 これらは混同やすく、自分も違いをしっかりできていなかったのですが、 最近や…

Weekly Digest #1

最近忙しく、ブログなどを更新する余裕がなく、アウトプットの量がめっきり減ってしまいました。 このままでは良くないと思い、週一回のペースを目標に細々とアウトプットできればと思っております。 そこで簡単ではあるのですが、その週に自分が読んだ記事…

【Python】MonkeyTypeを活用して型アノテーションを自動で追加する

MonkeyTypeとは 今回は、Pythonの型アノテーションを自動で付与するMonkeyTypeを使用してみました。 MonkeyTypeは、実行時の引数や返り値の情報から、自動でスタブファイルを生成したり、型アノテーションを追加してくれるライブラリです。 ※ スタブファイル…

【Python】1行で複数の変数に同時に値を代入するのは遅い

概要 ネットでPythonの記事を読んでいると、以下のような1行で複数の変数に同時に値を代入する方法が速いという記事を見かけました。 a, b, c = 1, 2, 3 こちらについてちょっと怪しいなと思い、速度の比較、及び速度差の原因について調査してみました。 結…

【Python】プログラムの終了時に実行する関数を登録できるatexit

概要 今回はPythonの標準ライブラリであるatexitについて調べてみました。 非常に便利なライブラリですが、あまり日本語の情報がなかったので、こちらにメモを残しておきます。

【Python】list / array / numpy.array を比較してみた

概要 最近、Pythonの標準ライブラリにarrayというデータ型があるのを知りました。 今回は、このarrayの勉強も兼ねて、Pythonのlist、arrayとnumpy.arrayの3つを速度、メモリの観点から比較し、それぞれの使用用途について検討してみました。 その結果を備忘…

【Python】wemake-python-styleguideでコードを厳しくチェックする

概要 Pythonのlinterであるflake8を用いることで,コードの品質を担保するために静的解析を実施することができますが, 今回はそのflake8のプラグインであるwemake-python-styleguideというものを使ってみました. 公式ドキュメントによると, Welcome to th…

【Python】__main__.pyを理解する

__main__.pyとは Pythonでは__main__.pyというファイルを定義することで, python -m <MODULE_NAME>を実行した際の挙動を定義できるようです. ※ -mオプションはモジュールをスクリプトとして実行するオプション 例えば以下の例を見てみます. ディレクトリ構造 . ├── mod</module_name>…

【Python】リストから大きい/小さい順にn個の要素を取り出す

Pythonの標準ライブラリであるheapq.nlargest / heapq.nsmallestを使用することで, リストから簡単に大きい/小さい順にn個の要素を取り出すことができます. import heapq import random a = [random.randint(0,1000) for _ in range(10)] print(a) # [326,…

【Python】変数の型以外のメタ情報をアノテーションするtyping.Annotated

はじめに 今回はtyping.Annotatedを用いて,変数に型以外のメタ情報もアノテーションする方法について調べたので,こちらにメモを残しておきます. こちらを使うことで,より可読性の高いコードが書けるようになります typing.Annotatedとは typing.Annotate…

【OpenCV】画像からマウスでバウンディングボックスを選択して保存する

概要 最近機械学習モデルの学習用に画像データを収集しているのですが, その際,画像に写っている物体のみを切り取って保存したい状況がありました. 今回はこちらをOpenCVを使用して実装してみたので,メモを残しておきます. 今回実装したコードはこちら…

【Pandas】DataFrameを綺麗に整形されたStringに変換するtabulate

概要 PandasのDataFrameをStringに変換する方法として,DataFrameのto_stringメソッドを使用する方法(参考)があげられますが, こちらで出力される結果は見にくく,別の方法がないかと探しておりました. そこでDataFrameを綺麗に整形されたStringに変換でき…

Docker + Pythonを使用したGitHub Actionを自作する

概要 Github Actionsで使用できるActionを自作する方法について調査してみました. Actionを自作できると,複数のワークフローや他のレポジトリなどActionを使い回すことができ,非常に便利です. 今回はDockerを使用してGithub Actionを自作する方法につい…

【Python】二分探索を実装する

久しぶりに競技プログラミングの問題を解き始めました. 結構忘れているところもあるので,復習がてらアルゴリズムの実装をメモして行こうと思います. 今回は二分探索です. 普段使う分にはbisectというライブラリを使えば良いのですが(参考), 今回は一か…

GitHub ActionsからSeleniumを実行する

概要 今回はGitHub ActionsでSeleniumを実行する方法について調べたので,メモを残しておきます. 実装したコードは,こちらに公開してあります.

【JupyterLab】jupyterlab-tabnineで405 POST errorが出てしまう

[W 2021-12-31 18:29:29.132 ServerApp] 405 POST /tabnine?1640942969123 (::1) 3.03ms referer=http://localhost:8888/lab JupyterLabでTabnineをインストールし,使用しようとしたところ, 上記のような405 Postエラーが出て,Tabnineによる補完も効きか…

JupyterLabの環境構築+カスタマイズをする

概要 今更感がすごいですが,年末年始の休みを利用して,Jupyter NotebookからJupyter Labに移行してみました. その際の手順をこちらにメモとして残しておきます.

【Python】Banditを使用して,コードのセキュリティ上の問題を検知する

概要 今回はPythonのStatic Application Security Testing (SAST)を実施してくれるツールであるbanditを使用してみました. banditを用いることで,Pythonのコード上に潜むセキュリティの問題を検知することが可能です. またpre-commitで使用することもでき…

【Python】画像スクランブルを実装する

概要 画像のピクセルを並び替えることで,視覚的に認識ができない画像に変換する画像スクランブルについて調査してみました. またPythonを用いて画像スクランブル,及び画像の復元まで実装してみたので,こちらにメモを残しておきます. 実装はこちらにて公…

Jupyter Notebookの'_xsrf' argument missing from POSTというエラーを解消する

Jupyter Notebookを長時間使用していたところ,以下のようなエラーが発生し,notebookが動作しなくなってしまいました. [W 15:04:04.400 NotebookApp] 403 PUT /api/contents/Untitled.ipynb (::1): '_xsrf' argument missing from POST 原因についてはあま…

【numpy】opencvで読み込んだ画像を縦・横方向にシフトさせる

概要 opencvで読み込んだ画像を縦・横方向に移動させる方法について調べたので,こちらにメモを残しておきます. またその際に,はみ出た部分については無視するような処理についても検討してみました. これを行うことでCutMixのような前処理を実装すること…

pdoc + GitHub Actionsを使用して,ドキュメントを自動でGitHub Pagesに公開する

概要 Pythonのdocstringからドキュメントを生成するライブラリに,sphinxなどがありますが, 今回は手軽にドキュメント生成ができるpdocというライブラリを使用してみました. pdocとGitHub Actionsを使用して,ドキュメントを自動更新し,GitHub Pagesに公…

【Gradio / PyTorch】YOLOXで物体検出を行うデモアプリを作る

概要 今回はGradioでYOLOXを用いた物体検出を行うデモを作成してみます. 今回使用したコードはこちらで公開しています. Gradioを用いた他のデモについてもメモを残しておりますので, よければ以下の記事をご覧いただけたらと思います. yiskw713.hatenabl…

【Gradio / PyTorch】Gradioでセマンティックセグメンテーションを行うデモアプリを作る

概要 今回はGradioでセマンティックセグメンテーションを行うデモを作成してみました. こちらのデモを使用することで,簡単にセマンティックセグメンテーションを試すことができます. 今回使用したコードはこちらで公開しています. Gradioの簡単な使い方…

【Gradio / PyTorch】Gradioで画像の前処理を可視化するデモを作る

概要 今回はGradioで画像の前処理を可視化するデモを作成してみました. こちらを使用することにより,前処理のパラメーターの影響度合いを確認や, 自作の前処理の動作確認などが非常に容易になります. 今回使用したコードはこちらで公開しています. Grad…

【Gradio / PyTorch】Gradioで画像分類を行うデモアプリを簡単に作る

概要 Gradioを用いた画像分類アプリ.※猫の写真はK LによるPixabayからの画像 機械学習モデルのデモアプリを作成したいと思っていたところ, Gradioというライブラリを見つけました. Gradioを使用することで,たった数行のpythonコードで簡単にデモを作成で…