precisionやrecallの値をクラス毎に出し、その平均を取りたいという場合、 precisionやrecallの計算式の分母が0になり計算できなかったらどうするか。
precisionやrecallの分母が0ということはPositiveと予測したものの数が0か、LabelがPositiveであるサンプルが0のどちらか。 その場合precisionやrecallを出しても意味が無いのでNoneにすべき。
参考:
precisionやrecallの値をクラス毎に出し、その平均を取りたいという場合、 precisionやrecallの計算式の分母が0になり計算できなかったらどうするか。
precisionやrecallの分母が0ということはPositiveと予測したものの数が0か、LabelがPositiveであるサンプルが0のどちらか。 その場合precisionやrecallを出しても意味が無いのでNoneにすべき。
参考:
Config.PARAM = "1"
のようにstaticな変数にパラメータを保持しているような場合、これを変更するテストコードがあると、そのテストコード以降に実行される別のテストコードがコケることがある。
他のテストに影響を与えないようにしたいので、fixtureを使ってテスト開始時にデフォルトの値に戻すようにした。
例えば、conftest.pyに以下のようにGlobal変数を初期化するglobal fixtureを定義する。
@pytest.fixture(scope="function", autouse=True) def global_vars_setup(): GlobalVars.init()
これでもテストを並列実行すると失敗することあるよなぁ。。もっと良い方法ないかな。
参考:
C#からPythonに画像ファイルを渡すとチャネルの並びがBGRになるという現象がおきた。 BitmapDataのデータをByte配列に変換し、先頭の要素の値を確認すると、RGB画像の先頭のピクセルの色の並びと違っていた。つまり、BGRになっていた。
以下のような記事もあるし、.NETの仕様なんだろう。
str()でlistをシリアライズしようと思ったときのこと。 各クラスの文字列表現を変更したかったので strを各クラスで実装し、listに詰めてstr(lst)のようにstr()に渡したがstrが呼ばれない。。 調べてみると、str(lst)はlstの各要素のreprを呼ぶらしい。lstはstr()でシリアライズしているのに。。
あと、f-stringで文字列化するときも文字列に埋め込んだ変数のreprが呼ばれるらしい。
しょうが無いのでreprに自前のシリアライズロジックを実装した。
get(cv2.CAP_PROP_FPS) や get(cv2.CAP_PROP_FRAME_COUNT) を実行すると1000とかデタラメな数字になる。 総フレーム数/FPSで動画の秒数になるかと思ったが、ならない。
これじゃあwmvをInputにして推論できないじゃん。。 3g2ファイルは大丈夫だった。
参考:
文字コードを適切に指定していなかったため。 例えば以下のように指定すると直る。
with open(config, 'rt', encoding='utf8') as yml: config_obj = yaml.load(yml)
参考: