Open KK-Saito opened 3 years ago
KK-Saitoさん 本書を活用していただきありがとうございます。 また、お返事が遅れてしまい申し訳ありません。
ご質問の件ですが、おそらくデータが足りてないと思われます。 実行に必要なファイル(3つのcsv)が存在しているか再度ご確認お願いいたします。 それでもエラーが起きる場合は、お手数ですが学習用のsubsetをsubset0~subset9まで揃えて実行できるか試していただけますでしょうか。
回答ありがとうございます。
3つのcsvファイルは確かに存在します。(part2ch12までは実行できていますので。) データにつきましては,確かにsubset0だけで実行していました。 subset1~subset9も揃えて実行してみたいと思います。
データの保存場所についてですが,subset0のデータにつきましては /content/drive/MyDrive/Colab Notebooks/Deep_Learning_with_PyTorch/data-unversioned/part2/luna/subset0 のフォルダに入れているのですが, subset1~subset9のデータは /content/drive/MyDrive/Colab Notebooks/Deep_Learning_with_PyTorch/data-unversioned/part2/luna/subset1 /content/drive/MyDrive/Colab Notebooks/Deep_Learning_with_PyTorch/data-unversioned/part2/luna/subset2 ・・・ /content/drive/MyDrive/Colab Notebooks/Deep_Learning_with_PyTorch/data-unversioned/part2/luna/subset9 のように,フォルダを分けて保存すればよいのでしょうか?
もう一点,質問があるのですが, https://luna16.grand-challenge.org/download/ からダウンロードした seg-lungs-LUNA16 フォルダは,p2_run_everything.ipynbのpart2ch13以降の実行には必要ないのでしょうか? セグメンテーションには必要な気がするのですが,テキストに記述はなかったと思いますが。
できれば御回答いただければ幸いです。
ご質問ありがとうございます。
1点目のデータの保存場所についてはその通りです。
p2ch13/dsets.py
の以下のように読み取るので参考までに載せておきます。
@functools.lru_cache(1)
def getCandidateInfoList(requireOnDisk_bool=True):
# We construct a set with all series_uids that are present on disk.
# This will let us use the data, even if we haven't downloaded all of
# the subsets yet.
mhd_list = glob.glob("data-unversioned/part2/luna/subset*/*.mhd")
presentOnDisk_set = {os.path.split(p)[-1][:-4] for p in mhd_list}
2点目の内容ですが、本書では必要ありません。
seg-lungs-LUNA16
の中身を見たわけではありませんが、おそらくセグメンテーションの教師データということで必要ではと思われたのだと推測します。
13章では3次元のCTデータと結節の位置情報から教師データの作成も行うので、テキスト記載のデータのみで可能です(P446 13.5.3をご参照ください)。
回答ありがとうございます。
現在,subset1~subset9をGoogle Driveにアップロードしているところです。 1つのsubsetをアップロードするのに1時間ほどかかるので,9時間ほどかかるようです。
seg-lungs-LUNA16につきましても,ありがとうございました。
subset0~subset9まで揃えて実行できればうれしいのですが,そろそろColab Proを契約しないと無理かもしれません。
ありがとうございました。
無事,p2_run_everything.ipynbのChapter 13の最初のコマンド run('p2ch13.prepcache.LunaPrepCacheApp') が実行できました。
しかし,無料版のColabを使用しているので,実行時にディスクが68.4GBまでしか使用できないため, 2021-05-09 06:40:13,447 INFO pid:58 util.util:241:enumerateWithEstimate Stuffing cache 16/538, done at 2021-05-09 10:27:52, 3:54:12 の途中で OSError: [Errno 28] No space left on device というエラーが出て止まってしまいました。
このため,Colab Proを契約するかどうか検討中です。
たびたび報告させていただきますが,Colab Proを契約したのですが,結局ディスク容量が足りません。
147.15GB使用できるのですが, 2021-05-09 07:52:03,967 INFO pid:78 util.util:241:enumerateWithEstimate Stuffing cache 64/538, done at 2021-05-09 10:31:39, 3:00:50 の途中で, OSError: [Errno 5] Input/output error: 'data-unversioned/cache/part2ch13_raw/031/56/92' というエラーが出て,止まってしまいました。
そこで,半分のデータで実行してみようと思うのですが, subset0~subset4 のデータを使うか, subset0~subset9 のそれぞれのsubsetの半分のデータ を使うか迷っています。 半分のデータを使う場合,どちらがよろしいでしょうか?
また,そもそも半分のデータで実行できるのでしょうか?
できれば御回答いただけると助かります。
度々すみませんが,subset0~subset4のデータだけを使って実行してみたのですが,最初と同じ IndexError: list index out of range エラーが出て止まってしまいました。 やはりsubset0~subset9のすべてのデータが揃っていないと動かないようです。
せっかくColab Proを契約しても,ディスク容量が147.15GBまでしか使用できないのでは,subset0~subset9のすべてのデータで実行することはできそうもありません。
どうすればGoogle Colabで実行できるのか,できればヒントをいただけると助かります。
KK-Saito さん
ご指摘の件ですが、コードを修正したので改善したと思われます。
p2ch13/dsets.py
とp2_run_everything.ipynb
の内容を修正しました。
お手数ですが、コードを置き換えて再度実行していただけますでしょうか?
今度はsubset0
のみでも動作するはずです。
(再実行の際はcache
フォルダの削除をお願いします)
対応に時間がかかってしまい誠に申し訳ございません。
丁寧にご対応いただき,ありがとうございます。
明日にでも新しいファイルで再度実行してみたいと思います。
色々ご対応いただき,ありがとうございました。
無事,subset0のみでp2_run_everything.ipynbのChapter 13の部分が実行できました。 せっかくですから,エポック数を増やしてもう少しいろいろ試してみたいと思います。 また,subset0のみを使用した状態で,まだ79GBほどディスク容量が空いていますので,もう少しデータを増やしてやってみようと思います。
ただ,少し気になりますのは,元のp2_run_everything.ipynbにあった run('p2ch13.train_cls.LunaTrainingApp', f'--epochs={final_epochs}', '--balanced', '--augmented', 'final-cls') と run('p2ch13.train_seg.LunaTrainingApp', f'--epochs={seg_epochs}', '--augmented', 'final-seg') は実行できませんでしたが,日本語版ではこの部分は用意していないということでしょうか? ご用意いただいた, run('p2ch13.training.SegmentationTrainingApp', f'--epochs={experiment_epochs}', '--augmented') でTensorBoardの出力も確認できましたので,これで問題ないとは思いますが。
KK-Saito 様
実行できたということでよかったです。 ここまでに大変お手数をおかけして申し訳ございませんでした。
run('p2ch13.train_cls.LunaTrainingApp', f'--epochs={final_epochs}', '--balanced', '--augmented', 'final-cls') と run('p2ch13.train_seg.LunaTrainingApp', f'--epochs={seg_epochs}', '--augmented', 'final-seg')
上記については本家のコードがそもそも誤っており、私たちがそれを見逃してしまったのが原因です。
したがって、日本語版でできないというよりは元のリポジトリでも実行できないです。
(p2ch13/training.py
にはそもそもLunaTrainingApp
というクラスは存在しない)
最後に、この度は貴重なご意見をありがとうございました。 今後ともよろしくお願いいたします。
一読者の質問にこれほど丁寧に御対応いただけるとは思っていませんでしたので,大変感謝しております。 ありがとうございました。
ここまできたらChapter 14のプログラムも実行させたいと思いますので,今後ともよろしく御願いいたします。 Chapter 14につきましては,別スレッドにしようかと思いますが,とりあえずp2ch13/dsets.pyをp2ch14/dsets.pyにコピーすれば動きますでしょうか?
subset0~subset3のデータを使って20エポックまで実行してみました。 実行中にディスクの残りが30GB程度になり,警告メッセージが出ましたので,Colab Proで実行する場合では,これ以上のデータは使えないようです。 subset0~subset3の中には 240 training series, 2727 slices, 326 nodules 27 validation series, 344 slices, 40 nodules 個のデータがありました。 subset0だけだと 80 training series, 890 slices, 101 nodules 9 validation series, 81 slices, 11 nodules 個のデータでしたので,ちょうど3倍というところです。 TensorBoardの出力結果を見ると,ほぼテキストp.480 図13.18と同じ結果が得られました。
ありがとうございました。
Chapter 14につきましては,別スレッドにしようかと思いますが,とりあえずp2ch13/dsets.pyをp2ch14/dsets.pyにコピーすれば動きますでしょうか?
Chapter 14についても修正したので最新のリポジトリに置き換えるか、KK-Saito 様がおっしゃるようにp2ch13の該当箇所のみをp2ch14/dsets.pyにコピーするでも大丈夫です
KK-Saitoさん 私はsubset0~subset9全てをダウンロードして実行しましたが、同様に「../p2ch13/dsets.pyの112行目で IndexError: list index out of range となりました。なので、恐らく本当に何かが足りないような気がしています。大体やっている事は理解出来たので「まあいいか」と諦めていたのですが、無事、私の環境でも実行出来ました。質問して下さりどうもありがとうございました! ※対応して下さったGin5050さんもありがとうございます
はじめまして PyTorch実践入門 を購入して、勉強しています。
Google ColaboratoryのGPU環境でp2_run_everything.ipynbを実行しています。 Google Driveをマウントして,なんとかChapter 12までは実行できて,TensorBoardも表示できたのですが,Chapter 13以降が実行できません。
具体的には,p2_run_everything.ipynbのChapter 13の最初のコマンド run('p2ch13.prepcache.LunaPrepCacheApp') を実行すると,下記のようなエラーが出ます。
/usr/local/lib/python3.7/dist-packages/torch/_utils.py in reraise(self) 427 # have message field 428 raise self.exc_type(message=msg) --> 429 raise self.exc_type(msg) 430 431
IndexError: Caught IndexError in DataLoader worker process 0. Original Traceback (most recent call last): File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/worker.py", line 202, in _worker_loop data = fetcher.fetch(index) File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch data = [self.dataset[idx] for idx in possibly_batched_index] File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/content/drive/My Drive/Colab Notebooks/Deep_Learning_with_PyTorch/p2ch13/dsets.py", line 399, in getitem
candidateInfo_tup.series_uid, candidateInfo_tup.center_xyz, (7, 96, 96)
File "/usr/local/lib/python3.7/dist-packages/diskcache/core.py", line 1889, in wrapper
result = func(*args, **kwargs)
File "/content/drive/My Drive/Colab Notebooks/Deep_Learning_with_PyTorch/p2ch13/dsets.py", line 244, in getCtRawCandidate
ct = getCt(series_uid)
File "/content/drive/My Drive/Colab Notebooks/Deep_Learning_with_PyTorch/p2ch13/dsets.py", line 239, in getCt
return Ct(series_uid)
File "/content/drive/My Drive/Colab Notebooks/Deep_Learning_with_PyTorch/p2ch13/dsets.py", line 112, in init
)[0]
IndexError: list index out of range
data-unversioned\cacheフォルダにpart2ch13_rawというフォルダは作られるのですが,キャッシュファイルが作成できていません。
せっかくpart2ch12までは実行できましたので,なんとかしてpart2ch13以降も動かしたいと思いますので,できましたらヒントをいただければ幸いです。