Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问一下模型最后输出节点名称是什么? #35

Open
float123 opened this issue Jul 2, 2019 · 18 comments
Open

请问一下模型最后输出节点名称是什么? #35

float123 opened this issue Jul 2, 2019 · 18 comments

Comments

@float123
Copy link

float123 commented Jul 2, 2019

作者你好,我需要将模型转为pb格式,但是转化过程中需要设置output node names,然而我的电脑没办法对模型进行可视化,阅读代码也没找到哪里有设置输出节点,所以想请问一下模型最后输出节点的名称是什么?谢谢了

@liuheng92
Copy link
Owner

这个算法我没有转pb,你可以自己打印节点名

@dsandii
Copy link

dsandii commented Jul 22, 2019

@float123 Did you ever find the output node names? I'm able to print all nodes in the graph, but I can't tell which nodes are input and output.

@li10141110
Copy link

@dsandii @liuheng92 input_key = 'input_images:0';output_key = 'resnet_v1_50/conv1/BatchNorm/moving_mean:0'
I think maybe these two are input and output and successfully save the pb file, but i stucked at the following code when i evaluate the pb model:
meta_graph_def = tf.saved_model.loader.load(sess, [tag_constants.SERVING],'saved_model_transed/6')
Any help?

@li10141110
Copy link

def main_eval_1(argv=None):
import os
os.environ['CUDA_VISIBLE_DEVICES'] = FLAGS.gpu_list

try:
    os.makedirs(FLAGS.output_dir)
except OSError as e:
    if e.errno != 17:
        raise

from tensorflow.python.saved_model import tag_constants
signature_key = tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY
input_key = 'input_images:0';output_key = 'resnet_v1_50/conv1/BatchNorm/moving_mean:0'
with tf.get_default_graph().as_default():
    signature_key = tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY

    input_images = tf.placeholder(tf.float32, shape=[None, None, None, 3], name='input_images')
    global_step = tf.get_variable('global_step', [], initializer=tf.constant_initializer(0), trainable=False)
    seg_maps_pred = model.model(input_images, is_training=False)

    variable_averages = tf.train.ExponentialMovingAverage(0.997, global_step)
    saver = tf.train.Saver(variable_averages.variables_to_restore())
    with tf.Session(config=tf.ConfigProto(allow_soft_placement=True)) as sess:

        # build model from check_point
        # ckpt_state = tf.train.get_checkpoint_state(FLAGS.checkpoint_path)
        # model_path = os.path.join(FLAGS.checkpoint_path, os.path.basename(ckpt_state.model_checkpoint_path))
        # logger.info('Restore from {}'.format(model_path))
        # saver.restore(sess, model_path)
        # build model from saved
        meta_graph_def = tf.saved_model.loader.load(sess, [tag_constants.SERVING],'saved_model_transed/6')


        #tf.saved_model.loader.load(sess, ["serve"], "./model")
        signature = meta_graph_def.signature_def  # 保存了模型中所有的服务函数
        graph = tf.get_default_graph()
        x_tensor_name = signature[signature_key].inputs[input_key].name
        y_tensor_name = signature[signature_key].outputs[output_key].name
        x = sess.graph.get_tensor_by_name(x_tensor_name)
        y = sess.graph.get_tensor_by_name(y_tensor_name)
        im_fn_list = get_images()
        for im_fn in im_fn_list:
            im = cv2.imread(im_fn)[:, :, ::-1]
            logger.debug('image file:{}'.format(im_fn))

            start_time = time.time()
            im_resized, (ratio_h, ratio_w) = resize_image(im)
            h, w, _ = im_resized.shape
            # options = tf.RunOptions(trace_level = tf.RunOptions.FULL_TRACE)
            # run_metadata = tf.RunMetadata()
            timer = {'net': 0, 'pse': 0}
            start = time.time()
            seg_maps = sess.run(y, feed_dict={x: [im_resized]})
            print('seg_maps',seg_maps)
            seg_maps = sess.run(seg_maps_pred, feed_dict={input_images: [im_resized]})
            timer['net'] = time.time() - start
            # fetched_timeline = timeline.Timeline(run_metadata.step_stats)
            # chrome_trace = fetched_timeline.generate_chrome_trace_format()
            # with open(os.path.join(FLAGS.output_dir, os.path.basename(im_fn).split('.')[0]+'.json'), 'w') as f:
            #     f.write(chrome_trace)

            boxes, kernels, timer = detect(seg_maps=seg_maps, timer=timer, image_w=w, image_h=h)
            logger.info('{} : net {:.0f}ms, pse {:.0f}ms'.format(
                im_fn, timer['net'] * 1000, timer['pse'] * 1000))

            if boxes is not None:
                boxes = boxes.reshape((-1, 4, 2))
                boxes[:, :, 0] /= ratio_w
                boxes[:, :, 1] /= ratio_h
                h, w, _ = im.shape
                boxes[:, :, 0] = np.clip(boxes[:, :, 0], 0, w)
                boxes[:, :, 1] = np.clip(boxes[:, :, 1], 0, h)

            duration = time.time() - start_time
            logger.info('[timing] {}'.format(duration))

            # save to file
            if boxes is not None:
                res_file = os.path.join(
                    FLAGS.output_dir,
                    '{}.txt'.format(os.path.splitext(
                        os.path.basename(im_fn))[0]))

                with open(res_file, 'w') as f:
                    num = 0
                    for i in xrange(len(boxes)):
                        # to avoid submitting errors
                        box = boxes[i]
                        if np.linalg.norm(box[0] - box[1]) < 5 or np.linalg.norm(box[3] - box[0]) < 5:
                            continue

                        num += 1

                        f.write('{},{},{},{},{},{},{},{}\r\n'.format(
                            box[0, 0], box[0, 1], box[1, 0], box[1, 1], box[2, 0], box[2, 1], box[3, 0], box[3, 1]))
                        cv2.polylines(im[:, :, ::-1], [box.astype(np.int32).reshape((-1, 1, 2))], True,
                                      color=(255, 255, 0), thickness=2)
            if not FLAGS.no_write_images:
                img_path = os.path.join(FLAGS.output_dir, os.path.basename(im_fn))
                cv2.imwrite(img_path, im[:, :, ::-1])

