PyQt5之参数解释器的用法

PyQt5之参数解释器的用法

函数内定义

当某个函数的参数可以定义在界面函数中时,如需修改某个参数值时,可以使用parse_args方法并传入模拟的命令行参数列表,从而实现对于main主函数的参数定义。

parser = argparse.ArgumentParser()

# model arguments
parser.add_argument('--img_size', type=int, default=256,
                    help='Image resolution')
parser.add_argument('--num_domains', type=int, default=2,
                    help='Number of domains')
parser.add_argument('--latent_dim', type=int, default=16,
                    help='Latent vector dimension')
parser.add_argument('--hidden_dim', type=int, default=512,
                    help='Hidden dimension of mapping network')
parser.add_argument('--style_dim', type=int, default=64,
                    help='Style code dimension')

# weight for objective functions
parser.add_argument('--lambda_reg', type=float, default=1,
                    help='Weight for R1 regularization')
parser.add_argument('--lambda_cyc', type=float, default=1,
                    help='Weight for cyclic consistency loss')
parser.add_argument('--lambda_sty', type=float, default=1,
                    help='Weight for style reconstruction loss')
parser.add_argument('--lambda_ds', type=float, default=1,
                    help='Weight for diversity sensitive loss')
parser.add_argument('--ds_iter', type=int, default=100000,
                    help='Number of iterations to optimize diversity sensitive loss')
parser.add_argument('--w_hpf', type=float, default=1,
                    help='weight for high-pass filtering')

# training arguments
parser.add_argument('--randcrop_prob', type=float, default=0.5,
                    help='Probabilty of using random-resized cropping')
parser.add_argument('--total_iters', type=int, default=100000,
                    help='Number of total iterations')
parser.add_argument('--resume_iter', type=int, default=0,
                    help='Iterations to resume training/testing')
parser.add_argument('--batch_size', type=int, default=8,
                    help='Batch size for training')
parser.add_argument('--val_batch_size', type=int, default=32,
                    help='Batch size for validation')
parser.add_argument('--lr', type=float, default=1e-4,
                    help='Learning rate for D, E and G')
parser.add_argument('--f_lr', type=float, default=1e-6,
                    help='Learning rate for F')
parser.add_argument('--beta1', type=float, default=0.0,
                    help='Decay rate for 1st moment of Adam')
parser.add_argument('--beta2', type=float, default=0.99,
                    help='Decay rate for 2nd moment of Adam')
parser.add_argument('--weight_decay', type=float, default=1e-4,
                    help='Weight decay for optimizer')
parser.add_argument('--num_outs_per_domain', type=int, default=10,
                    help='Number of generated images per domain during sampling')

# misc
parser.add_argument('--mode', type=str, required=True,
                    choices=['train', 'sample', 'eval', 'align'],
                    help='This argument is used in solver')
parser.add_argument('--num_workers', type=int, default=4,
                    help='Number of workers used in DataLoader')
parser.add_argument('--seed', type=int, default=777,
                    help='Seed for random number generator')

# directory for training
parser.add_argument('--train_img_dir', type=str, default='data/celeba_hq/train',
                    help='Directory containing training images')
parser.add_argument('--val_img_dir', type=str, default='data/celeba_hq/val',
                    help='Directory containing validation images')
parser.add_argument('--sample_dir', type=str, default='expr/samples',
                    help='Directory for saving generated images')
parser.add_argument('--checkpoint_dir', type=str, default='expr/checkpoints',
                    help='Directory for saving network checkpoints')

# directory for calculating metrics
parser.add_argument('--eval_dir', type=str, default='expr/eval',
                    help='Directory for saving metrics, i.e., FID and LPIPS')

# directory for testing
parser.add_argument('--result_dir', type=str, default='expr/results',
                    help='Directory for saving generated images and videos')
parser.add_argument('--src_dir', type=str, default='assets/representative/celeba_hq/src',
                    help='Directory containing input source images')
parser.add_argument('--ref_dir', type=str, default='assets/representative/celeba_hq/ref',
                    help='Directory containing input reference images')
parser.add_argument('--inp_dir', type=str, default='assets/representative/custom/female',
                    help='input directory when aligning faces')
