2-2-3 Datasetの実装(p.74上部)についての質問
Closed this issue · 5 comments
anno_list[:,:4],anno_list[:,4]
の意味がよくわかりません。
自分でやってみた結果、trainの方は4でないとエラーが生じるということです。
エラーの内容は、index 3 is out of bounds for axis 1 with size 3 というような感じです。
省略された引数も含めて教えていただけると大変助かります。
よろしくお願い致します。
@Semayuki さま
ご質問いただき、ありがとうございます。
p. 74の
img_transformed, boxes, labels = transform(img, phase, anno_list[:, :4], anno_list[:, 4])
の部分を指していると解釈しました。
ここの変数anno_listは、p. 73 の下部で
# 2. アノテーションをリストに
transform_anno = Anno_xml2list(voc_classes)
anno_list = transform_anno(train_anno_list[0], width, height)
で定義されています。
transform_annoは、クラスAnno_xml2listのオブジェクトです。
よって、anno_listはAnno_xml2listのreturnしている変数になります。
そして、p. 69にて、
class Anno_xml2list()を定義しており、
このクラスは、1枚の画像に対する「XML形式のアノテーションデータ」を、
画像サイズで規格化してからリスト形式に変換しており、
return は [xmin, ymin, xmax, ymax, label_ind],
となっています。
そのため、p.73の**部分
anno_list[:, :4] はアノテーションデータのBBoxの座標情報を示し、anno_list[:,4] は物体のクラス名に対応したインデックスの情報です。
という記載の通り、変数anno_listの中身は [xmin, ymin, xmax, ymax, label_ind],
になります。
どうぞ宜しくお願い致します。
ご回答いただきありがとうございます。
とてもわかりやすいです。
しかし、私が知りたいのは、[:,:4],[:,4]
の表記の意味です。
ご回答いただけますと幸いです。
よろしくお願い致します。
@Semayuki さま
p. 71の**部分に
transform_anno = Anno_xml2list(voc_classes)
# アノテーションをリストで表示
transform_anno(val_anno_list[ind], width, height)
のあとに、
array([[ 0.09 , 0.03058104, 0.998 , 1.01529052, 18. ],
[ 0.122 , 0.57798165, 0.164 , 0.74006116, 14. ]])
と、anno_listの中身の例を記載しています。
この通り、anno_listは1行N列(Nはミニバッチサイズなど、一度に処理する画像枚数に対応)となります。
この1行が入っていて、その中に [xmin, ymin, xmax, ymax, label_ind]が、入っているのが、今回疑問に思われた原因かもしれません。
そのため、[:,:4]の表記の、最初の:は1行目を表しているだけで、[0,:4]でも動作する(と思います)。
そして、Pythonのスライス機能で、アノテーションデータのxmin, ymin, xmax, ymaxを取得しているのが、
,:4] になります。
[:,4]も同様で、4つ目のインデックスのlabel_indを取得しています。
だったら、1行N列にしなければ良いのではと思うところであり、私もパッとはその通りだと思います
ですが、プログラム全体と参考に使用した対象のGitHubから持ってきた関数などとの整合性を見て、
ここをN列でなく、1行N列のarrayにしている理由を確かめないといけないので、その点はすぐに回答ができず、大変申し訳ございません。
どうぞよろしくお願い致します。
大変よくわかりました。
ありがとうございます。
@Semayuki さま
限られた範囲での回答となり、大変申し訳ございませんが、誠にありがとうございます。