# minisec **Repository Path**: FairySunny/minisec ## Basic Information - **Project Name**: minisec - **Description**: 简易的深度学习安全评估框架,参考DEEPSEC - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2021-02-01 - **Last Updated**: 2022-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 运行依赖 * pytorch torchvision scikit-image * UI依赖于tornado # 扩展接口说明 ## raw模块 ### 输入输出 * `raw.train.main` 函数为入口,传入模型名称 * 默认的数据加载器会下载训练集并保存到 `original_data/{数据集名称}/` 目录下 * 训练好的网络参数会保存到 `data/raw_models/{模型名称}.pt` ### 定义模型 * 模型定义在 `raw/models` 目录下,文件名为模型名称 * 定义 `Model` 类继承自 `raw.base_model.BaseModel` ,构造函数传入模型选项( `dict` 类型,供修改网络结构的防御使用) * `BaseModel` 的构造函数传入模型名称、训练参数( `dict` 类型)、数据集名称(如果未指定数据集名称,数据集名称与模型名称相同) * `BaseModel` 继承自 `torch.nn.Module` ,按照扩展 `torch.nn.Module` 的方式扩展 `BaseModel` * `Model` 类需要实现 `get_optimizer` 方法,返回optimizer( `torch.optim.Optimizer` ) * 默认采用 `torchvision.datasets.{数据集名称}` 数据加载器 * 可以覆写 `BaseModel` 中的 `adjust_optimizer` 方法,以实现每轮训练后调整optimizer参数 * 可以覆写 `BaseModel` 中的 `get_train_loader_transform` 方法,以实现需要时增强训练集 * 可以覆写 `BaseModel` 中的 `get_..._loader` 方法,以实现自定义数据加载器 ## attack模块 ### 输入输出 * 选择待攻击图像: `attack.select_candidates.main` 函数为入口,传入模型名称 * 使用数据加载器加载训练集 * 选择好的图像会保存到 `data/candidate_data/{模型名称}/` 目录下 * 攻击: `attack.generate.main` 函数为入口,传入模型名称、攻击名称、攻击配置 * 从 `data/candidate_data/{模型名称}/` 目录下加载选择好的图像 * 攻击生成的图像会保存到 `data/adversarial_data/{模型名称}_{攻击名称}/` 目录下 ### 定义攻击 * 攻击定义在 `attack/methods` 目录下,文件名为攻击名称 * 定义 `Attack` 类继承自 `attack.base_attack.BaseAttack` ,构造函数传入模型类实例和攻击配置 * `BaseAttack` 的构造函数传入攻击名称、模型类实例、攻击配置、每次攻击图像数量、是否为有目标攻击、是否为least-likely-class攻击 * `Attack` 类需要覆写 `batch_attack` 方法 * 可以覆写 `BaseAttack` 中的 `attack` 方法,以实现自定义攻击流程 ## defense模块 ### 输入输出 * `defense.defend.main` 函数为入口,传入模型名称、防御名称、防御配置 * 对于需要重新训练的防御,防御好的网络参数会保存到 `data/enhanced_models/{模型名称}_{防御名称}.pt` ## 定义防御 * 防御定义在 `defense/methods` 目录下,文件名为防御名称 * 定义 `Defense` 类继承自 `defense.base_defense.BaseDefense` ,构造函数传入模型名称和防御配置 * `BaseDefense` 的构造函数传入防御名称、模型名称、防御配置、是否重新训练模型、是否跳过对网络输出向量的评估 * 对于修改网络结构的防御, `Defense` 类需要覆写 `get_model_options` 方法 * 对于需要重新训练的防御, `Defense` 类需要覆写 `defense` 方法 * 对于对输入图像进行变形的防御, `Defense` 类需要覆写 `transform_input` 方法 * 对于修改预测过程的防御, `Defense` 类需要覆写 `predict` 方法 ## evaluation模块 ### 攻击评估 * `evaluation.attack_evaluation.main` 函数为入口,传入模型名称、攻击名称、攻击配置 ### 防御评估 * `evaluation.defense_evaluation.main` 函数为入口,传入模型名称、防御名称、防御配置 ### 安全评估 * `evaluation.security_evaluation.main` 函数为入口,传入模型名称、攻击名称、防御名称列表、攻击配置、防御配置列表