Browse Source

update modelsafety

pull/3035/head
chenshihai 2 years ago
parent
commit
ed01a7b71d
4 changed files with 144 additions and 39 deletions
  1. +1
    -0
      options/locale/locale_en-US.ini
  2. +1
    -0
      options/locale/locale_zh-CN.ini
  3. +28
    -8
      templates/repo/modelsafety/new.tmpl
  4. +114
    -31
      templates/repo/modelsafety/show.tmpl

+ 1
- 0
options/locale/locale_en-US.ini View File

@@ -3270,3 +3270,4 @@ evaluation_result = Evaluation Result
no_data = No Data no_data = No Data
untargetted = Untargetted untargetted = Untargetted
targetted = targetted targetted = targetted
new_model_security_evaluation_tips = Model Security Evaluation just used for image classification

+ 1
- 0
options/locale/locale_zh-CN.ini View File

@@ -3289,3 +3289,4 @@ evaluation_result = 评测结果
no_data = 无数据 no_data = 无数据
untargetted = 非定向 untargetted = 非定向
targetted = 定向 targetted = 定向
new_model_security_evaluation_tips = 模型安全评测只适用于图像分类

+ 28
- 8
templates/repo/modelsafety/new.tmpl View File

@@ -41,6 +41,13 @@
.v-middle { .v-middle {
vertical-align: middle; vertical-align: middle;
} }

.label-required:after {
margin: -0.2em 0 0 0.2em;
content: '*';
color: #db2828;
visibility: visible !important;
}
</style> </style>
{{template "custom/global_mask" .}} {{template "custom/global_mask" .}}
<div class="repository"> <div class="repository">
@@ -111,6 +118,15 @@
<label class="label-fix-width" style="font-weight: normal;"></label> <label class="label-fix-width" style="font-weight: normal;"></label>
{{template "custom/task_wait_count" .}} {{template "custom/task_wait_count" .}}
</div> </div>
<div class="min_title inline field" style="margin-top:-20px;margin-bottom:12px !important;">
<label class="label-fix-width" style="font-weight: normal;"></label>
<div style="display:inline-block;">
<div style="display:flex;align-items:center;color:#f2711c;">
<i class="ri-error-warning-line" style="margin-right: 0.5rem; font-size: 14px"></i>
<span style="font-size: 12px">{{.i18n.Tr "modelsafety.new_model_security_evaluation_tips"}}</span>
</div>
</div>
</div>
<div class="required min_title inline field"> <div class="required min_title inline field">
<label class="label-fix-width" style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.job_name"}}</label> <label class="label-fix-width" style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.job_name"}}</label>
<input style="width: 80%;" name="display_job_name" id="trainjob_job_name" <input style="width: 80%;" name="display_job_name" id="trainjob_job_name"
@@ -121,7 +137,7 @@
<div class="min_title inline field"> <div class="min_title inline field">
<label class="label-fix-width" style="font-weight: normal;" <label class="label-fix-width" style="font-weight: normal;"
for="description">{{.i18n.Tr "repo.modelarts.train_job.description"}}</label> for="description">{{.i18n.Tr "repo.modelarts.train_job.description"}}</label>
<textarea style="width: 80%;" id="description" name="description" rows="3" maxlength="254"
<textarea style="width: 80%;" id="description" name="description" rows="2" maxlength="254"
placeholder={{.i18n.Tr "repo.modelarts.train_job.new_place"}} placeholder={{.i18n.Tr "repo.modelarts.train_job.new_place"}}
onchange="this.value=this.value.substring(0, 255)" onchange="this.value=this.value.substring(0, 255)"
onkeydown="this.value=this.value.substring(0, 255)" onkeydown="this.value=this.value.substring(0, 255)"
@@ -239,14 +255,18 @@
</span> </span>
<a href="https://git.openi.org.cn/OpenIOSSG/aisafety" target="_blank">{{.i18n.Tr "cloudbrain.view_sample"}}</a> <a href="https://git.openi.org.cn/OpenIOSSG/aisafety" target="_blank">{{.i18n.Tr "cloudbrain.view_sample"}}</a>
</div> </div>
<div class="inline field min_title required">
<label class="label-fix-width" style="font-weight: normal;">{{.i18n.Tr "modelsafety.base_data_set"}}</label>
<select id="baseDataSet-sel" class="ui dropdown width48" name="src_dataset"></select>
<div class="inline field min_title required fields" style="width: 95%;">
<label class="label-fix-width label-required" style="font-weight: normal;">{{.i18n.Tr "modelsafety.base_data_set"}}</label>
<div class="field" style="flex:1.5">
<select id="baseDataSet-sel" class="ui dropdown width100" name="src_dataset"></select>
</div>
<div class="field" style="flex:2;display:flex;">
<label class="label-fix-width label-required" style="font-weight:normal;display:flex;justify-content:right;align-items: center;">{{.i18n.Tr "modelsafety.combat_data_set"}}</label>
<div style="flex:1">
<select id="combatDataSet-sel" class="ui dropdown width100" name="combat_dataset"></select>
</div>
</div>
</div> </div>
<div class="inline field min_title required">
<label class="label-fix-width" style="font-weight: normal;">{{.i18n.Tr "modelsafety.combat_data_set"}}</label>
<select id="combatDataSet-sel" class="ui dropdown width48 readonly" name="combat_dataset"></select>
</div>
<div class="inline min_title field required"> <div class="inline min_title field required">
<label class="label-fix-width" style="font-weight:normal;">{{.i18n.Tr "modelsafety.evaluation_indicators"}}</label> <label class="label-fix-width" style="font-weight:normal;">{{.i18n.Tr "modelsafety.evaluation_indicators"}}</label>
<input type="text" style="display:none;" name="evaluation_index" /> <input type="text" style="display:none;" name="evaluation_index" />


