日々精進

新しく学んだことを書き留めていきます

AI

ArcFaceを動かすと「Object arrays cannot be loaded when allow_pickle=False」エラー

AI

原因はnumpyのバージョン1.16.3からload関数の仕様が変わったため。 np.load('/path/to/file.npy', allow_pickle=True)のようにallow_pickle=Trueを追加するか、 numpyのバージョンを下げる。ただし、np.loadで悪意のあるファイルを読み込むと任意のコードが…

MS COCO形式のAnnotationのフォーマット

AI

以下にフォーマットとコードサンプルがあり参考になりました。COCO形式のAnnotationを生成するのは結構めんどい。。 qiita.com qiita.com

conda env create -f environment.yamlを実行してもpipのパッケージがインストールされない

AI

condaのパッケージはインストールされるのに、なぜ。。 ログは以下のような感じ。 Ran pip subprocess with arguments: ['C:\\Users\\name\\AppData\\Local\\Continuum\\miniconda3\\envs\\myenv\\python.exe', '-m', 'pip', 'install', '-U', '-r', 'C:\\my…

pip installでPermission Errorが出た場合は--userを付ける

AI

Permission Errorが出る原因は権限の無いところにパッケージを保存しようとしているからなので、 --userを付けてログインしているユーザの領域に保存するようにすればいい。 参考: pyteyon.hatenablog.com

良いモデルの探し方

AI

物体検出など特定のタスクを実行するモデルの探し方。 普通は「精度」「速度・メモリ使用量」がトレードオフになっているのでそのバランスが要件に近いものを探す。 基本方針は「自分で網羅的にモデルを探すのは難しいので、網羅的に調べている人の調査結果…

TensorFlowが使うCPUコアの数を制限する

AI

ユーザのPC上で推論する場合、CPUを使いすぎるとPC全体が重くなって ユーザビリティが下がるので、CPU使用率を制限したい。 CPU使用率の上限を指定することはできないが、TensorFlowが使う CPUコア数は指定出来るのでこれでPC全体が重くなることは避けられる…

CPU版のTensorRTはOpenVINO

AI

TensorRTを使って推論を高速化しようとしたところ、CPUでは使えないという情報が。。 forums.developer.nvidia.com www.reddit.com NVIDIAが作ってるからそりゃそうか。。 類似ソリューションを探したところ、OpenVINOというものをINTELが作っているらしい。…

軽い顔検出・顔認証モデルならMobileFaceNetとUltraLightFastGenericFaceDetectorがよさそう

AI

顔検出をUltraLightFastGenericFaceDetectorでやり、顔認証をMobileFaceNetでやるという流れ。 公式実装は以下にある。 github.com github.com これらを使って顔検出・顔認証をした実装が以下にあるのでこれをパクればお手軽に顔検出・顔認証ができる。便利…

pip install onnxを実行すると「ERROR: Command errored out with exit status 1 」エラー

AI

原因はonnxがPython3.8に対応していないことだった。Pythonを3.7にダウングレードしたら直った。 参考: github.com

物体検出モデルを取ってきて動かす時のサンプルコード

AI

model zooから取ってきたモデルを動かすコードを探していたところ、以下が見付かった。 これを参考にSSD MobileNetを動かしたらサクッと動いたので良かった。 github.com

pip install dlibを実行すると「cmake must be installed to build the following extensions _dlib_pybind11 windows」エラー

AI

原因はcmakeがインストールされていないこと。 pip install cmake を実行してから再度pip install dlibを実行すると直った。 参考: stackoverflow.com

import insightfaceを実行すると「ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'」エラー

AI

原因は pip install insightface を実行するとpip版のnumpyがインストールされるが、それではだめでconda版のnumpyを使わないといけないため。 以下を実行すると直った。 pip uninstall numpy conda install numpy 参考: github.com

SSD MobileNetV3のpretrained modelはmodel zooにある

AI

SSD MobileNetV3のpretrained modelを探していたが、意外と見付からなくて困った。 最終的には以下にあったものを使った。 github.com MobileNetV3という名前のモデルにはImageNetで学習したもの(=物体検出モデルではなく、画像分類モデル)もあり、混乱し…

windows環境でimport mxnetを実行すると「OSError: [WinError 126] 指定されたモジュールが見つかりません。」エラー

AI

原因はMXNETのバグ。mxnet-mklの1.4.0には以下で報告されているバグがあり、このエラーが出ていた。 github.com pip install mxnet-mkl==1.5.0 を実行し、1.5.0をインストールすると直った。

TF-TRTとTRTではTRTの方が速い(恐らく)

AI

TensorRT周りは色々ややこしい。。 TensorFlowに組み込まれたTensorRTがあり、これをTF-TRTという。 TensorRT(TRT)はNVIDIAが開発している深層学習を高速に推論するためのライブラリ。 TF-TRTはTensorRTが対応している部分のみTensorRT化して推論する。 ここ…

VBAで編集距離を計算するマクロ

AI

以下で紹介されているコードを使って編集距離計算できました。ありがたい・・ stackoverflow.com

pythonスクリプトのプロファイルを取ると「_generate_unique_filename」がボトルネックになっていた

AI

_generate_unique_filenameって何だ・・・と思っていたら、これはattrパッケージの中で定義されている関数で、 クラス定義に@dataclassが付いていると呼ばれるっぽい。 pydoc.net 以下のようなクラス定義がforループの中にあって何度も呼ばれると_generate_u…

draw.rectangleで矩形を描画しようとすると「TypeError: function takes exactly 1 argument (3 given)」エラー

AI

以下のようなコードでbounding boxを描画しようとするとエラーになった。 img = Image.open(img_path) draw = ImageDraw.Draw(img) draw.rectangle((bbox[0][0], bbox[0][1], bbox[2][0], bbox[2][1]), outline=(255, 0, 0), width=2) 原因はImage.openで読…

PyCharmでコードブロックを折りたたむ

AI

以下のようにregionコメントを入れるとPyCharmのエディタ上でコードを折りたためる。 #region ~をするコード ... #endregion ホントはコードが長くなってきたら別モジュールに分けた方が良いんだろうけど、この方法でもコードを見やすくできる。 参考: [htt…

PyCharmで別プロジェクトをattachすると「The project at … uses a non-standard layout and cannot be attached to this project」エラー

AI

原因は不明だが、以下で直った。 ※「The project at … uses a non-standard layout and cannot be attached to this project」というメッセージがダイアログに表示されたら、一度Yesを選択し、 その後attachするとAttachできる。それでもだめな場合はPyCharm…

pythonプログラム起動時に「ValueError: Unable to configure handler 'fileHandler'」エラー

AI

原因はloggerの設定でfileHandlerを定義していたが、ログファイルの出力先フォルダが存在しないこと。 以下のように設定している場合、/home/ec2-user/m5/logフォルダがないとエラーになる。もっと原因がわかりやすいエラーメッセージにしてほしい。。 handl…

集計はlong formatよりwide formatの方が速い

AI

long formatとwide formatについては以下参照。 www.theanalysisfactor.com long formatのDataFrameに対して以下のように商品毎の日別売上合計を集計したところ、53秒かかった。 sums: DataFrame = train.groupby(["item_id", "date"])[SALES_COUNT].sum() …

Pandasで最頻値を計算する処理は非常に重い

AI

以下のように、移動平均などを計算しようとしたらすごく時間がかかっていたので速くしようとした時の話。 agg = sales[SALES_COUNT].astype("float32").shift(shift).rolling(window) \ .agg(["mean", "max", "min", "std", lambda x: x.mode()[0]]) \ .rese…

DataFrame.groupbyでcategory型の列を指定すると、データの中に存在しないカテゴリの集計結果も出力される

AI

状況は以下。 df = df.query("store_id == 'CA_1') # store_id はCA_1, CA_2などがある df.groupby('CA_1').sum() #=> dfにはCA_1しかないのにCA_2の集計結果の行もできてしまう 以下のようにobserved=Trueオプションを指定すると直る。この挙動をデフォルト…

pandasでmulti indexになっているときにindexの列で絞り込む

AI

以下のようにget_level_valuesメソッドでindexのうち一つの列を選択してmaskをかけられる。 mask: Series = self.features.index.get_level_values(1) == pred_date self.features.loc[mask, SALES_COUNT] = pred[PRED_SALES_COUNT] multi indexはほんとは扱…

pytestのassertはlist同士の比較もできる

AI

listの中の値をassertしたい場合でもassert ==で検査できる。配列やtupleが入れ子になっていても大丈夫。 assert actual == [1, 7, ["平均", "mean"]] 以下によるとunittestではTestCase.assertItemsEqualとか使わないといけないっぽい。pytestは楽だなあ。 …

DataFrameの処理を並列化すると非常に遅くなることがある

AI

例えば、以下のようにグループ毎に集計する処理の場合 sums: DataFrame = train.groupby(ids)[SALES_COUNT].sum() 以下のようにするとグループ単位で並列化できるので速くなりそうに思える。 def func(df): return df[SALES_COUNT].sum() ret_list: List = P…

DataFrame.locで複数列を一度に代入できない

AI

以下のようなコードで、あるDataFrameの4つの列に別のDataFrameの値を代入しようとしたが、できなかった(代入してもsalesの値がNaNのまま) sales.loc[mask, [SALES_COUNT_MA14, SALES_COUNT_MMAX14, SALES_COUNT_MMIN14, SALES_COUNT_MS14, SALES_COUNT_MM…

docker runを実行すると「ERROR: for Cannot start service : OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"process_linux.go:385: running prestart hook 1 caused \\\"error running h

AI

原因はGPUの無いマシンでdocker-compose.yamlに runtime:nvidia と書いた状態でコンテナを起動しようとしたことだった。 runtime:nvidia を削除すると直った。

PythonでPath.mkdirを実行すると「UnicodeEncodeError: 'ascii' codec can't encode character」エラー

AI

原因はmkdirの中でOSのデフォルトエンコーディングに従ってmkdirに渡したpath文字列をエンコードしているため。 CPython実装を見ると、Py_FileSystemDefaultEncodingに従ってエンコードしているように見える。 cpython: 54c93e0fe79b Modules/posixmodule.c …