matsken

機械学習をやろうとしたらデータクレンジングに明け暮れていた件(2) ~大量のファイルを分割アーカイブする~

技研のまつけんです。

前回の記事では、複数のアーカイブを展開してファイルやフォルダの名前の傾向を調べる過程を紹介しました。今回は、その逆の「多数のファイルを分活してアーカイブする」ためのシェルスクリプトを紹介したいと思います (前回の「まとめ」では違う予告をしましたが、その前に今回の作業をする機会があったので、先に記事にしました)。

自分がデータクレンジングしたものを誰かに渡すことがあります。その際、メールで送るにしてもサーバに置くにしても、再びアーカイブ (+圧縮) すると便利なのですが、数ギガバイトのzipやtgzだと色々と不便です。そこで、分割してアーカイブしたくなります。それを実現するのに、真っ先に思いつく方法は、a、b、cという3つのフォルダがあるのであれば (そして、3つのフォルダ内のデータ量に偏りが無いのであれば)、

のように

  • aで始まるものは、a.tgz
  • bで始まるものは、b.tgz
  • cで始まるものは、c.tgz

としてしまうことでしょう。

続きを読む

Officeドキュメントはどこまでスクリプトで自動編集できるのか? (1) ~画像のトリミング~

技研のまつけんです。

報告書やプレゼン資料などを作成していると、単純な作業の繰り返しが発生することが多々あるかと思います。そういうときは「自動化したい」と思ってしまう性格なので、ときどき自動化したりしています。今回は、PowerPointのファイルをcygwinの bashのシェルスクリプトで処理することで、自動的に画像のトリミングをしてしまおうという記事です。記事中のシェルスクリプトは全て、Windows 10 + Cygwin + bashで動作確認をしています。

続きを読む

Python用ライブラリ用のwrapperを作って使っている話

技術研究所 (技研) のまつけんです。

Python用のライブラリには、cv2 (OpenCV)、numpy (NumPy)、pandas (Pandas)などがあります。大抵のことが出来るので大変便利なのですが、引数の与え方などで不便を感じることがあります。そこで、今回は、私が普段、それらのライブラリをwrapするのに使っているサブルーチンを紹介したいと思います。

OpenCV用 (wrap_cv2.py)

色の定義

頻繁に利用する色 (無彩色、原色、補色) を定義します。OpenCVはRGBではなくBGRが基本なので、その順番となっています。

続きを読む

機械学習をやろうとしたらデータクレンジングに明け暮れていた件(1) ~フォルダ・ファイル名の傾向と対策~

技術研究所のまつけんです。

今回はデータクレンジングの話です。データクレンジングというのは、データを機械学習に流し込む前に全体的に眺めて、必要なら整形する作業です。KaggleやSIGNATEなどのコンテストではクレンジングされた状態のデータが提供されますが、実際の業務では、必ずしもそうとは限りません。そして、それはデータの中身に限った話ではありません。フォルダやファイルの名前が一定の規則に従ってない場合、それを規則的な名前にするところから始まります (規則的な名前でないとループなどで処理したりするのに不便です)。

機械学習に使う大きなデータをよそから転送する際、たいてい、DVDやアップローダなどで受け取ります。後者の場合はzipなどでアーカイブ (および圧縮) されていることが多いのですが、zipファイルが数十個ある場合もあります。今回の記事では、転送したデータを確認し、フォルダ名、ファイル名などを扱いやすい形に変換する過程について、説明します。データ数が膨大な場合を想定していますので、多くはbashスクリプトにより自動化しています。といっても、UNIX/Linuxをインストールする必要があるわけではありません。今から紹介する手法はcygwin上で行うことを想定しています (スクリプトは全てcygwinのbashで動作確認しています)。

今回は、機械学習用のデータについて、フォルダ構成を確認し、必要に応じて整形する手順を紹介したいと思います。

続きを読む

シンボリック・リンクを用いた分析対象データの管理ノウハウとシェルスクリプト

技術研究所のまつけんです。