@linhaibo123
Copy link

这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法

@Asuna88
Copy link

Asuna88 commented Nov 19, 2019

我是这么处理多线程转单线程的,不知道对否,大神请指点。
在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。
( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, )
(好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?)

多谢指点。

 #去除多线程
        '''
        for _ in range(workers):
            if self._use_multiprocessing:
                # Reset random seed else all children processes
                # share the same seed
                np.random.seed(self.random_seed)
                thread = multiprocessing.Process(target=data_generator_task)
                thread.daemon = True
                if self.random_seed is not None:
                    self.random_seed += 1
            else:
                thread = threading.Thread(target=data_generator_task)
            self._threads.append(thread)
            thread.start()
        '''
        thread = multiprocessing.Process(target=data_generator_task)
        thread.daemon = True
        thread.start()

@Asuna88
Copy link

Asuna88 commented Nov 19, 2019

这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法

你好

@Asuna88
Copy link

Asuna88 commented Nov 19, 2019

这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法

你好,,我是这么处理多线程转单线程的,不知道对否,大神请指点。
在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。
( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, )
(好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?)

多谢指点。

#去除多线程
'''
for _ in range(workers):
if self._use_multiprocessing:
# Reset random seed else all children processes
# share the same seed
np.random.seed(self.random_seed)
thread = multiprocessing.Process(target=data_generator_task)
thread.daemon = True
if self.random_seed is not None:
self.random_seed += 1
else:
thread = threading.Thread(target=data_generator_task)
self._threads.append(thread)
thread.start()
'''
thread = multiprocessing.Process(target=data_generator_task)
thread.daemon = True
thread.start()

@linhaibo123
Copy link

这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法

你好,,我是这么处理多线程转单线程的,不知道对否,大神请指点。
在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。
( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, )
(好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?)

多谢指点。

#去除多线程
'''
for _ in range(workers):
if self._use_multiprocessing:

Reset random seed else all children processes

share the same seed

np.random.seed(self.random_seed)
thread = multiprocessing.Process(target=data_generator_task)
thread.daemon = True
if self.random_seed is not None:
self.random_seed += 1
else:
thread = threading.Thread(target=data_generator_task)
self._threads.append(thread)
thread.start()
'''
thread = multiprocessing.Process(target=data_generator_task)
thread.daemon = True
thread.start()

我没有这么麻烦,在train.py 里面直接注释掉dataloader 中multiprocess获取数据的部分,然后改成直接调用获取数据数据,就改了一行代码、
#data_generator = data_provider.get_batch(num_workers=FLAGS.num_readers,
input_size=FLAGS.input_size,
batch_size=FLAGS.batch_size_per_gpu * len(gpus))
data_generator = data_provider.generator(input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus))

