yiskw note

勉強したことや日々の生活について気まぐれで書きます

Don't Judge an Object by Its Context: Learning to Overcome Contextual Biasを読んだのでメモ

概要

image

既存のモデルは,物体とそのコンテキストの共起性を活用することがあるが,あまりコンテキストに頼りすぎるとコンテキストがない場合に認識できない(上図). 本研究では,コンテキストとカテゴリの特徴表現の相関を減らすことを目的とし,これを実現するためにコンテキストとカテゴリを表現するjoint spaceと一緒に,カテゴリmにみを表現するsubspaceを学習する. 物体分類と属性分類のマルチタスク学習において,精度の向上を確認した.

続きを読む

Removing the Background by Adding the Background: Towards Background Robust Self-supervised Video Representation Learning

動画中の人物行動認識において,背景だけを見て行動分類をしてしまうBackground Cheatingが問題となっている.Background Cheatingをしてしまうと,例えばサッカー場でバク転を行うなど,動きの状況を見ていないと正しく行動を分類できない動画に対応できない.

そこで本研究では,Background Cheatingを軽減するための,self-supervised learningの手法である,Background Erasing (BE)を提案している. 提案法を用いることで,バイアスのあるデータセットであるUCF101やHMDB51や,バイアスの少ないデータセットであるDriving48において精度向上を確認した.

続きを読む

Pulling Actions out of Context: Explicit Separation for Effective Combinationを読んだのでメモ

概要

動画認識において,現状のシステムでは人間の行動と,それに付随する有意な要因(物体や背景など)の分離がうまくいっておらず,行動認識の結果が背景に影響を受けてしまうことがある.

そこで本研究では,行動を含む動画とコンテキスト(背景,物体,カメラモーションなどあらゆる視覚情報)が似ているが行動を含まない動画(conjugate sample)からの情報を活用することで,追加のアノテーションなしで,人間の行動とコンテキストの情報を分離する手法を提案.

image

続きを読む

pytestでloggingのログ出力をテストする

概要

pytestでloggingのログ出力をテストする方法について調べたので,こちらにまとめておきます.

ディレクトリ構造

便宜上以下のディレクトリ構造を想定してテストの方法を解説します.

.
├── pac
│   ├── __init__.py
│   └── mod.py
└── test_mod.py

pac/mod.pyの中身

ログを出力するだけの関数を定義しておきます.

from logging import getLogger

logger = getLogger(__name__)


def func() -> None:
    logger.debug("debug")
    logger.info("info")
    logger.warning("warning")
    logger.error("error")

pytestを用いたテストの方法

pytestの組み込みのfixtureであるcaplogを使用することで,ログのテストを行うことができます.

from logging import DEBUG, ERROR, INFO, WARNING

from _pytest.logging import LogCaptureFixture

from pac.mod import func


def test_func(caplog: LogCaptureFixture):
    # ログレベルの設定
    caplog.set_level(DEBUG)

    # 関数を実行
    func()

    # ログ出力のテスト
    assert ("pac.mod", DEBUG, "debug") in caplog.record_tuples
    assert ("pac.mod", INFO, "info") in caplog.record_tuples
    assert ("pac.mod", WARNING, "warning") in caplog.record_tuples
    assert ("pac.mod", ERROR, "error") in caplog.record_tuples

ログで出力された内容は,caplog.record_tuplesで取得することができ,
(loggerの名前, ログレベル, ログの内容)の形式で保存されています.

実際にテストを実行してみます.

$ pytest test_mod.py

=============================================== test session starts ================================================
platform darwin -- Python 3.8.2, pytest-6.1.2, py-1.9.0, pluggy-0.13.1
rootdir: /Users/yuchi/Documents/study_logging
plugins: anyio-2.2.0, Faker-5.0.1, django-3.10.0, mock-3.3.1, cov-2.10.1, dash-1.16.3
collected 1 item                                                                                                   

test_mod.py .                                                                                                [100%]

================================================ 1 passed in 0.09s =================================================

無事テストをパスすることができました!

参考

スマメイトの対戦データを使用してキャラの安定度や上振れ度を分析してみた

スマメイト13期の対戦成績を解析して,キャラごとの安定度を分析してみました. あくまでオンライン対戦での結果であり,オフラインや競技シーンでの安定度の解析ではございません. また,人口の少ないキャラクターがいてデータに偏りがある関係上, 直感とは反する結果が含まれる場合があるので, その点をご理解いただけたらと思います.

またスマメイト13期の対戦データは,Ver.10.1.0のものになります. その点も留意していただけたらと思います.

続きを読む

Djangoでフィールド間の大小比較や差の絶対値の計算を行う

概要

Djangoでフィールド間の大小比較をした結果や,フィールド間の差の絶対値を新しいフィールドとして保存する方法について調べたので,メモを残しておきます.

続きを読む

pythonのdefaultdictで定数をデフォルト値に指定する方法

pythonの標準ライブラリであるcollectionで定義されたdefaultdictで,デフォルト値に定数を指定する方法について調べたのでメモしておきます.

ダメな例

defaultdictの引数に直接定数を定義してみます.
すると,defaultdictの引数は呼び出し可能(callable)じゃないとダメと怒られてしまいます.

>>> from collections import defaultdict
>>> d = defaultdict(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: first argument must be callable or None

解決法

関数を指定しなければならないのなら,定数を返す関数を引数に与えてしまえば問題ありません.
関数を定義するほどではないので,ラムダ式で記述した関数を指定しています.

>>> from collections import defaultdict
>>> d = defaultdict(lambda: 1)
>>> d["hoge"]
1

参考

python - defaultdict with default value 1? - Stack Overflow