非常多次遇到这个问题,今天把来龙去脉搞清楚了,在这里做个记录。
一般遇到这个错误的都是在生成TFRecords文件的时候,这个错误转换过来的意思就是你生成tfrecords文件的过程中,一个size为xxxx的文件不是一个规范的jpeg文件,所以在生成tfrecords过程中出错。假设这个文件名字叫A.jpg
原因如下:
首先,A.jpg一定不是一个规范的jpg文件。JPEG格式是有自己的一套编码格式的,之前并不了解这一点,直到遇见了StackOverflow上面这个人提出的问题。
https://stackoverflow.com/questions/42154766/tensorflow-invalidargumenterror-invalid-jpeg-data-size-4096-not-jpeg-file-0x00
虽然我报的错并没有提示starts with 00,05一类的信息,但是这表明JPEG是有自己的文件起始位置编码的。通过UltraEdit查看随便一个标准的JPEG文件,结合资料,都发现起始几位一定是FF D8。而你找到你报错的那个文件,一定不是这个开头。这说明的问题就是你强制把png后缀改成jpg,不代表着图片就跟着变过来了,而是需要另存为jpeg才能真正的成为jpeg文件。
解决方案很简单了,如果嫌麻烦直接删掉,如果本身训练集图片不多不好删,就把报错的文件逐个另存为jpeg即可。