@Asuna88
Copy link

Asuna88 commented Nov 19, 2019

这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法

你好,,我是这么处理多线程转单线程的,不知道对否,大神请指点。
在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。
( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, )
(好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?)
多谢指点。
#去除多线程
'''
for _ in range(workers):
if self._use_multiprocessing:

Reset random seed else all children processes

share the same seed

np.random.seed(self.random_seed)
thread = multiprocessing.Process(target=data_generator_task)
thread.daemon = True
if self.random_seed is not None:
self.random_seed += 1
else:
thread = threading.Thread(target=data_generator_task)
self._threads.append(thread)
thread.start()
'''
thread = multiprocessing.Process(target=data_generator_task)
thread.daemon = True
thread.start()

我没有这么麻烦,在train.py 里面直接注释掉dataloader 中multiprocess获取数据的部分,然后改成直接调用获取数据数据,就改了一行代码、
#data_generator = data_provider.get_batch(num_workers=FLAGS.num_readers,
input_size=FLAGS.input_size,
batch_size=FLAGS.batch_size_per_gpu * len(gpus))
data_generator = data_provider.generator(input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus))

恩恩,好的,非常谢谢你啊。

可以再请请教下,它的这个数据集格式是按照icidar2017来的吧,就是图片和相应的标注文件要在同一个文件夹里面, 例如001.jpg和001.txt,然后001.txt里面的内容是 :275,809,427,804,427,858,286,858,"文本"
请问是这样的么? 4个点的坐标值后面 需要加么?

就是说,下面格式是哪个对呢?
275,809,427,804,427,858,286,858,"文本"
275,809,427,804,427,858,286,858, 0, "文本"

@Asuna88
Copy link

Asuna88 commented Nov 19, 2019

刚才有漏打了,就是想请问下,
4个点的坐标值后面 需要加difficult这个数值不? 我看icdar2017的数据集里面好像都有这个difficult选项,但是博主的code主页上面举的一个例子是没有这个difficult的,不知道会不会影响训练。

@apple2333cream
Copy link

楼主请问下,pse.cpp 这个在win10环境下要怎样才能正常使用啊?

@li10141110
Copy link

li10141110 commented Nov 20, 2019 via email

@linhaibo123
Copy link

八个数字后面加文本string,因为是训练检测模型,这个string我写的是null(随便写都可以),可以正常训练。

On Tue, Nov 19, 2019 at 2:11 PM Asuna88 @.***> wrote: 这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法 你好,,我是这么处理多线程转单线程的,不知道对否,大神请指点。 在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。 ( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, ) (好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?) 多谢指点。 #去除多线程 ''' for _ in range(workers): if self._use_multiprocessing: Reset random seed else all children processes share the same seed np.random.seed(self.random_seed) thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True if self.random_seed is not None: self.random_seed += 1 else: thread = threading.Thread(target=data_generator_task) self._threads.append(thread) thread.start() ''' thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True thread.start() 我没有这么麻烦,在train.py 里面直接注释掉dataloader 中multiprocess获取数据的部分,然后改成直接调用获取数据数据,就改了一行代码、 #data_generator = data_provider.get_batch(num_workers=FLAGS.num_readers, input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) data_generator = data_provider.generator(input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) 恩恩,好的,非常谢谢你啊。 可以再请请教下,它的这个数据集格式是按照icidar2017来的吧,就是图片和相应的标注文件要在同一个文件夹里面, 例如001.jpg和001.txt,然后001.txt里面的内容是 :275,809,427,804,427,858,286,858,"文本" 请问是这样的么? 4个点的坐标值后面 需要加么? 就是说,下面格式是哪个对呢? 275,809,427,804,427,858,286,858,"文本" 275,809,427,804,427,858,286,858, 0, "文本" — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#35?email_source=notifications&email_token=AGJPJAZTGQTVHEJB5E7YGYTQUN7P7A5CNFSM4H4YEID2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEM7POY#issuecomment-555349947>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGJPJA5OOQLKJU3WNLAKGDDQUN7P7ANCNFSM4H4YEIDQ .

随便写什么都可以,就不要写###的,比如 0,1,2,3,4,5,6,7,xxx
###会过滤掉,

@Asuna88
Copy link

Asuna88 commented Nov 21, 2019

八个数字后面加文本string,因为是训练检测模型,这个string我写的是null(随便写都可以),可以正常训练。

