日々精進

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

2021-01-01から1年間の記事一覧

画像分類・物体検出において、背景を物体と認識してしまう問題

AI

画像分類・物体検出のアノテーションは矩形の枠とラベル(人・犬など)で付ける。 なので、人のアノテーションにはどうしても人の後ろの壁など人以外の部分も含まれてしまう。 そうすると、その壁などもモデルは人の一部であると見なして学習してしまう。 そ…

Deep Learningでは基本乱数は完全には固定できない(なので全く同じモデルは作ることが難しい)

AI

乱数のseedを固定すれば同じInputに対して、同じ推論結果を返す重みファイルが生成できるはず・・と思っていたが、そうではないらしい。 乱数の固定の仕方は以下参照。 qiita.com これを設定しても、cuDNNの中の乱数は固定できないらしい。TensorFlowではこ…

conda create, removeを繰り返すと.conda_trashファイルが増えていく問題

AI

現象は以下。 conda create, conda removeでconda環境の作成・削除を繰り返すとpip3.exe.conda_trash, pip3.exe.conda_trash.conda_trash, ...のように.conda_trashがconda createを実行した回数だけ繰り返すファイルができる これによって超長いファイル名…

Log4jの任意のコードが実行出来る脆弱性の影響範囲

IT

今日知ったLog4jの脆弱性について調べたことを書きます。 脆弱性を修正したPR github.com 影響範囲 log4j2の影響を受けるバージョンは以下の記事によると、2.0 <= Apache log4j2 <= 2.14.1 www.cyberkendra.com log4jバージョン1も影響を受けるというコメン…

iPhoneのUDIDを調べる方法

IT

ググるとiTunesを使う方法などが出てくるが、それは古いっぽい。 以下で紹介されている、Finderで調べる方法をやってみると確認できました。 apptopi.jp

PyCharmでSSH Interpreterを使っている時に、リモートホスト上でターミナルからinstallしたpackageをPyCharmにダウンロードさせる方法

AI

sshでリモートホストにログインし、pip installでpackageをinstallした後、ライブラリの更新操作をPyCharm上でやるとダウンロードしてくれる。今までInvalidate Cache&Restartを実行して全部のライブラリをダウンロードし直してた。。 やり方は以下参照。 tk…

Pythonで複数の環境で共有したい、けどpipなどのpackageにするほどでもないコードの共有

AI

「複数の環境」と言っているのは、例えば機械学習で言うと前処理、学習、精度検証のようなイメージ。 そういう環境で、ある程度実装も実行環境も分かれているけど一部の実装を共有したい場合どうするか。 pip packageにすると修正したらアップロードとインス…

tfliteで推論すると「RuntimeError: There is at least 1 reference to internal data」エラー

AI

原因はわかっていないが、再実行したらエラーが出なかった。なぜだ・・

multiprocessing.Poolは各ProcessにGlobal変数をコピーする

AI

マルチプロセスなので当たり前なんだけど、Pythonのmultiprocessing.Poolを使って複数プロセスで並列処理をする時にGlobal変数はそれぞれのプロセスにコピーされる。 なので、以下の例だとmy_funcの中でGlobal変数を変更しても他のプロセスには影響しない。 …

Pythonでオブジェクト==で比較すると「{ValueError}The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()」エラー

AI

発生条件は以下。 @dataclassの付いたclassのオブジェクトを==で比較する そのclassのインスタンス変数にnumpy.ndarrayがある 原因は以下。 @dataclassで自動生成されるeqメソッドは、そのクラスのフィールドからなるタプルを比較する 参考: docs.python.or…

Pythonスクリプトを実行すると「ImportError: cannot import name」エラー

AI

原因は色々ありうるが、今回は同じフォルダ名が複数あることだった。つまり、以下のようなフォルダ構成になっていて root/aとroot/bをPYTHONPATHに追加していた。 root/a/common/a.py root/b/common/b.py そうするとa.pyをimportしようとするとそんなモジュ…

学習中に突然学習が止まる

AI

