teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

質問内容に補足説明を記載しました.

2019/05/08 07:18

投稿

rk2
rk2

スコア11

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,7 @@
2
2
  chainerを使用して画像のセグメンテーションを行いたいと考えています.
3
3
  しかし,エラーが出てしまい,上手くいきません.
4
4
  セグメンテーションはここ([リンク内容](https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/Image_Segmentation.html))を参考にしてコードを書きました.
5
- 今回は参考とは異なり,自分で学習データを用意,作成し,3クラス分類(物体A,物体B,その他)を試みています.入力画像と正解画像はそれぞれアルファチャンネル無しの3チャンネル画像です.
5
+ 今回は参考とは異なり,自分で学習データを用意,作成し,3クラス分類(物体A,物体B,その他)を試みています.入力画像と正解画像はそれぞれアルファチャンネル無しの3チャンネル画像ですが,正解画像はインデックスカラー画像になっており,プログラムで読み込んだ際はshapeが(1, 512, 512)でした
6
6
  chainerは初めて扱うので解決策が分からず困っています.
7
7
  文字数制限があるためエラー(?)のtraceback以下は省略します.
8
8
  分かる方いらっしゃいましたらご教授願います.

4

質問内容に補足説明を記載しました.

2019/05/08 07:18

投稿

rk2
rk2

スコア11

title CHANGED
File without changes
body CHANGED
@@ -19,9 +19,9 @@
19
19
  Expect: t.ndim == x.ndim - 1
20
20
  Actual: 4 != 3
21
21
  ```
22
- SoftmaxCrossEntropyに代入する変数の次元が異なるということだと思うのですが,どこに四次元のものが出てきているのかわからないでいます.
23
22
  確認の為SoftmaxCrossEntropyの変数であるy_outとtの型を.shapeで確認したのですが,
24
23
  y_out=(バッチ数, 3, 512, 512) t=(バッチ数, 1, 512, 512)となっていました.
24
+ tが3次元の入力を求めているようですが,4次元のどの次元を削除(?)して3次元に変換する必要があるのでしょうか?
25
25
  ### 該当のソースコード
26
26
 
27
27
  ```python

3

質問内容に補足説明を記載しました.

2019/05/08 07:10

投稿

rk2
rk2

スコア11

title CHANGED
File without changes
body CHANGED
File without changes

2

質問内容に補足説明を記載しました.

2019/05/08 01:58

投稿

rk2
rk2

スコア11

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,9 @@
19
19
  Expect: t.ndim == x.ndim - 1
20
20
  Actual: 4 != 3
21
21
  ```
22
-
22
+ SoftmaxCrossEntropyに代入する変数の次元が異なるということだと思うのですが,どこに四次元のものが出てきているのかわからないでいます.
23
+ 確認の為SoftmaxCrossEntropyの変数であるy_outとtの型を.shapeで確認したのですが,
24
+ y_out=(バッチ数, 3, 512, 512) t=(バッチ数, 1, 512, 512)となっていました.
23
25
  ### 該当のソースコード
24
26
 
25
27
  ```python
@@ -39,7 +41,6 @@
39
41
 
40
42
  def transform(data):
41
43
  """ラベルデータの値を整数値に変換"""
42
- data = data[:3, ...]
43
44
  data = data.astype(np.int32)
44
45
  return data
45
46
 
@@ -115,7 +116,8 @@
115
116
  def __call__(self, inputimg, t):
116
117
  """まずは学習対象のモデルで推論を行う"""
117
118
  y_out = self.predictor(inputimg)
119
+ #ここで型を確認したが四次元のものはなかった.
118
- print(y_out.dtype)
120
+ print("y", y_out.shape, "t", t.shape)
119
121
 
120
122
  loss = F.softmax_cross_entropy(y_out, t)
121
123
 

1

編集前のエラーは解決しましたが新しくエラーが出たのでエラー内容とコードの修正をしました

2019/05/08 01:54

投稿

rk2
rk2

スコア11

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,7 @@
2
2
  chainerを使用して画像のセグメンテーションを行いたいと考えています.
3
3
  しかし,エラーが出てしまい,上手くいきません.
4
4
  セグメンテーションはここ([リンク内容](https://japan-medical-ai.github.io/medical-ai-course-materials/notebooks/Image_Segmentation.html))を参考にしてコードを書きました.
5
- 今回は参考とは異なり,自分で学習データを用意,作成し,3クラス分類を試みています.
5
+ 今回は参考とは異なり,自分で学習データを用意,作成し,3クラス分類(物体A,物体B,その他)を試みています.入力画像と正解画像はそれぞれアルファチャンネル無しの3チャンネル画像です.
6
6
  chainerは初めて扱うので解決策が分からず困っています.
7
7
  文字数制限があるためエラー(?)のtraceback以下は省略します.
8
8
  分かる方いらっしゃいましたらご教授願います.
@@ -16,8 +16,8 @@
16
16
  chainer.utils.type_check.InvalidType:
17
17
  Invalid operation is performed in: SoftmaxCrossEntropy (Forward)
18
18
 
19
- Expect: t.dtype.kind == i
19
+ Expect: t.ndim == x.ndim - 1
20
- Actual: f != i
20
+ Actual: 4 != 3
21
21
  ```
22
22
 
23
23
  ### 該当のソースコード
@@ -25,11 +25,9 @@
25
25
  ```python
26
26
  import glob
27
27
  import chainer
28
-
29
28
  import numpy as np
30
29
  import chainer.functions as F
31
30
  import chainer.links as L
32
-
33
31
  from chainer import datasets
34
32
  from chainer import reporter
35
33
  from chainer import iterators
@@ -39,10 +37,17 @@
39
37
  from chainer.datasets import split_dataset_random
40
38
  from chainercv import evaluations
41
39
 
40
+ def transform(data):
41
+ """ラベルデータの値を整数値に変換"""
42
+ data = data[:3, ...]
43
+ data = data.astype(np.int32)
44
+ return data
45
+
42
46
  def create_dataset(img_filenames, label_filenames):
43
47
  """データセット作成関数"""
44
48
  img = datasets.ImageDataset(img_filenames)
45
49
  label = datasets.ImageDataset(label_filenames)
50
+ label = datasets.TransformDataset(label, transform)
46
51
  dataset = datasets.TupleDataset(img, label)
47
52
  return dataset
48
53
 
@@ -52,14 +57,9 @@
52
57
  r"C:\Users\ttbnb\Documents\Python Scripts\data\img*.png"))
53
58
  train_label_filenames = sorted(glob.glob(
54
59
  r"C:\Users\ttbnb\Documents\Python Scripts\data\label*.png"))
55
- #タプルで入力画像とマスクの正解画像を束ねる
56
60
  train_val = create_dataset(train_img_filenames, train_label_filenames)
57
- #データセットのデータ数を取得する
58
61
  number = len(train_val)
59
- #データセットをトレーニング用と検証用に分割する割合を決める
60
62
  ratio = 0.9
61
- #読み込んだデータセットをトレーニング用とヴァリデーション用に分割する
62
- #第二引数の数だけトレーニングに,残りをヴァリデーションに,seed=0で分割を固定化
63
63
  train, valid = split_dataset_random(train_val, int(number*ratio), seed=0)
64
64
  return train, valid
65
65