On Tue, Nov 19, 2019 at 2:11 PM Asuna88 @.***> wrote: 这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法 你好,,我是这么处理多线程转单线程的,不知道对否,大神请指点。 在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。 ( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, ) (好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?) 多谢指点。 #去除多线程 ''' for _ in range(workers): if self._use_multiprocessing: Reset random seed else all children processes share the same seed np.random.seed(self.random_seed) thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True if self.random_seed is not None: self.random_seed += 1 else: thread = threading.Thread(target=data_generator_task) self._threads.append(thread) thread.start() ''' thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True thread.start() 我没有这么麻烦,在train.py 里面直接注释掉dataloader 中multiprocess获取数据的部分,然后改成直接调用获取数据数据,就改了一行代码、 #data_generator = data_provider.get_batch(num_workers=FLAGS.num_readers, input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) data_generator = data_provider.generator(input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) 恩恩,好的,非常谢谢你啊。 可以再请请教下,它的这个数据集格式是按照icidar2017来的吧,就是图片和相应的标注文件要在同一个文件夹里面, 例如001.jpg和001.txt,然后001.txt里面的内容是 :275,809,427,804,427,858,286,858,"文本" 请问是这样的么? 4个点的坐标值后面 需要加么? 就是说,下面格式是哪个对呢? 275,809,427,804,427,858,286,858,"文本" 275,809,427,804,427,858,286,858, 0, "文本" — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#35?email_source=notifications&email_token=AGJPJAZTGQTVHEJB5E7YGYTQUN7P7A5CNFSM4H4YEID2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEM7POY#issuecomment-555349947>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGJPJA5OOQLKJU3WNLAKGDDQUN7P7ANCNFSM4H4YEIDQ .

随便写什么都可以,就不要写###的,比如 0,1,2,3,4,5,6,7,xxx
###会过滤掉,

恩恩好的额,明白了,多谢啊

@Asuna88
Copy link

Asuna88 commented Nov 21, 2019

八个数字后面加文本string,因为是训练检测模型,这个string我写的是null(随便写都可以),可以正常训练。

On Tue, Nov 19, 2019 at 2:11 PM Asuna88 @.***> wrote: 这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法 你好,,我是这么处理多线程转单线程的,不知道对否,大神请指点。 在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。 ( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, ) (好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?) 多谢指点。 #去除多线程 ''' for _ in range(workers): if self._use_multiprocessing: Reset random seed else all children processes share the same seed np.random.seed(self.random_seed) thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True if self.random_seed is not None: self.random_seed += 1 else: thread = threading.Thread(target=data_generator_task) self._threads.append(thread) thread.start() ''' thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True thread.start() 我没有这么麻烦,在train.py 里面直接注释掉dataloader 中multiprocess获取数据的部分,然后改成直接调用获取数据数据,就改了一行代码、 #data_generator = data_provider.get_batch(num_workers=FLAGS.num_readers, input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) data_generator = data_provider.generator(input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) 恩恩,好的,非常谢谢你啊。 可以再请请教下,它的这个数据集格式是按照icidar2017来的吧,就是图片和相应的标注文件要在同一个文件夹里面, 例如001.jpg和001.txt,然后001.txt里面的内容是 :275,809,427,804,427,858,286,858,"文本" 请问是这样的么? 4个点的坐标值后面 需要加么? 就是说,下面格式是哪个对呢? 275,809,427,804,427,858,286,858,"文本" 275,809,427,804,427,858,286,858, 0, "文本" — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#35?email_source=notifications&email_token=AGJPJAZTGQTVHEJB5E7YGYTQUN7P7A5CNFSM4H4YEID2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEM7POY#issuecomment-555349947>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGJPJA5OOQLKJU3WNLAKGDDQUN7P7ANCNFSM4H4YEIDQ .

恩恩,多谢啊,
另外再请教下,这个PSENet有没有测试 recall, precision的脚本,(类似fater 的那种eval.py脚本),我想了解下,怎么评估召回率和精准率呢,
多谢~

@Asuna88
Copy link

Asuna88 commented Nov 21, 2019

八个数字后面加文本string,因为是训练检测模型,这个string我写的是null(随便写都可以),可以正常训练。