技術研究所 (技研) では、画像 (静止画) データや動画データを分析対象として扱います。その際、分析対象のデータを間違えて消してしまったり、書き換えてしまったりすると大変です。今回は、私が実践している「間違いが起きない仕組み」について紹介したいと思います。具体的には、

  • オリジナルファイルを入れたディレクトリは書き込み禁止にし、
  • その隣に作業用ディレクトリを作成し、
  • オリジナルと同じディレクトリ構造を作り、
  • オリジナルファイルへのシンボリック・リンクを作成

します。もちろん、手作業でも出来るのですが、オリジナルファイルが多数ある場合などには自動化しないと大変です。そこで本記事では、そのために作成した、複数のファイルやディレクトリを扱うシェルスクリプトと、その作り方も紹介します。

続きを読む

Jupyter NotebookからGPUの占有状況をワンタッチで調べる

技術研究所(技研)のまつけんです。

技研では現在、2台のゲーミングデスクトップPCにLinux (Ubuntu)とJupyterをインストールして、共有で計算サーバとして使っています。2台のPCにグラフィックボードが2枚ずつ搭載しているのですが、技研メンバ全員が使うので、GPUやGDDR RAMなどのリソースの順番待ちが発生します。

グラフィックボードのステータスはnvidia-smiコマンドで確認するのですが、タスクの詳細(オーナなど)については、別途psコマンドなどで調べる必要があります。そこで今回、nvidia-smiコマンドの結果から自動的にpsコマンドで詳細を調べるシェルスクリプトを作ってみました(nvidia-smiのバージョンが450の場合は、awk ‘{print $5}’ ):

続きを読む

Jupyter Notebook上でソースコードのバージョン管理する

技術研究所(技研)のまつけんです。

技研では現在、3台のゲーミングデスクトップPCにLinux (Ubuntu)とJupyterをインストールして、共有で計算サーバとして使っています。私も、画像処理や機械学習のタスクをJupyterで行っています。また、開発中のソースコードなどはSubversionで管理しています。今回は、私が実践しているJupyter上でのソースコードのバージョン管理の手法について紹介したいと思います。

続きを読む

OpenCVでレシートを適切なサイズに縮小する

技術研究所 (技研) のまつけんです。

リモートワークが増えたことで、会社に領収書やレシートの写真を提出することが多くなりました。紙のレシートを、スキャナやスマホで電子化する (画像ファイルにする) と、不必要に高精細な画像になってしまうことが多いように感じます。そこで、今回は、レシートの写真を自動で、文字が判読できる範囲内で縮小する (解像度を落とす) Pythonプログラムを作成してみました。機械学習などは使わず、OpenCVとNumPyだけで画像処理によって実現しています。

続きを読む

機械学習用の計算サーバ構築手順を纏めてみた

技術研究所(技研)のまつけんです。

技研では現在、2台のゲーミングデスクトップPCにLinux (Ubuntu)とJupyterをインストールして、共有で計算(主に機械学習)サーバとして使っています。最近、計算量が増えてきたので、近いうちに3台目を購入し、セットアップする予定です。また、休眠状態だったゲーミングラップトップPCがあったので、一足先にセットアップして計算サーバ化しました。この記事では技研で確立した「機械学習用の計算サーバ構築手順」を紹介したいと思います。OSはUbuntu Server 20.04 LTSです。

※ここに記載されいてる情報は2020年9月現在のものです。また、今回のセットアップ対象は、DELLのゲーミングラップトップG5[1]です。

続きを読む

DIYもアジャイルで ~ぼくがかんがえたさいきょうのざいたくきんむかんきょう (1)

技術研究所 (技研) のまつけんです。

新型コロナの影響で、相変わらず在宅勤務中心の生活が続いています。今回は、2×4と1×4の木材を使って、私が自宅に構築した「最強の在宅勤務環境」について紹介したいと思います。

これまで2年近く、下の図のような環境でPCを使っていました (突起物、配線などは省略、図の見易さを優先するため、実際の配置とは微妙に異なる):
続きを読む