<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">在使用mxnet自带的im2rec.py把.lst文件转换成.rec文件时,出现EOFerror,在Github上看到的一些回答如</span><a target=_blank href="https://github.com/dmlc/mxnet/issues/2432" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">这个</a><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">,都是说windows下使用multiprocessing模块会出现这个问题。解决方法如下:</span>
打开im2rec.py,找到下面代码片:
try:
import multiprocessing
q_in = [multiprocessing.Queue() for i in range(args.num_thread)]
q_out = multiprocessing.Queue(1024)
for i in range(len(image_list)):
q_in[i % len(q_in)].put(image_list[i])
read_process = [multiprocessing.Process(target=read_worker, args=(q_in[i], q_out)) \
for i in range(args.num_thread)]
for p in read_process:
p.start()
write_process = multiprocessing.Process(target=write_worker, args=(q_out,args.prefix))
write_process.start()
for p in read_process:
p.join()
q_out.put(('finish', '', []))
write_process.join()
except ImportError:
print('multiprocessing not available, fall back to single threaded encoding')
import Queue
q_out = Queue.Queue()
record = mx.recordio.MXRecordIO(args.prefix+'.rec', 'w')
cnt = 0
pre_time = time.time()
for item in image_list:
image_encode(item, q_out)
if q_out.empty():
continue
_, s, _ = q_out.get()
record.write(s)
cnt += 1
if cnt % 1000 == 0:
cur_time = time.time()
print 'time:', cur_time - pre_time, ' count:', cnt
pre_time = cur_time
把try里面的内容和except里面的调换过来,就可以了。