Open lchigoc opened 6 years ago
densenet-ocr的第142行左右,img1 = Image.open(j).convert('L') 这里是控制图片加载的,你可以自定义一个 imgPath = '../somewhere/images',然后把那行代码修改一下:img1 = Image.open(imgPath + j).convert('L')
InvalidArgumentError Traceback (most recent call last) C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _do_call(self, fn, args) 1322 try: -> 1323 return fn(args) 1324 except errors.OpError as e:
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in _run_fn(session, feed_dict, fetch_list, target_list, options, run_metadata) 1301 feed_dict, fetch_list, target_list, -> 1302 status, run_metadata) 1303
C:\ProgramData\Anaconda3\lib\site-packages\tensorflow\python\framework\errors_impl.py in exit(self, type_arg, value_arg, traceback_arg) 472 compat.as_text(c_api.TF_Message(self.status.status)), --> 473 c_api.TF_GetCode(self.status.status)) 474 # Delete the underlying status object from memory otherwise it stays alive
InvalidArgumentError: Labels length is zero in batch 4 [[Node: ctc/CTCLoss = CTCLoss[ctc_merge_repeated=true, ignore_longer_outputs_than_inputs=false, preprocess_collapse_repeated=false, _device="/job:localhost/replica:0/task:0/device:CPU:0"](ctc/Log, ctc/ToInt64, ctc/ToInt32_2, ctc/ToInt32_1)]]
During handling of the above exception, another exception occurred:
InvalidArgumentError Traceback (most recent call last)
@lchigoc 首先我用的是python2.7,所以我不确定以下说的是否能够解决你的问题,你可以试试先。
看到有这个错误:InvalidArgumentError: Labels length is zero in batch 4 我这里之前也报过类似的错误,跟踪了一下,貌似是变量 i 被改变了。所以我改了一下代码,把以下这行: labels[i,:len(str)] =[int(i)-1 for i in str] 改为 nnn = [int(x)-1 for x in str] labels[i,:len(str)] =nnn 然后就没有再出现过这个问题了。你先试试,看看是否有效果吧。
你好,在py3上面依然是一样的问题,我再查找一下错误。另外我查阅了一下win10上面是没有python2.7+tensorflow版本的,请问你的win10下面能够运行tensorflow? 另外,您不方便提供模型是嘛?其实我是想做个识别程序
你好,我没有用 windows,用的是 ubuntu 系统。我之前用的是py2,没有报错,但字符乱码是问题,我现在也在改用py3跑,暂时还没有出现错误。(对了,我不是用ipynb在跑,我是导出为python文件在跑的)
然后目前我并非不方便提供模型,只是我也弄这个没多久,之前也走了一些弯路,最近几天才开始真正开始训练,然后因为训练的速度很慢,所以目前我也没有训练好的模型。
@gary-jiao 我这边训练的时候loss一直降,但是auc一直为0,你有没有遇到这个情况
@zhangtao22 这个倒没有,我用的数据是从Readme里提供的地址下载的,训练的时候一切正常,所有指标都正常。如果你没有改过代码,建议确认一下数据是否正确吧。 对了,你说的训练是指densenet-ocr吧?我说的这个。。。
@gary-jiao 我试了densenet,这个收敛要快一点,我用第一个crnn里面的,把数据集改成densenet里面的数据集,收敛相当慢,跑了半个小时accuracy还是0.另外我把labels = np.ones([batchsize, maxlabellength],dtype=np.int)10000改成了这样,如果labels = np.ones([batchsize, maxlabellength]) 10000他这个label是浮点数,并且不准确,比如283.3,我很奇怪他这个labels怎么去和字符表对照,字符表都是整数啊
@zhangtao22 crnn的我还没有运行过,所有那边的情况暂时不了解,后面有时间我再试试。 然后关于你说的加了 dtype=np.int,虽然默认情况下返回的是 float64 类型,但实际上label值应该不会变成你说的那种情况,因为label数据其实就是定义在train.txt文件里,那些原始值都不会出现小数。而且在代码里,已经做了 int 处理:[int(n) - 1 for n in str],所以最终得到的label里的值应该是类似于 283.0, 139.0 这样的值。
@gary-jiao 你把值打印出来看看,我也是很奇怪为啥会出现浮点数
@zhangtao22 这是label里一行的数据,可以看到,都是 .0 ,也就是小数点后面都是0的。 <class 'list'>: [5.0, 47.0, 301.0, 18.0, 18.0, 75.0, 503.0, 123.0, 365.0, 29.0, 10000.0, 10000.0, 10000.0, 10000.0, 10000.0, 10000.0, 10000.0, 10000.0, 10000.0, 10000.0]
[int(n) - 1 for n in str] 这行代码就决定了小数点后面肯定是0啊
@gary-jiao 'labels:', array([ 35., 234., 160., 183., 135., 295., 38., 49., 232., 97., 10000., 10000., 10000., 10000., 10000., 10000., 10000., 10000., 10000., 10000.]), 0, '23308781_1001774108.jpg') ('labels:', array([1.740e+02, 4.800e+01, 1.026e+03, 2.000e+00, 3.624e+03, 9.180e+02, 7.170e+02, 1.065e+03, 1.000e+00, 3.780e+02, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04]), 1, '48670406_2570023032.jpg') ('labels:', array([4.500e+01, 4.700e+01, 1.190e+02, 6.100e+01, 0.000e+00, 6.270e+02, 1.019e+03, 3.000e+00, 2.140e+02, 1.374e+03, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04]), 2, '42315359_2369986456.jpg') ('labels:', array([1.490e+02, 5.410e+02, 3.580e+02, 6.200e+01, 2.000e+00, 2.400e+02, 1.873e+03, 1.880e+02, 3.490e+02, 9.500e+01, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04, 1.000e+04]), 3, '54119359_997161704.jpg') ('labels:', array([ 1830., 1188., 1298., 1298., 99., 35., 629., 930., 598., 1800., 10000., 10000., 10000., 10000., 10000., 10000., 10000., 10000., 10000., 10000.]), 4, '32084656_1555200101.jpg') ('labels:', array([5.87e+02, 8.90e+01, 4.63e+02, 6.43e+02, 4.00e+00, 2.80e+01, 8.80e+01, 8.80e+01, 9.10e+01, 8.20e+01, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04]), 5, '49562906_2061047701.jpg') ('labels:', array([8.90e+01, 6.10e+01, 1.00e+00, 2.44e+02, 3.32e+02, 4.81e+02, 3.50e+02, 3.80e+01, 2.00e+02, 4.50e+01, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04]), 6, '31059906_3617498096.jpg') ('labels:', array([1.40e+01, 1.50e+01, 3.60e+02, 1.62e+02, 2.50e+01, 6.02e+02, 5.01e+02, 1.00e+00, 4.82e+02, 5.18e+02, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04, 1.00e+04]), 7, '32548171_3077989004.jpg') 我也是很奇怪
@gary-jiao 你联系方式多少,一起探讨一下ocr
那些值没什么问题啊,只是显示的问题,其实全部都是小数点后面为0的浮点数。 5.87e+02 = 587.0 8.80e+01 = 88.0 1.019e+03 = 1019.0
@gary-jiao 。。。 你这个训练速度怎么样,是用的他的默认优化方法嘛?一个epoch大概多长时间,训练了几个epoch啊?
我是两块1080ti显卡,每个epoch大概2200s左右,用了44个epoch,acc到98.4。 然后因为原始的数据集太大,所以train和val都只取了原来的 1/10,生成 train_s.txt 和 val_s.txt, 代码里 steps_per_epoch =3279601/10 // batch_size, validation_steps = 364400/10 其他的就没有改动了。
@gary-jiao 你代码改成两个gpu并行的了嘛?
Keras 默认就支持多GPU啊,我没有改过这方面的代码,训练开始后,两个显卡内存已经是完全占满的,只不过在使用率上,只有第一块显卡有数值,第二块显卡只是显存被占满,貌似只是贡献了显存一样,太具体的我也没有细细研究,反正都用上了....
@gary-jiao 请教下,能分享一下训练好的模型文件吗?
@zhdy008 ,没问题。
链接: https://pan.baidu.com/s/1Gq7--nm59lYtbjzhI5Q2-g 密码: jph9
@gary-jiao 显卡是占了,但是并不是用了
您好,我换了ubuntu+python2.7的环境以后,这个文档char_std_5990.txt'提示utf-8' codec can't decode byte 0x8b in position 1: invalid start byte,,我按照网上的办法并没有奏效,我使用ubuntu默认文档编辑器打开提示含有无效字符,汉字都显示为乱码,请问您当时是如何解决的
@zhangtao22 哦,那这个应该是我没有弄清楚。并行GPU还是mxnet好用,如果你那边需要,可以考虑改成mxnet版本的,哈哈。。。
@lchigoc 不好意思,前面误导你了,我之前用py2,也是遇到这个编码问题,所以我及时改变方向,用py3了。你那边如果已经有 ubuntu 环境了,也不需要做太大改动,使用py3去运行就好了。
对了,关于你说的使用 ubuntu 文档编辑器打开是乱码的问题,是因为那个文件的存储格式默认是 acsii的,我是在 windows 下面用记事本打开,然后另存的时候,选择utf-8 编码搞定的。
好的,您能说一下可以运行的具体的配置版本号吗?python3.5或者python3.6这些区别
Ubuntu 16.05, python 3.6
以下列的不一定全,你根据情况再看
easydict
keras==2.0.8
Cython
opencv-python
matplotlib
pillow
h5py
lmdb
mahotas
@gary-jiao mxnet不会玩啊
@gary-jiao 谢谢哈,这个是 densent_ocr 目录那个吗?为啥CRNN那个不收敛呢?精度到0.8左右就不上升了
@gary-jiao 你昨天分享给我的模型加载不了: InvalidArgumentError: Dimension 1 in both shapes must be equal, but are 5990 and 5991. Shapes are [768,5990] and [768,5991]. for 'Assign_479' (op: 'Assign') with input shapes: [768,5990], [768,5991]. 好像多一个char?为什么呢?
@zhdy008 crnn那个我还没有去弄,所以也不知道情况。 至于分享的那个模型,是densent_ocr的,然后之前忘记说了,我还稍微改了一些代码,就是关于字符集的处理那里: 原来的代码是char = char[1:] + '卍' 我改成了:char = ' ' + char[5:] + '卍' 因为那个char文件里的第一行blank,应该指一个空格,如果不做处理,那么字符集里面就会有 l,a,n,k 这4个字符,而不包含空格,所以我改了一下。训练和test的代码一样,都要改的。
记性不太好了,老是忘记改过什么。。。。。 ^_^
@gary-jiao 我也改了文件,不过是改的数据文件,把第一行改成一个字符就好了,然后我比对了下识别结果,在最后又多加了一个字符,就好了。多谢您了!
@gary-jiao 你好!请教一下,我在windows下解压那个360万的文件,大约要10个小时,你在Ubuntu下大约要多久?我现在训练的时候发现GPU不能用满,都卡在磁盘IO上,怀疑是windows操作系统读写磁盘效率问题导致的。想问一下是不是Ubuntu在这方面好一些?
@colinlin1982 具体多长时间我还真不知道,因为我是下班前开始解压的,然后第二天早上来是已经完成了。
我这边训练的时候,GPU占用是满的,但使用率也不算太高,印象中应该也只是在60%吧。不过我不是使用全部数据训练的,我是弄了1/10的数据出来用的。因为最终效果还不错,所以也没有准备使用全部数据来训练了。
@gary-jiao ,您好,请教一下,感觉readme里面提供的书据集里面包含的字符有很多不是常用字,而常用字有些也没有,就是你训练的模型在真实运用中效果怎么样,就比如自己用手机拍的图片,识别得怎么样
@Banyueqin 这个我没有细看,我训练完之后,是从网络上找了一些故事书的图片,做的测试,测试效果还是很不错的。对于那种不是正常角度的图片,我还没有试过。
您好,请问如果想要调用您给的模型文件,densent-test文件还需要作出怎样的更改
@Banyueqin @gary-jiao 数据集足够用了,手机拍的图片也没问题。事实上已经可以识别绝大部分的扫描档,手机拍照文字,数据集里包含了光照、轻微旋转、透视变换、模糊、噪声情况。dont worry ,just train it.
@xiaomaxiao,但是有些常用字他没有啊
我用QQ截图工具从QQ聊天记录里面截取了8张图片,然后用densenet-ctc-ocr进行识别,效果不怎么好。 图片下载地址: https://pan.baidu.com/s/1cdrHKD0Zsebsf3BGpj8PZw @xiaomaxiao 我按照全量数据训练了5个epochs,效果不好,存在吞字的问题。 @gary-jiao 我下载了你训练的模型,效果也不好。
@colinlin1982 我试了一下,你提供的这些图片,识别率还算可以的啊,以下是6和7和结果: 《6.png》 get result: ['影', '像', '采', '集', '界', '面', '大', '拍', '照', '按', '钮', '灰', '图', '后', ',', '还', '能', '再', '次', '点', '击', '的', '问', '题'] Predict: 影像采集界面大拍照按钮灰图后,还能再次点击的问题
《7.png》 get result: ['‘', '@', '林', '锦', '云', '-', '客', '服', '处', '理', '了'] Predict: ‘@林锦云-客服处理了
哦,对了,我在看代码时又发现,我在den test的代码里还改了一句: nn = [id_to_char[x + 1] for x in out[0]] 原来的代码是 id_to_char[x],可能是我训练的时候改过代码,所以跟原始的代码产生了偏移。
@zhdy008 你好,在遇到InvalidArgumentError: Dimension 1 in both shapes must be equal, but are 5990 and 5991. Shapes are [768,5990] and [768,5991]. for 'Assign_479' (op: 'Assign') with input shapes: [768,5990], [768,5991]. 好像多一个char?问题你是怎么解决的?看你说的没怎么看明白,是在char_std_5990.txt文件中第一行加个字符在末尾行加个字符吗?还是怎么解决?
我使用了训练集跑densent-ocr.py,显卡是gtx1070,16G内存,CPU i7 8700,nvidia-smi查看信息,显卡是在跑的,但是发现并没有多快,一个epoch都需要4个多小时。
后面acc值变化很慢了
@zhdy008 ,没问题。
链接: https://pan.baidu.com/s/1Gq7--nm59lYtbjzhI5Q2-g 密码: jph9
@gary-jiao 请问可以mail训练好的模型给我吗?我在台湾念书IP被挡着,没办法下载,我GPU又不太行也不好自己练 MAIL:stu12140513@gmail.com 感谢~
训练数据集下载太慢了 @xiaomaxiao 有其他方式下载吗?
@xiaomaxiao 这个数据集你是如何生成的?
@zhdy008 你好,在遇到InvalidArgumentError: Dimension 1 in both shapes must be equal, but are 5990 and 5991. Shapes are [768,5990] and [768,5991]. for 'Assign_479' (op: 'Assign') with input shapes: [768,5990], [768,5991]. 好像多一个char?问题你是怎么解决的?看你说的没怎么看明白,是在char_std_5990.txt文件中第一行加个字符在末尾行加个字符吗?还是怎么解决?
你这个问题解决了吗?我也报了同样的错
您好我是一名初学者,我解压数据图片后训练发现报错显示无法找到图片,我觉得可能是路径问题,请问应该吧数据集放在那里或者在哪个地方修改图像路径的配置