增量训练检查(分割、分类)#
增量训练前的检查包括三个部分:
由于关键数据(
context,model_weights)缺失导致的检查失败,没有办法自行恢复。和普通训练一样的通用检查。
参数或训练数据不支持增量训练,可以通过提示信息,自行修改参数或者数据集后通过该检查。
增量训练检查失败信息的捕获#
原因3会抛出异常 visionflow::excepts::IncrementalTrainNotSupported 。
详细异常信息的获取:
首先捕获异常
IncrementalTrainNotSupported,通过details函数获取到详细的异常信息;然后解析异常信息,其是一个
json::array格式的字符串,解析后便会得到所有检查失败的原因;最后遍历获取
json::array每一条error,error是一个json::object,包含了两个字段type,message:type: 具体的错误类型(详见 异常类型说明 );message: 具体的错误信息;
示例如下:
try {
// 增量训练
} catch (const visionflow::excepts::DefaultException &ex) {
if(!ex.details().empty){
// 以 json 格式解析数据
auto details = nlohmann::json::parse(ex.details());
for(const auto& data : details){
auto type = data.at("type").get<std::string>();
auto message = data.at("message").get<std::string>();
}
}
}
异常类型说明#
异常类型 |
原因 |
|---|---|
InvalidClasses |
类别发生了改变 |
InvalidBaseColor |
基准色彩发生了改变 |
InvalidImageVisualSize |
可视图数量发生了改变 |
TrainingParametersChanged |
训练参数发生了改变 |
ModelArchNotSupported |
模型不支持,分割模块中只有101、102模型支持增量训练 |
ContrastiveClassificationNotSupported |
比对分类不支持增量训练 |
示例#
[
{
"message": "Contrastive classification is currently not supported in the incremental training mode.",
"type": "ContrastiveClassificationNotSupported"
},
{
"message": [
{
"op": "replace",
"path": "/input_shape/base_input_height",
"value": 32
},
{
"op": "replace",
"path": "/input_shape/base_input_width",
"value": 64
}
],
"type": "TrainingParametersChanged"
}
]
表示有2种原因造成了增量训练检查失败,原因1是增量训练不支持比对分类,
原因2是由于 base_input_height 的值应该为32才能支持增量训练;
base_input_width 的值应该为64才能支持增量训练,训练参数改变导致不支持增量训练。
其他#
除了
TrainingParametersChanged以外,其他类型的检查失败的message都已经翻译且对于用户较好理解,可以依次直接输出。TrainingParametersChanged的message会输出json::array表示所有因修改导致检查不通过的参数, 具体包含的字段和含义可以参考上述例子,这部分信息可用于将参数恢复为可以通过检查的值, 将json::array中的每一个json_patch应用到当前参数中(参考 json_patch), 即将path对应的参数的值修改为value字段的值即可通过检查。