Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

JPEG ファイルの読み込み時のエラーについて

解決したいこと

複数のjpegファイルを読み込みたいのですが訓練データを60枚以上にするとエラーが生じてしまいます。何方か教えていただけると有難いです。

発生している問題・エラー

tensorflow.python.framework.errors_impl.InvalidArgumentError: Expected image (JPEG, PNG, or GIF), got unknown format starting with 'BM\366p\001\000\000\000\000\0006\000\000\000(\000' [Op:DecodeJpeg]

該当するソースコード

import  numpy as np
import tensorflow as tf
import glob

x_train=[]
y_train=[]
x_test=[]
y_test=[]

for f in glob.glob("C:/datasets/PetImages/*/*/*.jpg"):
    img_data=tf.io.read_file(f)
    img_data=tf.io.decode_jpeg(img_data)
    img_data=tf.image.resize(img_data,[100,100])


    if f.split("\\")[1] == "train":
       x_train.append(img_data)
       y_train.append(int(f.split("\\")[2].split(".")[0]))
    elif f.split("\\")[1] == "test":
       x_test.append(img_data)
       y_test.append(int(f.split("\\")[2].split(".")[0]))

#形状確認
x_train=np.array(x_train)/255.0
print(x_train.shape)
y_train=np.array(y_train)
x_test=np.array(x_test)/255.0
y_test=np.array(y_test)

# #CNNの実装
model=tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(100,100,3)),
    tf.keras.layers.Dense(64,activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(2,activation='softmax')
])
#modelの設定
model.compile(optimizer="adam",loss='sparse_categorical_crossentropy',metrics=["accuracy"])

#modelの実装
model.fit(x_train,y_train,batch_size=10,epochs=100)

自分で試したこと

C:/datasets/PetImages///*.jpg
このpathのファイルにはjpegファイルしか入っていないので何を改善していいか分からないです。

0

3Answer

破損したJPEGファイルがあるかも知れません。
JPEGファイルはFFD8から始まりますが、エラーメッセージによるとBMから始まっているので。
なので、破損したJPEGファイルがないか確認したほうが良いと思います。(あったらそれは取り除く)

参考:

3Like

Comments

  1. @shunpei535

    Questioner

    有難うございます!調べてみます。

ファイルの先頭が BM ということは BMP フォーマットの画像のようです。だとすると続く \366p\001\000 はファイルサイズが94454バイトあることを示しています。そのファイルを見つけて削除してみてください。

フォルダから JPEG ファイル以外を一括で取り除くにはこちらの方法が参考になると思います。 JPEG ファイルヘッダに含まれるはずの文字列 JFIF がないファイルを削除するコードです。 https://keras.io/examples/vision/image_classification_from_scratch/#filter-out-corrupted-images

3Like

Comments

  1. @shunpei535

    Questioner

    おかげで解決しました。助かりました!有難うございました!

私なら1つずつログを出して、特定のファイルに問題があるのかどうかを確認します。

2Like

Comments

  1. @shunpei535

    Questioner

    pythonを初めてまだ二週間程度でログの存在を知りませんでした汗
    教えていただきありがとうございました。

Your answer might help someone💌