以下のようなメッセージを残して学習が止まることがあり、困った。 train.sh: line 27: 32529 Killed 原因はOOMだった。 dmesg -T| grep -E -i -B100 'killed process' 上記コマンドを実行すると、以下が表示され、OOMでプロセスが殺されたことが分かる。 [F…

conda env createでyamlを指定しconda環境を作る時にpycocotoolsが含まれていると「ModuleNotFoundError: No module named 'Cython'」エラー

AI

pycocotoolsのsetup.pyがCythonなどをimportしているためエラーになるっぽい。 ホントはやりたくないが、以下のようにyamlに含めず後からpip installでインストールするようにした。 conda env create -f=/root/environment.yaml conda activate myenv pip i…

AWSでどのGPUインスタンスを使えば良いかが分かる資料

AI

GPUインスタンスの種類が多すぎて何を使えば良いかわからない・・と言う場合、以下を参考にするといいかも。 towardsdatascience.com ユースケース別にオススメのインスタンスタイプがかかれていて参考になりました。 ただ、2020年6月の記事なのでちょっと古…

TensorFlowで学習を実行すると「failed call to cuInit: CUDA_ERROR_NO_DEVICE」エラー

AI

原因はGPUが1つしかないのに export CUDA_VISIBLE_DEVICES='1' が環境変数に設定されていたため。 export CUDA_VISIBLE_DEVICES='0' に変更すると直った。 参考: qiita.com また、問題の切り分けのために、以下を実行してtensorflowからGPUが見えているかを…

Pytorchのtorch.cuda.Stream()を実行するとそれ以降PyCharmのDebugger windowで変数の値が見えなくなる

AI

変数の値を見ようとするとCollecting data...と表示されるだけで値が見えなくて困った。 PyCharmの設定でGevent compatibleをONにすると直った。詳細は以下参照。 stackoverflow.com なぜこれで直るか全然分からないがすごく助かった・・・ただし、このオプ…

pycocotoolsを使うと「ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject」エラー

AI

pycocotoolsが依存しているnumpyのバージョンが1.20以上だが1.19以下がインストールされていることが原因。 でもtensorflowが1.19.5に依存していて、1.20以上を入れることができない。。 なのでpycocotoolsのバージョンを2.0.0にダウングレードして回避した…

YOLOXの学習を実行すると「RuntimeError: falseINTERNAL ASSERT FAILED at "../aten/src/ATen/MapAllocator.cpp":300, please report a bug to PyTorch. unable to write to file </torch_4492_0>」エラー

AI

原因はshared memoryの容量が足りないこと。学習環境のdocker composeに以下を追加すると直った。 shm_size: '16gb' 参考: Unable to write to file </torch_18692_1954506624> - #6 by gaily_sun - PyTorch Forums

conda runを実行すると「CommandNotFoundError: No command 'conda run'.」エラー

AI

conda runコマンドは壊れたので4.10.0で削除されたらしい。まじか。。 conda runコマンドがあるバージョンのcondaをインストールして解決した。 参考: github.com

SageMaker PipelinesのStepのOutputに「ClientError: Cannot access S3 key.」と書かれていてもS3にアクセス出来ないことが原因でないことが多い

AI

Pipeline実行がエラーになり、エラーになったStepのOutputを見行くと、以下のメッセージが表示されていた。 This step failed. For more information, view the logs. ClientError: Cannot access S3 key. が、結論としてはS3がエラーの原因ではなかった。上…

SageMaker ProjectのPipelinesタブに自分で作ったPipelineを表示させる

AI

Pipelineのタグを以下のように設定すれば表示される。タグはsagemaker sdkのPipelineクラスのcreate, upsertメソッドの引数で渡せる。 sagemaker:project-name: , sagemaker:project-id: projectとpipelineの紐付け方がわからなかったが、tagで紐付けている…

SageMaker PipelineをCLIから削除する

AI

SageMakerStudioから削除する方法が見付からなかったのでCLIから削除した。 以下のコマンドで削除できる。 aws sagemaker delete-pipeline --pipeline-name pjname 参考: docs.aws.amazon.com

「pycocotools/_mask.pyx ValueError: numpy.ndarray size changed, may indicate binary incompatibility.」エラー

AI

原因はnumpyのバージョンが古いことで、1.20.1以上にすれば直るっぽいが TensorFlowが1.19.5に依存しているのでnumpyのバージョンを上げられない・・ stackoverflow.com しょうがないのでpycocotoolsを使わずアノテーションファイルのparseを独自実装するこ…

SageMakerで学習をしている時のTensorBoardを表示する

AI

Estimatorのinitにtensorboard_output_configという引数があるので、これを設定するとtensorboardのログをS3にアップロードしてくれそうだけど、してくれなかった。。 以下で同じ問題で困っている人がいるけど解決してないっぽい。 stackoverflow.com しょう…

pythonプログラムを実行すると「ImportError: libSM.so.6: cannot open shared object file: No such file or directory」エラー

AI

以下のサイトで紹介されている方法で直りました。 参考: omohikane.com

pythonスクリプトを実行すると「ImportError: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory」エラー

AI

export LD_LIBRARY_PATH=/path/to/conda/envs/your_env/lib で直る 参考: github.com

sshでアクセスすると公開鍵認証してほしいのにパスワードを聞かれる

IT

ssh hostname -vvvTを実行すると以下のログが出る。 debug1: Trying private key: /c/Users/username/.ssh/mykey.pem debug3: sign_and_send_pubkey: RSA SHA256:nQr29X+3juJvSWOedeEVmgKCZgaO169LKCvAZCKkFKM debug3: sign_and_send_pubkey: signing using …

tf.keras.load_modelでモデルを読み込むと「ValueError: Unknown loss function」エラー

AI

学習時にcustom loss functionを使った場合、load時も同じ関数をcustom_objectとして渡してやらないといけないらしい。 ただ、再学習するのではなく推論するためにmodelをloadするのであれば以下のようにcompile=Falseを指定してやればOK。 model = load_mod…

Chromeが重くなった時の対処法

IT

普段はアドレスバーに「chrome://restart」と打って再起動すると軽くなるが、これやってもだめな時があった。 そんなときはタスクトレイの中のChromeアイコンを右クリック→終了を選択してからChromeを起動すると軽くなった。 Chrome重いとかなりストレスフル…

縦横が混在したPDFを一括で印刷する

IT

縦向きと横向きのページが混在しているPDFをChromeで表示して印刷すると、 すべて縦向き、またはすべて横向きで印刷するので一部のページが見きれる・・ なのでまず縦向きのページを印刷して、その後横向きのページを印刷するとか面倒なことをしていた。 Acr…