テンプレート
What is
Distinctivity compared to the other research?
Metoldology
Validity
Discussion
The next paer I should read
A SURVEY ON CONTRASTIVE SELF-SUPERVISED LEARNINGを読む
Inroduction
- Self-supervised trainingつまり自己教師あり学習についてのサーベイ論文
- self-supervised learning methods have integrated both generative and contrastive approaches
- つまり自己教師あり学習は生成的か対照的かと言う手法によって分けられている
- 表現学習という手法をかんがえるのだが、表現学習の場合、ラフなイメージがあれば十分であるということが脳科学の観点から示されている。
Methodology
- 表現学習をするための手法はいくつかある
- color transformation, geometric transformation, context-based tasks, and cross-modal based tasks.の4つ
- 上の手法を用いえAugumented されたデータを
Diffusionモデルを理解する。Diffusion Models: A Comprehensive Survey of Methods and Applicationsを読む
Abstract
- efficient sampling, improved likelihood estimation, and handling data with special structuresという観点で使いやすい
- つまり効率的なサンプリング
- 類似点推定
- データを特別な形で扱う
Introduction
- 長らく続いていた画像生成におけるGANの性能を遥かに超えるSoTAを達成した
- DDPM,SGMs,SDEsという手法を用いて
FOUNDATIONS OF DIFFUSION MODELS
DDPMs
- DiffsionモデルはDDPMsと呼ばれる手法からなっている
- A denoising diffusion probabilistic modelと呼ばれる
- 二つのマルコフ連鎖を使っている。
- 一つのマルコフ連鎖はForward Processで、データにノイズを加えていく
- もう一つはReverse Processでノイズからデータを復元する
- 遷移核は一般的にはこんな感じ。ちなみに遷移書くというのはマルコフ行列の中身のこと
- 𝑞(x𝑡 | x𝑡−1) = N (x𝑡 ; √︁ 1 − 𝛽𝑡 x𝑡−1, 𝛽𝑡I),正規分布
- KL Divergenceを用いて計算する
疲れたので今日はここまで
【アウトプット】Probabilistic teacherのコード面の理解
if entropy_weight:
if self.cfg.UNSUPNET.MODEL_TYPE == "GUASSIAN":
entropy = 0.5 * torch.log(2 * np.pi * np.e * sigma_p)
max_entropy = 0.5 * math.log(2 * np.pi * np.e)
elif self.cfg.UNSUPNET.MODEL_TYPE == "LAPLACE":
entropy = 1 + 0.5 * torch.log(4 * sigma_p)
max_entropy = 1 + math.log(2)
weight = (1 - entropy / max_entropy) ** weight_lamuda[1]
Probabilistic Teacherにおけるクロスエントロピーの計算コード
box_regressionというコードにガウシアンやらプラシアンなどの計算コードが書き込まれている
def gaussian_dist_pdf(val, mean, var, eps=1e-9):
simga_constant = 0.3
return torch.exp(-(val - mean) ** 2.0 / (var + eps) / 2.0) / torch.sqrt(2.0 * np.pi * (var + simga_constant))
def laplace_dist_pdf(val, mean, var, eps=1e-9):
simga_constant = 0.3
return torch.exp(-torch.abs(val - mean) / torch.sqrt(var + eps)) / torch.sqrt(4.0 * (var + simga_constant))
Selfーtrainingとは
擬似ラベル付けのコード
def process_pseudo_label(
self, proposals_rpn_unsup_k, proposal_type, psedo_label_method=""
):
list_instances = []
num_proposal_output = 0.0
for proposal_bbox_inst in proposals_rpn_unsup_k:
# all
if psedo_label_method == "all":
proposal_bbox_inst = self.threshold_bbox(
proposal_bbox_inst, proposal_type=proposal_type
)
else:
raise ValueError("Unkown pseudo label boxes methods")
num_proposal_output += len(proposal_bbox_inst)
list_instances.append(proposal_bbox_inst)
num_proposal_output = num_proposal_output / len(proposals_rpn_unsup_k)
return list_instances, num_proposal_output
この中の
に着目すると、
これは
def threshold_bbox(self, proposal_bbox_inst, proposal_type="roih"):
if proposal_type == "rpn":
# ------------ >all -----------
# create instances containing boxes and gt_classes
image_shape = proposal_bbox_inst.image_size
new_proposal_inst = FreeInstances(image_shape)# create box
new_bbox_loc = proposal_bbox_inst.proposal_boxes.tensor
new_boxes = Boxes(new_bbox_loc)# add boxes to instances
new_proposal_inst.gt_boxes = new_boxes
new_proposal_inst.objectness_logits = proposal_bbox_inst.objectness_logits# ------------ <all -----------
# create box
new_bbox_loc = proposal_bbox_inst.proposal_boxes.tensor
new_boxes = Boxes(new_bbox_loc)# add boxes to instances
new_proposal_inst.pseudo_boxes = new_boxeselif proposal_type == "roih":
# ------------ >all -----------
# create instances containing boxes and gt_classes
image_shape = proposal_bbox_inst.image_size
new_proposal_inst = FreeInstances(image_shape)# create box
# new_bbox_loc = proposal_bbox_inst.pred_boxes.tensor
# new_boxes = Boxes(new_bbox_loc)# add boxes to instances
# new_proposal_inst.gt_boxes = new_boxes
# new_proposal_inst.gt_classes = proposal_bbox_inst.pred_classes
# new_proposal_inst.scores = proposal_bbox_inst.scores# ------------ <all -----------
new_bbox_loc = proposal_bbox_inst.pred_boxes.tensor
pseudo_boxes = Boxes(new_bbox_loc)# add boxes to instances
new_proposal_inst.pseudo_boxes = pseudo_boxes
new_proposal_inst.scores_logists = proposal_bbox_inst.scores_logists
if proposal_bbox_inst.has('boxes_sigma'):
new_proposal_inst.boxes_sigma = proposal_bbox_inst.boxes_sigmareturn new_proposal_inst
というコードであると書かれている。同じコード内にある
torch.no_gradはテンソルの勾配計算を無しにするもの
ここで
self.model_teacher(unlabel_data_k, branch="unsup_data_weak")
これを代入してUnlabelに擬似ラベルを付与している。さらに辿る
これを辿るとBuildモデルにたどりつく。したがってModelingというフォルダを変更するのが重要
Torch.cat。テンソルを連結
【アウトプット】Learning Domain Adaptive Object Detection with Probabilistic Teacherを読んだ
Abstract
- Self-trainingの教師なしドメイン適応能力は、擬似ラベルの品質に左右される
- Uncertainty-guidedな方法としてEntropy Focal Lossを使って計算することにより、従来の方法を超えるAP値を叩き出した
Introduction
Related Works
- Unsupervised Domain Adaptive Object Detection
- Unbiased Mean Teacher、SimRODと呼ばれる手法はSelf-trainingの方法の一つである。
- 従来の手法では擬似ラベルを得るということに主眼を置いているが、擬似ラベルというものはそもそもとしてNosiyなものになるという可能性を忘れている
- PTでは擬似ラベルが
- Self training
- 半教師あり物体検出(Semisupervised)において発展してきた手法
- STACと呼ばれる手法では、数少ないLabeled DataをDetecterに学習させる
- しかしSTACでは一度生成された擬似ラベルは常に固定されており、学習プロセスの間ずっと一緒であるという問題点がある
- Soft teacherでは、Box jitter methodと呼ばれる手法を利用してLocaliztation accuracyを上昇させようとする手法である
- LabelMatchでは擬似ラベルをLabel Distribution Consistency(?)を用いて閾値のアップデートを行うという手法をとっている
- Preliminary
テーマが見つかったのでここまでとする