parser.add_argument('--out_dir', type=str, default='assets/representative/celeba_hq/src/female',
                    help='output directory when aligning faces')

# face alignment
parser.add_argument('--wing_path', type=str, default='expr/checkpoints/wing.ckpt')
parser.add_argument('--lm_path', type=str, default='expr/checkpoints/celeba_lm_mean.npz')

# step size
parser.add_argument('--print_every', type=int, default=10)
parser.add_argument('--sample_every', type=int, default=5000)
parser.add_argument('--save_every', type=int, default=10000)
parser.add_argument('--eval_every', type=int, default=50000)

args_list = ['--mode', 'sample', '--num_domains', '3', '--resume_iter', '100000', '--w_hpf', '0','--checkpoint_dir', 'expr/checkpoints/afhq', '--result_dir', 'expr/results/afhq', '--src_dir', self.directory_src, '--ref_dir', self.directory_ref]

# 使用parse_args方法并传入模拟的命令行参数列表
        args = parser.parse_args(args_list)
        main.main(args)

函数外定义

类似于定义在options.py这样的函数中,通过对Options类的实例化,实例化参数解释器,从而获得其中定义的参数,如果想实现修改默认参数的话,可以在options.py中定义修改函数。

def set_data(self, attr_name, data):  
        # 直接使用传入的attr_name作为属性名来设置值  
        setattr(self.args, attr_name, data)

然后调用修改即可,

set_data('dcopy_result0_bvh', '/path/to/file0.bvh')
import argparse


class Options:
    def __init__(self, argv):
        if "--" not in argv:
            self.argv = []  # as if no args are passed
        else:
            self.argv = argv[argv.index("--") + 1:]

        usage_text = (
            "Run blender in background mode with this script:"
            "  blender --background --python [main_python_file] -- [options]"
        )

        self.parser = argparse.ArgumentParser(description=usage_text)
        self.initialize()
        self.args = self.parser.parse_args(self.argv)

    def initialize(self):
        self.parser.add_argument(
            '--dcopy_result0_bvh',
            type=str,
            default='./datasets/tgt_files/XBot_inp_Gangnam Style.bvh',
            help='path of bvh file',
        )
        self.parser.add_argument(
            '--dcopy_result1_bvh',
            type=str,
            default='./datasets/tgt_files/Robot_to_Ortiz_Gangnam Style.bvh',
            help='path of bvh file',
        )
        
        self.parser.add_argument(
            '--dcopy_result2_bvh',
            type=str,
            default='./datasets/tgt_files/Robot_to_Warrok_Gangnam Style.bvh',
            help='path of bvh file',
        )

        self.parser.add_argument(
            '--dcopy_result3_bvh',
            type=str,
            default='./datasets/tgt_files/Robot_to_Mousey_Gangnam Style.bvh',
            help='path of bvh file',
        )

        self.parser.add_argument(
            '--dcopy_fbx_file0',
            type=str,
            default='./datasets/skin/XBot.fbx',
            help='path of skinned model fbx file',
        )
        self.parser.add_argument(
            '--dcopy_fbx_file1',
            type=str,
            default='./datasets/skin/Ortiz.fbx',
            help='path of skinned model fbx file',
        )
        
        self.parser.add_argument(
            '--dcopy_fbx_file2',
            type=str,
            default='./datasets/skin/Warrok W Kurniawan.fbx',
            help='path of skinned model fbx file',
        )

        self.parser.add_argument(
            '--dcopy_fbx_file3',
            type=str,
            default='./datasets/skin/Mousey.fbx',
            help='path of skinned model fbx file',
        )

        self.parser.add_argument(
            '--save_path',
            type=str,
            default='./videos/',
            help='path of output video file',
        )

        # scene parameters
        self.parser.add_argument(
            '--view', type=str, default='front', help='view of the camera'
        )

        # rendering parameters
        self.parser.add_argument(
            '--render', action='store_true', default=True, help='render an output video'
        )
        self.parser.add_argument(
            '--render_engine',
            type=str,
            default='eevee',
            help='name of preferable render engine: cycles, eevee',
        )
        self.parser.add_argument(
            '--frame_end',
            type=int,
            default=2,
            help='the index of the last rendered frame',
        )
        self.parser.add_argument(
            '--fps', type=int, default=25, help='the frame rate of rendered video'
        )
        self.parser.add_argument('--resX', type=int, default=1920, help='x resolution')
        self.parser.add_argument('--resY', type=int, default=1080, help='y resolution')

    def parse(self):
        return self.args

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在提升 PyQt5 打包的 exe 启动速度方面,有以下几个建议: 1. 使用 PyInstaller 打包时,可以添加 `--noupx` 参数,禁用 UPX 压缩,从而提高启动速度。但是,这可能会增加最终可执行文件的大小。 2. 尽可能地减少应用程序启动时需要加载的模块和资源。可以使用工具如 `pylint`、`pyflakes` 或 `mypy` 对代码进行优化,减少不必要的代码和依赖项。 3. 考虑使用 PyQt5 的静态编译版本。这样可以避免在运行时加载动态链接库和依赖项,从而加快启动速度。可以使用工具如 `pyqtdeploy` 或 `fbs` 来创建静态编译版本。 4. 优化 PyQt5 应用程序的 GUI 设计,尽量避免使用复杂的布局和过多的小部件。可以使用 Qt Designer 或 Qt Creator 工具来设计和优化 GUI。 5. 将 PyQt5 应用程序的启动优化为后台启动,即在启动时只显示一个启动界面,而不是直接显示主界面。在后台启动时,可以使用多线程或异步加载来处理资源和初始化,从而加快启动速度。 6. 对于特定的应用程序,可以使用 PyOxidizer 等工具,将 Python 解释器、依赖项和代码打包为单个可执行文件,以提高启动速度。 这些方法可能需要结合具体情况进行调整,可以通过对应用程序进行测试和比较来确定最佳方法。 ### 回答2: 要提升PyQt5打包成exe文件的启动速度,可以尝试以下几种方法: 1. 使用PyInstaller的“--onefile”选项打包成单个可执行文件。这样可以减少启动时的文件查找和加载时间。 2. 优化PyQt5的引用和导入。可以尽可能只导入程序需要的模块和类。避免不必要的导入,可以减少启动时间。 3. 使用PyQt5的“--sip”选项启用静态链接,可以避免动态链接库的加载过程,从而提升启动速度。 4. 编写高效的代码,减少不必要的计算和操作。优化算法和数据结构可以减少启动时的处理时间。 5. 考虑将一些资源文件,如图片和字体文件,打包进exe文件。这样可以减少启动时的文件读取时间。 6. 调整编译器的优化选项,如使用“-O2”或者“-O3”选项进行编译,可以提升生成的可执行文件的速度。 7. 避免使用过多的插件和第三方库,尽量保持程序的简洁和轻量化。 通过以上方法的组合,可以有效提升PyQt5打包成exe文件的启动速度,提供更好的用户体验。 ### 回答3: 要提升PyQt5打包的exe启动速度,可以采取以下几种方法: 1. 使用PyInstaller或cx_Freeze等打包工具时,可以通过设置优化选项来减小生成的可执行文件的大小,在启动时减少加载时间。例如,使用PyInstaller时可以使用--onefile或--onedir选项来减少文件大小。 2. 确保避免在打包时引入不必要的库或模块。分析项目的依赖关系,只导入使用到的模块,避免不必要的加载。 3. 尽量减少启动时需要加载的资源文件的数量和大小。在打包时,可以将资源文件转换为更小的格式,如将图片转换为更小的分辨率或更低的质量。 4. 避免在程序启动时执行复杂或耗时的初始化操作。将这些操作放在程序启动后懒加载的时机。 5. 在代码中使用多线程或异步操作来提高程序的响应性,例如使用QThread来执行耗时操作,避免阻塞主线程。 6. 对程序进行代码优化,减少不必要的计算和重复操作。使用合适的数据结构和算法来提高代码的执行效率。 7. 尽量避免使用过于复杂的GUI设计,减少界面的复杂度和加载时间。 8. 定期进行性能测试和优化,找出瓶颈并针对性地进行优化。 通过以上方法可以有效地提升PyQt5打包的exe启动速度,提升用户体验和程序的响应性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

未来视觉科技

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

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

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

打赏作者

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

抵扣说明:

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

余额充值