質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

1回答

1591閲覧

Colabでのセマンティックセグメンテーション 学習時のエラー'out of bounds'の解決法 segmentation_models_pytorchを使用

退会済みユーザー

退会済みユーザー

総合スコア0

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2022/08/13 03:05

前提

Colabでsegmentation_models.pytorchを使って、セマンティックセグメンテーションを行おうとしています。
データセットはカスタムデータセットを使っています。
https://github.com/shirokawakita/multiclass-segmentation/blob/main/example_camvid_multiclassC2_quita.ipynb
↑のコードをアレンジして、やっているところです。
しかし、最後のコードでエラーが出てしまいました。

実現したいこと

エラーメッセージを回避して、セグメンテーションできるようにする。

発生している問題・エラーメッセージ

0% 0/3 [00:09<?, ?it/s] /usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py:566: UserWarning: This DataLoader will create 4 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary. cpuset_checked)) --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-42-7c12d22518cb> in <module>() 8 steps_per_epoch=len(train_loader)) 9 ---> 10 history = fit(epoch, model, train_loader, valid_loader, criterion, optimizer, sched) 3 frames /usr/local/lib/python3.7/dist-packages/torch/nn/functional.py in cross_entropy(input, target, weight, size_average, ignore_index, reduce, reduction, label_smoothing) 3012 if size_average is not None or reduce is not None: 3013 reduction = _Reduction.legacy_get_string(size_average, reduce) -> 3014 return torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index, label_smoothing) 3015 3016 IndexError: Target 255 is out of bounds.

該当のソースコード

max_lr = 1e-3 epoch = 10 weight_decay = 1e-4 criterion = nn.CrossEntropyLoss() optimizer = torch.optim.AdamW(model.parameters(), lr=max_lr, weight_decay=weight_decay) sched = torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr, epochs=epoch, steps_per_epoch=len(train_loader)) history = fit(epoch, model, train_loader, valid_loader, criterion, optimizer, sched)

補足

https://colab.research.google.com/drive/1UN_hGntu28TF8-pEK89vmcLxHpi-wmDe?usp=sharing
↑にGoogle Colabのファイルをシェアしておきたいと思います。ここから、全コードを見ていただけると、わかりやすいかもしれません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/08/16 02:37

> データセットはカスタムデータセットを使っています。 https://qiita.com/nigo1973/items/c62578fccc7230ba48f8 と、データもコードもそのまま全く同じで実行した場合も、質問に記載のと同じエラーになるのでしょうか?
退会済みユーザー

退会済みユーザー

2022/08/16 07:15

アクセス権を付与しました。よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2022/08/16 07:16

> https://qiita.com/nigo1973/items/c62578fccc7230ba48f8 と、データもコードもそのまま全く同じで実行した場合も、質問に記載のと同じエラーになるのでしょうか? データもコードも同じものであれば、エラーにはなりませんでした。
退会済みユーザー

退会済みユーザー

2022/08/16 07:18 編集

質問しておいて申し訳ないのですが、MMSegmentationというもう1つのセグメンテーションツールを用いて、アノテーションの画像を1bit変換したものに変換したところ、学習に成功しました。 https://qiita.com/nigo1973/items/c62578fccc7230ba48f8 のものも、もしかすると、アノテーション画像が1bitじゃないとうまく作動しないのかもしれません。
jbpb0

2022/08/16 08:29 編集

> アノテーション画像が1bitじゃないとうまく作動しないのかもしれません。 https://qiita.com/nigo1973/items/c62578fccc7230ba48f8 の「4. セグメンテーションの実行」の「4.1 取得データの前処理」のコードに CLASSES = ['sky', 'building', 'pole', 'road', 'pavement', 'tree', 'signsymbol', 'fence', 'car', 'pedestrian', 'bicyclist', 'unlabelled'] とあるので、アノテーション画像の画素値は0〜11なのに、 > データセットはカスタムデータセットを使っています。 のアノテーション画像の中に画素値に255が入ってる画像があって、 > Target 255 is out of bounds. となってる、のではないですかね アノテーション画像は、ファイルの形式は8bitのグレースケールで、その中の値は0〜11しか入ってないようにすれば、エラー出なくなると思います (11はunlabelled=背景) もちろん、コードを書き換えてクラス数を増やせば、話は変わりますが
退会済みユーザー

退会済みユーザー

2022/08/16 07:52

確かに、それはあり得ます! 画素値をクラス数にそろえるのは、どのようにすればいいかご存じですか?
jbpb0

2022/08/16 08:27 編集

https://colab.research.google.com/drive/1UN_hGntu28TF8-pEK89vmcLxHpi-wmDe?usp=sharing を見たら、クラス数は CLASSES = ['kawara', 'background'] の2つですね その場合はアノテーション画像の画素値は0, 1のどちらかしかないので、 > アノテーションの画像を1bit変換したものに変換したところ、学習に成功しました。 で大丈夫なのでしょう ただし、クラス数を3以上にしたら、1bitでは当然足りなくなります > 画素値をクラス数にそろえる アノテーション画像を作るツールで、そうなるように設定するのではないですかね
退会済みユーザー

退会済みユーザー

2022/08/16 08:21 編集

CVATや、labelmeなどのアノテーションツールだと、アノテーション用画像を作れるらしいので、それを用いれば、多クラス分類用の画像も作れるらしいです。 回答ありがとうございます。
jbpb0

2022/08/16 08:31

> データセットはカスタムデータセットを使っています。 のアノテーション画像は、 > CVATや、labelmeなどのアノテーションツールだと、アノテーション用画像を作れる で作ったのではないのですか?
guest

回答1

0

PyTorchによるMulticlass Segmentation - 車載カメラ画像のマルチクラスセグメンテーションについて.
の「4. セグメンテーションの実行」の「4.1 取得データの前処理」のコードに

python

1 CLASSES = ['sky', 'building', 'pole', 'road', 'pavement', 2 'tree', 'signsymbol', 'fence', 'car', 3 'pedestrian', 'bicyclist', 'unlabelled']

とあるので、アノテーション画像の画素値は0〜11なのに、

データセットはカスタムデータセットを使っています。

のアノテーション画像の中に画素値に255が入ってる画像があって、

Target 255 is out of bounds.

となってる、のだと思います

投稿2022/08/17 04:50

jbpb0

総合スコア7658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問