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

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

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

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

機械学習

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2712閲覧

Tensorflow object detection APIのgenerate_tf.record.pyでのエラー

Saba3

総合スコア15

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

機械学習

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/06 07:06

編集2021/08/11 02:40

前提・実現したいこと

https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html#training-the-model
を参考に物体検出のモデルを生成を目指しています。

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

しかし、generate_tf.record.pyで

以下のエラーが出力されました。

python

1Traceback (most recent call last): 2 File "generate_tfrecord.py", line 62, in <module> 3 label_map = label_map_util.load_labelmap(args.labels_path) 4 File "C:\Users\rh731\anaconda3\lib\site-packages\object_detection\utils\label_map_util.py", line 168, in load_labelmap 5 label_map_string = fid.read() 6 File "C:\Users\rh731\anaconda3\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 117, in read 7 self._preread_check() 8 File "C:\Users\rh731\anaconda3\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 79, in _preread_check 9 self._read_buf = _pywrap_file_io.BufferedInputStream( 10UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 138: invalid start byte

該当のソースコード

以下のfig.read()でエラーが発生ししていると思われます。

python

1def create_tf_example(group, path): 2 with tf.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid: 3 encoded_jpg = fid.read() 4 encoded_jpg_io = io.BytesIO(encoded_jpg) 5 image = Image.open(encoded_jpg_io) 6 width, height = image.size 7

試したこと

・全てのファイルがutf8であることを確認しました。

補足情報(FW/ツールのバージョンなど)

以下のサイトを閲覧しました。
https://insilico-notebook.com/python-unicodedecodeerror/
https://qiita.com/niwaringo/items/d2a30e04e08da8eaa643
https://www.kumilog.net/entry/unicode-decode-error
https://github.com/tensorflow/models/issues/10035
https://github.com/tensorflow/tensorflow/issues/37950
###追記情報
generate_tfrecord.pyのargs.labels_mapの表示結果を追記しました。

C:\Users\rh731\PycharmProjects\TensorFlow\workspace\training_demo\annotations\label_map.pbtxt

新たなエラーが発生しました。

python

1Traceback (most recent call last): 2 File "generate_tfrecord.py", line 194, in <module> 3 tf.app.run() 4 File "C:\Users\rh731\anaconda3\lib\site-packages\tensorflow\python\platform\app.py", line 40, 5in run 6 _run(main=main, argv=argv, flags_parser=_parse_flags_tolerate_undef) 7 File "C:\Users\rh731\anaconda3\lib\site-packages\absl\app.py", line 303, in run 8 _run_main(main, args) 9 File "C:\Users\rh731\anaconda3\lib\site-packages\absl\app.py", line 251, in _run_main 10 sys.exit(main(argv)) 11 File "generate_tfrecord.py", line 184, in main 12 tf_example = create_tf_example(group, path) 13 File "generate_tfrecord.py", line 137, in create_tf_example 14 encoded_jpg = fid.read() 15 File "C:\Users\rh731\anaconda3\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 11 167, in read 17 self._preread_check() 18 File "C:\Users\rh731\anaconda3\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 79 19, in _preread_check 20 self._read_buf = _pywrap_file_io.BufferedInputStream( 21UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 147: invalid start byte

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

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

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

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

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

can110

2021/08/06 07:24

エラーメッセージより"label map"なるファイルの読込時に発生していると思われます。 これが具体的に(あなたの用意した?)どのファイルに該当するかは分かりますでしょうか?
Saba3

2021/08/07 02:22

label_map.pbtxtだと思われます。 このファイルの中身は、 label.ptbtxの中身 item { id: 1 name: 'Can' } item { id: 2 name: 'Person' } item { id: 3 name: 'Box' } item { id: 4 name: 'Bottle' } となっています。
can110

2021/08/07 02:41

ファイルの中身はそれで全てでしょうか? エラーからは138バイト目にデコードできない文字があるようです。 一般的にはshift-jisなど異なるエンコーディングのファイルで日本語などが含まれていると考えられます。
ppaul

2021/08/07 04:11

generate_tfrecord.py の62行目の label_map = label_map_util.load_labelmap(args.labels_path) の前に print(args.labels_path) を挿入して実行し、何が表示されるかを質問に追記して下さい。
Saba3

2021/08/11 00:29

質問に表示結果を追記させていただきました。 よろしくお願いいたします。
jbpb0

2021/09/05 01:02 編集

バイナリエディターを使えば、改行コードやUTF-8のBOM等のテキストエディターでは見えないデータも全て表示されるので、エラーメッセージの「position」の次の数値(byte)の位置のデータが何かを確認するのに便利ですよ あと、ユーザー名や、ファイル名やファイルのパスに日本語が含まれてる場合に、そのようなエラーが出ることがあるようですが、質問文を見る限り、それには該当しなさそうですね
guest

回答2

0

自己解決

以下のサイトを参考にデータをColab上に移して実行したところ、tfrecordを生成でき
ました。色々とありがとうございました。

参考URL:https://towardsdatascience.com/creating-your-own-object-detector-ad69dda69c85

投稿2021/09/08 06:47

Saba3

総合スコア15

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

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

0

label_map.pbtxtは、116バイトで、改行を2バイトにしても134バイトです。最後に改行がなければ2バイト少ないかもしれません。
position 138に0x8eがあるというエラーメッセージからすると、見えない文字が後ろにあって、それが問題を起こしているように見えます。

エクスプローラーでlabel_map.pbtxtを右クリックしてプロパティを開きサイズを確認してください。
それが133以上であれば、以下を行ってください。

label_map.pbtxtを別フォルダにコピーする。(検証、確認用)
テキストエディタで、label_map.pbtxtを開き、中身を全部削除して以下をコピペする。

plain

1item { 2id: 1 3name: 'Can' 4} 5 6item { 7id: 2 8name: 'Person' 9} 10item { 11id: 3 12name: 'Box' 13} 14 15item { 16id: 4 17name: 'Bottle' 18}

再度、エクスプローラーでlabel_map.pbtxtを右クリックしてプロパティを開きサイズを確認してください。
サイズが小さくなっていたら実行してみましょう。
これで動くかもしれません。

投稿2021/08/11 01:34

ppaul

総合スコア24670

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

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

Saba3

2021/08/11 02:41

実行させていただいたところ、pbtxtのファイルサイズは133以下になりました。 しかし、別のエラーが発生しました。
ppaul

2021/08/11 06:52

サイズが133以下のファイルを読んで、147バイト目でエラーが起きているというのは不思議ですね。
jbpb0

2021/09/04 23:33

Windowsのエクスプローラーで新規にテキストファイル(サイズ0)を作成して、それをテキストエディターで開いて、ppaulさんの回答からコピペして保存して、ファイル名を「label_map.pbtxt」に変えて使ってみても、ダメでしょうか? 現状エラーが出るファイルからのコピペだと、余計な何かも付いていくかもしれないので、この回答をWebブラウザからコピペする方がいいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問