前提
物体検出のプログラムを実装してみたいと思い
現在データセットの用意と前処理を行っています。
実現したいこと
発生している問題・エラーメッセージ
Error
1Input In [1], in <cell line: 7>() 2 4 rootpath = './data/VOCdevkit/VOC2012/' 3 5 #ファイルパスのリストを作成 4 6 tr_img, tr_anno, \ 5----> 7 val_img, val_anno = make_filepath_list(rootpath) 6 9 #各リストの先頭要素を出力 7 10 print(tr_img[0]) 8 9File ~\?????\object_detection\voc.py:30, in make_filepath_list(rootpath) 10 27 train_img_list = list() 11 28 train_anno_list= list() 12---> 30 for line in open(train_id_names): 13 31 file_id = line.strip() #空白スペースと改行の除去 14 32 # %sをファイル IDに置き換えて画像のパスを作る 15 16FileNotFoundError: [Errno 2] No such file or directory: './data/VOCdevkit/VOC2012/ImagesSets/Main/train.txt' 17
該当のソースコード
Python
1from voc import make_filepath_list 2 3#[JPEGImeges][Annotation]の親フォルダーの相対パス 4rootpath = './data/VOCdevkit/VOC2012/' 5#ファイルパスのリストを作成 6tr_img, tr_anno, \ 7 val_img, val_anno = make_filepath_list(rootpath) 8 9#各リストの先頭要素を出力 10print(tr_img[0]) 11print(tr_anno[0]) 12print(val_img[0]) 13print(val_anno[0]) 14
spyder:voc.py
1''' 21.訓練、検証のイメージとアノテージョンのリスト作成 3''' 4 5import os.path as osp 6 7def make_filepath_list(rootpath): 8 '''データパスを格納しリストを作成する 9 prameters: 10 rootpath(st):データフォルダのデータパス 11 returns: 12 train_img_list:訓練のイメージのパスリスト 13 train_anno_list:訓練のイメージのパスリスト 14 val_img_list:検証のイメージのパスリスト 15 val_anno_list:検証のイメージのパスリスト 16 ''' 17 #画像ファイルとアノテーションファイルへのパスのテンプレートを作成 18 imgpath_template = osp.join(rootpath,'JPEGImages', '%s.jpg') 19 annopath_template = osp.join(rootpath, 'Annotations', '%s.xml') 20 21 #訓練と検証、それぞれのファイルのID(ファイル名)を取得する 22 train_id_names = osp.join(rootpath + 'ImagesSets/Main/train.txt') 23 val_id_names = osp.join(rootpath + 'ImagesSets/Main/val.txt') 24 25 #訓練データの画像ファイルとアノテーションファイルのパスを保存するリスト 26 train_img_list = list() 27 train_anno_list= list() 28 29 for line in open(train_id_names): 30 file_id = line.strip() #空白スペースと改行の除去 31 # %sをファイル IDに置き換えて画像のパスを作る 32 img_path = (imgpath_template % file_id) 33 # %sをファイル IDに置き換えてアノテーションのパスを作る 34 anno_path = (annopath_template % file_id) 35 train_img_list.append(img_path) 36 train_anno_list.append(anno_path) 37 38 #検証データの画像ファイルとアノテーションファイルへのパスリストを作成 39 val_img_list = list() 40 val_anno_list = list() 41 42 for line in open(val_id_names) : 43 file_id = line.strip() #空白スペースと改行の除去 44 img_path = (imgpath_template % file_id) #画像のパス 45 anno_path = (imgpath_template % file_id)#アノテーションのパス 46 val_img_list.append(img_path) #リストに追加 47 val_anno_list.append(anno_path) #リストに追加 48 49 50 return train_img_list, train_anno_list, val_img_list, val_anno_list
試したこと
rootpath入力を'C:/Users/??????/??????/object_detection/data/VOCdevkit/VOC2012/'
に変更してみたができなかった。
補足情報(FW/ツールのバージョンなど)
python3.8.10
conda 4.13.0
実現したいことは、ファイルを見つけられるようにしたいです。
ご不明な点等ございましたら修正依頼して頂けると光栄です。
ご教授して頂けると幸いです。
rootpath = './data/VOCdevkit/VOC2012/'
↓ 変更
rootpath = 'C:/Users/??????/??????/object_detection/data/VOCdevkit/VOC2012/'
で、どうでしょうか?
やってみましたが、できませんでした
コマンドプロンプトで下記を実行したら、そこに「ImagesSets」という名前のディレクトリはありますでしょうか?
(もちろん伏せ字は実際のディレクトリ名にして実行してください)
dir C:\Users\??????\??????\object_detection\data\VOCdevkit\VOC2012
2022/07/30 14:05 <DIR> .
2022/07/30 14:05 <DIR> ..
2022/07/30 14:05 <DIR> Annotations
2022/07/30 14:05 <DIR> ImageSets
2022/07/30 14:05 <DIR> JPEGImages
0 個のファイル 0 バイト
5 個のディレクトリ 9,143,463,936 バイトの空き領域
です。
dir C:\Users\??????\??????\object_detection\data\VOCdevkit\VOC2012\ImagesSets\Main
を実行したら、そこに「train.txt」という名前のファイルはありますでしょうか?
はい、ありました。
dir C:\Users\??????\??????\object_detection\data\VOCdevkit\VOC2012
の実行結果は
2022/07/30 14:05 <DIR> ImageSets
と「ImageSets」ですが、コード中に書かれてるのは
train_id_names = osp.join(rootpath + 'ImagesSets/Main/train.txt')
val_id_names = osp.join(rootpath + 'ImagesSets/Main/val.txt')
と「ImagesSets」です
一文字違うので、エラーになってます
「ImageSets」か「ImagesSets」か、どちらかに統一してください
質問内容とは関係ありませんが、「voc.py」の二つ目のforループ内の
anno_path = (imgpath_template % file_id)#アノテーションのパス
は、
anno_path = (annopath_template % file_id)#アノテーションのパス
ではありませんか?
回答ありがとうございます。
私の誤入力が原因でした。
回答1件
あなたの回答
tips
プレビュー