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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Q&A

解決済

1回答

384閲覧

ファイルがあるのにFileNotFoundError

Tyutohannpa_

総合スコア24

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

0グッド

0クリップ

投稿2022/08/19 06:45

編集2022/08/25 02:00

前提

物体検出のプログラムを実装してみたいと思い
現在データセットの用意と前処理を行っています。

実現したいこと

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

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

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

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

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

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

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

Tyutohannpa_

2022/08/19 06:51

実現したいことは、ファイルを見つけられるようにしたいです。 ご不明な点等ございましたら修正依頼して頂けると光栄です。 ご教授して頂けると幸いです。
jbpb0

2022/08/19 11:22

rootpath = './data/VOCdevkit/VOC2012/' ↓ 変更 rootpath = 'C:/Users/??????/??????/object_detection/data/VOCdevkit/VOC2012/' で、どうでしょうか?
Tyutohannpa_

2022/08/25 02:01

やってみましたが、できませんでした
jbpb0

2022/08/25 03:10 編集

コマンドプロンプトで下記を実行したら、そこに「ImagesSets」という名前のディレクトリはありますでしょうか? (もちろん伏せ字は実際のディレクトリ名にして実行してください) dir C:\Users\??????\??????\object_detection\data\VOCdevkit\VOC2012
Tyutohannpa_

2022/08/25 03:10

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 バイトの空き領域 です。
jbpb0

2022/08/25 03:13

dir C:\Users\??????\??????\object_detection\data\VOCdevkit\VOC2012\ImagesSets\Main を実行したら、そこに「train.txt」という名前のファイルはありますでしょうか?
jbpb0

2022/08/25 13:31 編集

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」か、どちらかに統一してください
jbpb0

2022/08/25 04:26

質問内容とは関係ありませんが、「voc.py」の二つ目のforループ内の anno_path = (imgpath_template % file_id)#アノテーションのパス は、 anno_path = (annopath_template % file_id)#アノテーションのパス ではありませんか?
Tyutohannpa_

2022/08/30 06:19

回答ありがとうございます。 私の誤入力が原因でした。
guest

回答1

0

ベストアンサー

C:/Users/~/train.txtに本当にファイルが存在することを確認したうえで

  • Pythonでカレントディレクトリを取得、変更(移動)を参考にしてカレントディレクトリが意図した場所(C:/Users/~)になっているか確認し、なっていなければ意図した場所に変更する。
  • rootpathC:/Users/~と[JPEGImeges][Annotation]の親フォルダーを絶対パスで指定する。

とよいでしょう。

投稿2022/08/19 07:15

編集2022/08/30 06:24
can110

総合スコア38266

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

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

Tyutohannpa_

2022/08/25 03:13

カレントディレクトリの確認はでき、絶対パスも行いましたができませんでした。
can110

2022/08/25 04:02

絶対パスで実行した場合のエラーメッセージ(Traceback)を記載ください。(個人名などは伏せて)
jbpb0

2022/08/27 14:53 編集

質問者さん C:/Users/??????/??????/object_detection/data/VOCdevkit/VOC2012/ImageSets/Main/train.txt にファイルは存在するけど、コードでは train_id_names = osp.join(rootpath + 'ImagesSets/Main/train.txt') val_id_names = osp.join(rootpath + 'ImagesSets/Main/val.txt') としてて、ディレクトリ名が一文字違うので、エラーが出てます ImageSets ImagesSets 「ImageSets」か「ImagesSets」か、どちらかに統一してください
jbpb0

2022/08/27 14:51

can110さん 下記を変える必要があると思います rootpath を C:/Users/??????/??????/object_detection と絶対パスで指定する。 ↓ 修正 rootpath を C:/Users/??????/??????/object_detection/data/VOCdevkit/VOC2012 と絶対パスで指定する。
can110

2022/08/30 06:26

コメントありがとうございます。 ちょっと今回の正しいパスが確認できなので、一般的な回答に修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問