Closed Toma0916 closed 4 years ago
@kminoda
ensembleするときってそういう手順でboxを統合している?
https://www.kaggle.com/minomonter/gwd-multi-model-inference これ見れます? 質問の意味がよくわからんが、ensembled_model(models, configs)でensembledのモデルを定義して、中身では
for model in models:
outputs = model(images)
outputs_all.append(outputs)
return outputs
みたいなことをしている
一応読んだんですけど、全部予測をconcatして後処理を一括でみたいなイメージですよねこれ?
yes
一応結果を計算するところまで
挙動確認しつつ綺麗にしますわ
↑は3モデルのアンサンブル + wbfの最適化で、最適化の際はtrain使ってやってるからvalidも一緒に上がってることは確認出来た
今は一切pseudo labelには触れてないけどどういう形にしましょうかね、
後処理最適化パートは
みたいな感じ
どの処理をするかはいずれjsonで書けるようにするけど、pseudo label入れるなら
- 一旦それぞれでtrain valid予測して結果を突っ込んでおく
の手前かな?
モデル読み込む手前が良いですねPLは
間違えた 予測する手前
ふむう
コメントとかもあるけど一旦最低限のパイプラインできたのでチェックしてマージでお願いしてええですか?
predict_config.json
の中身、俺のモデルで直書きしてるけどそっちのに合わせて変えれば動くはず
あざす!!!!!!!!!!!! 明日になるかも
exp10, 12, 14でdebug=falseで回したらこんなエラー出た
predicting train...
【1/3】
36%|██████████████████████████████████████████████████████▏ | 974/2698 [02:01<03:35, 8.01it/s]
Traceback (most recent call last):
File "predict.py", line 223, in <module>
train_predicts, original_train_metrics, valid_predicts, original_valid_metrics = predict_original(loaded_models, train_data_loader, valid_data_loader)
File "predict.py", line 125, in predict_original
train_predicts, train_metrics = predict_original_for_loader(loaded_models, train_data_loader)
File "predict.py", line 105, in predict_original_for_loader [0/3959]
for images, targets, image_ids in tqdm.tqdm(dataloader):
File "/home/minoda/venv/pytorch-env/lib/python3.6/site-packages/tqdm/std.py", line 1129, in __iter__
for obj in iterable:
File "/home/minoda/venv/pytorch-env/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 345, in __next__
data = self._next_data()
File "/home/minoda/venv/pytorch-env/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 841, in _next_data
idx, data = self._get_data()
File "/home/minoda/venv/pytorch-env/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 808, in _get_data
success, data = self._try_get_data()
File "/home/minoda/venv/pytorch-env/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 761, in _try_get_data
data = self._data_queue.get(timeout=timeout)
File "/usr/lib/python3.6/multiprocessing/queues.py", line 113, in get
return _ForkingPickler.loads(res)
File "/home/minoda/venv/pytorch-env/lib/python3.6/site-packages/torch/multiprocessing/reductions.py", line 294, in rebuild_storage_fd
fd = df.detach()
File "/usr/lib/python3.6/multiprocessing/resource_sharer.py", line 58, in detach
return reduction.recv_handle(conn)
File "/usr/lib/python3.6/multiprocessing/reduction.py", line 182, in recv_handle
return recvfds(s, 1)[0]
File "/usr/lib/python3.6/multiprocessing/reduction.py", line 161, in recvfds
len(ancdata))
RuntimeError: received 0 items of ancdata
debug trueだと動くの?
動くね とうまの手元だとdebug falseでも動きました?
俺の手元だと動きますわね
つまりどういうエラーなんだろう
ちなみにdebug falseだと全部の最適化に30分くらいかかるはず
特定の状況で再現するみたいな文章を読んでいる
@kminoda
dataloader のnum_workers
をどっちもnum_workers=0
にしてみてくれませんか!
こっちから修正版コミットするわ
試してみて
どうだろう
動いたので大丈夫そうですね、マージして良さそう。 てかこれスコアめっちゃ上がるな笑
リークはしてないはずだから大丈夫だと思われる。
2個くらい混ぜても5個くらい混ぜても手元のvalidだとあまり変わらんけどテストの方だといい感じにつよつよになってくれるといいな
nms, softnms, wbfそれぞれにベイズ最適化するところまで、singleモデルでもensembleでも出来る。 もうちょっと綺麗にする