Paddle.fluid之模型inference

本文介绍了一个使用PaddlePaddle框架实现的反欺骗模型的推理过程。该模型支持两种不同版本的构建方式,并提供了加载预训练权重的方法。通过定义`Antispoof`类,模型可以进行初始化并执行推理,适用于需要判断输入图像真伪的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

freezemodel.inference

import paddle.fluid as fluid

class Antispoof(object):

    def __init__(self, resume = '', use_gpu = True):
        self.use_gpu = use_gpu
        self.place = fluid.CUDAPlace(0) if self.use_gpu else fluid.CPUPlace()
        self.exe = fluid.Executor(self.place)
        self.antisp_scope = fluid.Scope()
        with fluid.scope_guard(self.antisp_scope):
            [self.inference_program, self.feed_target_names, self.fetch_targets]\
                = fluid.io.load_inference_model(
                dirname=resume,
                executor=self.exe,
                model_filename='model',
                params_filename='weights')

    def inference(self, img):
        # preprocess
        with fluid.scope_guard(self.antisp_scope):
            result = self.exe.run(
                self.inference_program,
                feed={self.feed_target_names[0]: img},
                fetch_list=self.fetch_targets)
        return result
            

unfreeze_model.inference

import paddle
import paddle.fluid as fluid
from model_zoos import antisp as model


class Antispoof(object):

    def __init__(self, resume = '', use_gpu = True):
        self.resume = resume
        self.use_gpu = use_gpu
        self.startup_prog = fluid.Program()
        self.test_prog = fluid.Program()
        self.fetch_list = self._build_program_v1()  # v1 : old_version; v2 : new_version
        self.place = fluid.CUDAPlace(0) if self.use_gpu else fluid.CPUPlace()
        self.exe = fluid.Executor(self.place)
        self.exe.run(self.startup_prog)
        self._loading_weights()

    def _build_program_v1(self):
        with fluid.program_guard(self.test_prog, self.startup_prog):
            py_reader = fluid.layers.py_reader(
                capacity=256,
                shapes=((-1, 3, in_size_h, in_size_w)),  # TODO::(h, w)
                lod_levels=[0],
                dtypes=('float32'),
                use_double_buffer=True)

            with fluid.unique_name.guard():
                image = fluid.layers.read_file(py_reader)
                output = model(image, is_test=True, alpha=1.0)
                # output.persistable = True
        return [output.name]

    def _build_program_v2(self):
        with fluid.program_guard(self.test_prog, self.startup_prog):
            with fluid.unique_name.guard():
                image = fluid.layers.data(name='image', shape=[-1, 3, in_size_h, in_size_w], dtype='float32', append_batch_size=False)
                output = model(image, is_test=True, alpha=1.0)
        return [output[0].name]

    def _loading_weights(self):
        if self.resume:
            def if_exist(var):
                has_var = os.path.exists(os.path.join(self.resume, var.name))
                if not has_var:
                    print('var: %s was not found' % (var.name))
                return has_var
            self.test_prog = self.test_prog.clone(for_test=True) # Attention !!!
            fluid.io.load_vars(self.exe, self.resume, predicate=if_exist, main_program=self.test_prog)
            print('loading weights is finished!')
        else:
            print('No pretrained model exists')

    def inference(self, img):
        # img = preprocess(img)
        # img = img[np.newaxis, :, :, :] # img.shape = (n_batch, channel, h, w)
        result = self.exe.run(
                     program=self.test_prog,
                     feed={'image': img},
                     fetch_list=self.fetch_list)
        return result

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReLuJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值