+ 114
- 31
templates/repo/modelsafety/show.tmpl View File

@@ -129,7 +129,7 @@
} }


.ac-grid-col .text-span { .ac-grid-col .text-span {
width: 450px;
width: 420px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@@ -614,42 +614,78 @@


function initTable(tableEl, data) { function initTable(tableEl, data) {
tableEl.empty(); tableEl.empty();
tableEl.append(`
<table class="ui celled table">
<thead>
<tr class="tr-head"><th style="width:100px;">${data.indicator}</th></tr>
</thead>
<tbody>
<tr class="tr-untargetted"><td>{{.i18n.Tr "modelsafety.untargetted"}}</td></tr>
<tr class="tr-targetted"><td>{{.i18n.Tr "modelsafety.targetted"}}</td></tr>
</tbody>
</table>`);
var trHead = tableEl.find('tr.tr-head');
var trUntargetted = tableEl.find('tr.tr-untargetted');
var trTargetted = tableEl.find('tr.tr-targetted');
for (var i = 0, iLen = data.params.length; i < iLen; i++) {
var params = data.params;
var untargetted = data.untargetted;
var targetted = data.targetted;
trHead.append(`<th>param(${params[i]})</th>`);
trUntargetted.append(`<td>${untargetted[i]}</td>`);
trTargetted.append(`<td>${targetted[i]}</td>`);
var lanUntargetted = {{.i18n.Tr "modelsafety.untargetted"}};
var lanTargetted = {{.i18n.Tr "modelsafety.targetted"}};
if (data.indicator === 'ALDp') {
tableEl.append(`
<table class="ui celled table">
<thead>
<tr class="tr-head"><th colspan="2" style="width:100px;">${data.indicator}</th></tr>
</thead>
<tbody>
<tr class="tr-untargetted"><td rowspan="3">${lanUntargetted}</td><td>L_0 norm</td></tr>
<tr class="tr-untargetted"><td style="border-left: 1px solid rgba(34,36,38,.1);">L_2 norm</td></tr>
<tr class="tr-untargetted"><td style="border-left: 1px solid rgba(34,36,38,.1);">L_inf norm</td></tr>
<tr class="tr-targetted"><td rowspan="3">${lanTargetted}</td><td>L_0 norm</td></tr>
<tr class="tr-targetted"><td style="border-left: 1px solid rgba(34,36,38,.1);">L_2 norm</td></tr>
<tr class="tr-targetted"><td style="border-left: 1px solid rgba(34,36,38,.1);">L_inf norm</td></tr>
</tbody>
</table>`);
var trHead = tableEl.find('tr.tr-head');
var trUntargetted = tableEl.find('tr.tr-untargetted');
var trTargetted = tableEl.find('tr.tr-targetted');
for (var i = 0, iLen = data.params.length; i < iLen; i++) {
var params = data.params;
var untargetted = data.untargetted;
var targetted = data.targetted;
trHead.append(`<th>param(${params[i]})</th>`);
trUntargetted.eq(0).append(`<td>${Number(untargetted[i][0]).toFixed(3)}</td>`);
trUntargetted.eq(1).append(`<td>${Number(untargetted[i][1]).toFixed(3)}</td>`);
trUntargetted.eq(2).append(`<td>${Number(untargetted[i][2]).toFixed(3)}</td>`);
trTargetted.eq(0).append(`<td>${Number(targetted[i][0]).toFixed(3)}</td>`);
trTargetted.eq(1).append(`<td>${Number(targetted[i][1]).toFixed(3)}</td>`);
trTargetted.eq(2).append(`<td>${Number(targetted[i][2]).toFixed(3)}</td>`);
}
} else {
tableEl.append(`
<table class="ui celled table">
<thead>
<tr class="tr-head"><th style="width:100px;">${data.indicator}</th></tr>
</thead>
<tbody>
<tr class="tr-untargetted"><td>{{.i18n.Tr "modelsafety.untargetted"}}</td></tr>
<tr class="tr-targetted"><td>{{.i18n.Tr "modelsafety.targetted"}}</td></tr>
</tbody>
</table>`);
var trHead = tableEl.find('tr.tr-head');
var trUntargetted = tableEl.find('tr.tr-untargetted');
var trTargetted = tableEl.find('tr.tr-targetted');
for (var i = 0, iLen = data.params.length; i < iLen; i++) {
var params = data.params;
var untargetted = data.untargetted;
var targetted = data.targetted;
trHead.append(`<th>param(${params[i]})</th>`);
trUntargetted.append(`<td>${Number(untargetted[i]).toFixed(3)}</td>`);
trTargetted.append(`<td>${Number(targetted[i]).toFixed(3)}</td>`);
}
} }
} }


function initChart(chartEl, data) {
function initChart(chartEl, data) {
var chartHandle = chartEl.data('chart'); var chartHandle = chartEl.data('chart');
chartHandle && chartHandle.dispose(); chartHandle && chartHandle.dispose();
chartHandle && window.removeEventListener('resize', chartHandle.resize); chartHandle && window.removeEventListener('resize', chartHandle.resize);
chartHandle = echarts.init(chartEl[0]); chartHandle = echarts.init(chartEl[0]);
chartEl.data('chart', chartHandle); chartEl.data('chart', chartHandle);
var lanUntargetted = {{.i18n.Tr "modelsafety.untargetted"}};
var lanTargetted = {{.i18n.Tr "modelsafety.targetted"}};
var option = { var option = {
tooltip: { tooltip: {
trigger: 'axis' trigger: 'axis'
}, },
color: ['rgb(80, 135, 236)', 'rgb(104, 187, 196)'], color: ['rgb(80, 135, 236)', 'rgb(104, 187, 196)'],
legend: { legend: {
data: ['{{.i18n.Tr "modelsafety.untargetted"}}', '{{.i18n.Tr "modelsafety.targetted"}}'],
data: [lanUntargetted, lanTargetted],
top: '15', top: '15',
}, },
grid: { grid: {
@@ -668,19 +704,55 @@
}, },
series: [ series: [
{ {
name: '{{.i18n.Tr "modelsafety.untargetted"}}',
name: lanUntargetted,
type: 'line', type: 'line',
stack: 'Total',
data: data.untargetted || [],
data: (data.untargetted || []).map(function(item){ return Number(Number(item).toFixed(3)) }),
}, },
{ {
name: '{{.i18n.Tr "modelsafety.targetted"}}',
name: lanTargetted,
type: 'line', type: 'line',
stack: 'Total',
data: data.targetted || [],
data: (data.targetted || []).map(function(item){ return Number(Number(item).toFixed(3)) }),
} }
] ]
}; };
if (data.indicator === 'ALDp') {
option.color = ['rgb(80, 135, 236)', 'rgb(247, 238, 209)', 'rgb(231, 230, 238)', 'rgb(104, 187, 196)', 'rgb(211, 183, 136)', 'rgb(159, 131, 179)'];
option.legend.data = [`${lanUntargetted}(L_0)`, `${lanUntargetted}(L_2)`, `${lanUntargetted}(L_inf)`,
`${lanTargetted}(L_0)`, `${lanTargetted}(L_2)`, `${lanTargetted}(L_inf)`];
option.series = [
{
name: `${lanUntargetted}(L_0)`,
type: 'line',
data: (data.untargetted || []).map(function(item){ return Number(item[0].toFixed(3)) }),
},
{
name: `${lanUntargetted}(L_2)`,
type: 'line',
data: (data.untargetted || []).map(function(item){ return Number(item[1].toFixed(3)) }),
},
{
name: `${lanUntargetted}(L_inf)`,
type: 'line',
data: (data.untargetted || []).map(function(item){ return Number(item[2].toFixed(3)) }),
},
{
name: `${lanTargetted}(L_0)`,
type: 'line',
data: (data.targetted || []).map(function(item){ return Number(item[0].toFixed(3)) }),
},
{
name: `${lanTargetted}(L_2)`,
type: 'line',
data: (data.targetted || []).map(function(item){ return Number(item[1].toFixed(3)) }),
},
{
name: `${lanTargetted}(L_inf)`,
type: 'line',
data: (data.targetted || []).map(function(item){ return Number(item[2].toFixed(3)) }),
}
];
}
console.log(option);
chartHandle.setOption(option); chartHandle.setOption(option);
window.addEventListener('resize', chartHandle.resize); window.addEventListener('resize', chartHandle.resize);
} }
@@ -778,7 +850,11 @@
var oLogHref = $('#-log-down').attr('href'); var oLogHref = $('#-log-down').attr('href');
$('#-log-down').attr('href', oLogHref + `/modelsafety/${res.ID}/down_log_file`); $('#-log-down').attr('href', oLogHref + `/modelsafety/${res.ID}/down_log_file`);
if (res.ResultJson) { if (res.ResultJson) {
resultData = JSON.parse(res.ResultJson);
try {
resultData = JSON.parse(res.ResultJson);
} catch(e) {
resultData = res.ResultJson;
}
} }
}, },
error(err) { error(err) {
@@ -799,7 +875,14 @@
initData(); initData();
} }
if (tabPath === 'third0') { if (tabPath === 'third0') {
resultData && initResTab(resultData);
if (resultData) {
if (typeof resultData === 'object') {
initResTab(resultData);
} else if (typeof resultData === 'string') {
var resContainer = $('.__res_container');
resContainer.find('.__res_no_data').text(resultData);
}
}
} }
}, },
}); });


Loading…
Cancel
Save