On Tue, Nov 19, 2019 at 2:11 PM Asuna88 @.***> wrote: 这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法 你好,,我是这么处理多线程转单线程的,不知道对否,大神请指点。 在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。 ( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, ) (好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?) 多谢指点。 #去除多线程 ''' for _ in range(workers): if self._use_multiprocessing: Reset random seed else all children processes share the same seed np.random.seed(self.random_seed) thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True if self.random_seed is not None: self.random_seed += 1 else: thread = threading.Thread(target=data_generator_task) self._threads.append(thread) thread.start() ''' thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True thread.start() 我没有这么麻烦,在train.py 里面直接注释掉dataloader 中multiprocess获取数据的部分,然后改成直接调用获取数据数据,就改了一行代码、 #data_generator = data_provider.get_batch(num_workers=FLAGS.num_readers, input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) data_generator = data_provider.generator(input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) 恩恩,好的,非常谢谢你啊。 可以再请请教下,它的这个数据集格式是按照icidar2017来的吧,就是图片和相应的标注文件要在同一个文件夹里面, 例如001.jpg和001.txt,然后001.txt里面的内容是 :275,809,427,804,427,858,286,858,"文本" 请问是这样的么? 4个点的坐标值后面 需要加么? 就是说,下面格式是哪个对呢? 275,809,427,804,427,858,286,858,"文本" 275,809,427,804,427,858,286,858, 0, "文本" — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#35?email_source=notifications&email_token=AGJPJAZTGQTVHEJB5E7YGYTQUN7P7A5CNFSM4H4YEID2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEM7POY#issuecomment-555349947>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGJPJA5OOQLKJU3WNLAKGDDQUN7P7ANCNFSM4H4YEIDQ .

随便写什么都可以,就不要写###的,比如 0,1,2,3,4,5,6,7,xxx
###会过滤掉,

对了,还想再请教下目前 PSENet有没有测试 recall, precision的脚本呢?(类似fater 的那种eval.py)
非常谢谢

@liuheng92
Copy link
Owner

八个数字后面加文本string,因为是训练检测模型,这个string我写的是null(随便写都可以),可以正常训练。

On Tue, Nov 19, 2019 at 2:11 PM Asuna88 @.***> wrote: 这个模型我down下来跑过,里面的多进程会导致内存溢出,每次step内存持续变大,初步估计自动回收机制无法实现实时回收,手动gc也失效。我将generator去掉,单进程跑,不会出现溢出,目前还没完美的解决办法 你好,,我是这么处理多线程转单线程的,不知道对否,大神请指点。 在data_util.py文件里面,注释掉下面几句话,然后再补充了三句话,请问大神这样做对否。 ( 请问如果写成 workers=1, max_queue_size =2 , 这个是表示什么意思呢, ) (好像线程thread的增加是这句话self._threads.append(thread) 作用的吗?) 多谢指点。 #去除多线程 ''' for _ in range(workers): if self._use_multiprocessing: Reset random seed else all children processes share the same seed np.random.seed(self.random_seed) thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True if self.random_seed is not None: self.random_seed += 1 else: thread = threading.Thread(target=data_generator_task) self._threads.append(thread) thread.start() ''' thread = multiprocessing.Process(target=data_generator_task) thread.daemon = True thread.start() 我没有这么麻烦,在train.py 里面直接注释掉dataloader 中multiprocess获取数据的部分,然后改成直接调用获取数据数据,就改了一行代码、 #data_generator = data_provider.get_batch(num_workers=FLAGS.num_readers, input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) data_generator = data_provider.generator(input_size=FLAGS.input_size, batch_size=FLAGS.batch_size_per_gpu * len(gpus)) 恩恩,好的,非常谢谢你啊。 可以再请请教下,它的这个数据集格式是按照icidar2017来的吧,就是图片和相应的标注文件要在同一个文件夹里面, 例如001.jpg和001.txt,然后001.txt里面的内容是 :275,809,427,804,427,858,286,858,"文本" 请问是这样的么? 4个点的坐标值后面 需要加么? 就是说,下面格式是哪个对呢? 275,809,427,804,427,858,286,858,"文本" 275,809,427,804,427,858,286,858, 0, "文本" — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#35?email_source=notifications&email_token=AGJPJAZTGQTVHEJB5E7YGYTQUN7P7A5CNFSM4H4YEID2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEM7POY#issuecomment-555349947>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGJPJA5OOQLKJU3WNLAKGDDQUN7P7ANCNFSM4H4YEIDQ .

随便写什么都可以,就不要写###的,比如 0,1,2,3,4,5,6,7,xxx
###会过滤掉,

对了,还想再请教下目前 PSENet有没有测试 recall, precision的脚本呢?(类似fater 的那种eval.py)
非常谢谢

我的仓库里有,但是不同的问题最好重新开一个issue,方便别人查看,谢谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants