some important predefined subclass of passes

some important predefined subclass of passes

ModulePass

This is the most general superclass. By inheriting this class we allow the entire module to be analyzed at once. The functions within the module may not be referred to in a particular order. To use it, write a subclass that inherits from the ModulePass subclass and overloads the runOnModule function.

  • Note: let’s look into the three virtual methods that the Pass classes override:
    • doInitialization: This is meant to do initialization stuff that does not depend on the current function being processed.
    • runOn{PassType}: This is the method where we should implement our subclass for the functionality of the pass. This will be runOnFunction for FunctionPass, runOnLoop for LoopPass, and so on.
    • doFinalization: This is called when runOn{PassType} has finished doing the job for every function in the program.

FunctionPass

These passes execute on each function present in the module, independent from other functions in the module. There is no defined order in which the functions will be processed. They are not allowed to modify functions other than the one being processed, and any addition or deletion of functions from the current module is also not allowed. To implement FunctionPass we might need to overload three virtual functions mentioned earlier by implementing in the runOnFunction method.

BasicBlockPass

These passes work on basic blocks one at a time, independently of other basic blocks present in the program. They are not allowed to add or delete any new basic block or change the CFG. They are not allowed to do things that FunctionPass is not allowed to. To implement, they can override the doInitialization and doFinalization methods of FunctionPass, or overload their own virtual methods for the two methods mentioned earlier and the runOnBasicBlock method.

LoopPass

These passes work on each loop in the function, independent of all other loops within the function. Loops are processed in such a way that the outermost loop is executed the last. To implement LoopPass we need to overload the doInitialization, doFinalization, and runOnLoop methods.

### LabelImg 中预定义标签或配置 LabelImg 是一款用于图像标注的强大工具,支持多种类型的标注工作。对于预定义标签或配置文件的设置,在启动程序前可以通过编辑特定的 XML 文件来完成。 #### 配置文件路径与结构 默认情况下,`labelimg` 使用名为 `predefined_classes.txt` 的文本文件存储预定义标签列表。此文件通常位于用户的主目录下 `.labelme/labels.txt` 或者项目根目录内[^1]: ```plaintext # ~/.labelme/labels.txt or project_root/predefined_classes.txt cat dog person car ... ``` 每行代表一个类别名称,这些类别的顺序决定了界面中的显示次序以及保存时使用的索引编号。 #### 自定义配置方法 为了更灵活地管理标签集,还可以创建自定义配置文件并指定其位置作为命令行参数传递给 `labelimg` 启动脚本。这允许不同任务之间快速切换不同的标签集合而无需手动修改源码内的硬编码部分: ```bash labelimg --labels /path/to/custom_labels.txt ``` 通过这种方式可以轻松实现多套标签方案之间的转换,并保持良好的可维护性和扩展性。 #### Python API 接口调用 除了图形界面外,也可以利用官方提供的Python接口来进行批量处理或其他自动化操作。此时可通过编程方式加载外部定义好的标签表单: ```python from labelimg import LabelFile # 加载已有的标签映射关系 custom_label_file = "/path/to/custom_labels.txt" with open(custom_label_file, 'r') as f: lines = f.readlines() classes = [line.strip() for line in lines] print(f"Loaded {len(classes)} custom classes.") ``` 上述代码片段展示了如何读取来自本地磁盘上的纯文本文件并将其中的内容解析成可供后续逻辑使用的字符串数组形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值