| @@ -1,3 +1,34 @@ | |||||
| ## 0.4.0 (2021-07-06) | |||||
| ### Features | |||||
| - [数据管理] 新增图像语义分割标注 | |||||
| - [数据管理] 新增文本标注类型:文本分类、中文分词、NER(命名实体识别) | |||||
| - [数据管理] 新增语音标注:音频分类、语音识别 | |||||
| - [数据管理] 新增自定义数据集 | |||||
| - [模型管理] 新增模型转换服务,可将 TensorFlow SaveModel 模型转换为 ONNX 模型 | |||||
| - [控制台] 新增控制台-用户管理-资源独占功能 | |||||
| - [控制台] 新增控制台-资源管理界面 | |||||
| - [控制台] 新增控制台-用户组管理功能 | |||||
| - [控制台] 新增控制台-角色管理-权限分配功能 | |||||
| - [算法管理] 新增推理脚本管理 | |||||
| - [云端Serving] 新增自定义推理脚本功能 | |||||
| - [云端Serving] 新增支持用户选择镜像 | |||||
| ### Bug Fixs | |||||
| - [数据管理] 视频标注支持多视频上传 | |||||
| - [数据管理] OFRecord 发布更改为可选,且仅支持图像分类标注 | |||||
| - [算法管理] 优化 Notebook,现在 Notebook 支持数据集挂载功能 | |||||
| [更多参考](http://docs.dubhe.ai/docs/changelog) | |||||
| ### Breaking Change | |||||
| - [模型管理] 完成内置优化、我的优化功能,支持模型量化、剪枝、蒸馏 | |||||
| - [云端Serving] 完成在线服务、批量服务功能,在线服务支持 HTTP 请求、GRPC 请求、灰度分流、服务回滚 | |||||
| - [模型炼知] 移植重构图谱可视化、图谱列表功能,完成度量管理功能 | |||||
| ## 0.3.0 (2021-01-14) | ## 0.3.0 (2021-01-14) | ||||
| ### Breaking Change | ### Breaking Change | ||||
| @@ -13,7 +44,7 @@ | |||||
| - [数据管理] 增加 NLP 文本分类数据标注功能 | - [数据管理] 增加 NLP 文本分类数据标注功能 | ||||
| - [数据管理] 增加医疗影像数据标注,支持自动器官分割和病灶识别 | - [数据管理] 增加医疗影像数据标注,支持自动器官分割和病灶识别 | ||||
| - [训练管理] 支持使用教师模型、学生模型进行模型炼知 | - [训练管理] 支持使用教师模型、学生模型进行模型炼知 | ||||
| - [训练管理] 镜像管理支持管理员上传Notebook镜像, 并可以设置为默认Notebook镜像 | |||||
| - [训练管理] 镜像管理支持管理员上传Notebook镜像, 并可以设置为默认Notebook镜像 | |||||
| - [训练管理] 模型、算法、镜像等文件上传时不允许文件名包含不合法字符 | - [训练管理] 模型、算法、镜像等文件上传时不允许文件名包含不合法字符 | ||||
| - [训练管理] 运行日志展示组件重构。以 K8S 的 pod 为单位进行日志查询展示 | - [训练管理] 运行日志展示组件重构。以 K8S 的 pod 为单位进行日志查询展示 | ||||
| - [模型管理] 增加炼知模型管理 | - [模型管理] 增加炼知模型管理 | ||||
| @@ -21,7 +52,7 @@ | |||||
| ### Bug Fixs | ### Bug Fixs | ||||
| - [模型开发] 修复 Notebook 页面重置按钮失效的问题 | - [模型开发] 修复 Notebook 页面重置按钮失效的问题 | ||||
| - [训练管理] 修复模型下载文件路径问题 | |||||
| - [训练管理] 修复模型下载文件路径问题 | |||||
| ## 0.2.1 (2020-11-16) | ## 0.2.1 (2020-11-16) | ||||
| @@ -1,6 +1,6 @@ | |||||
| { | { | ||||
| "name": "dubhe-web", | "name": "dubhe-web", | ||||
| "version": "0.3.0", | |||||
| "version": "0.4.0", | |||||
| "description": "之江天枢人工智能开源平台", | "description": "之江天枢人工智能开源平台", | ||||
| "author": "zhejianglab", | "author": "zhejianglab", | ||||
| "keywords": [ | "keywords": [ | ||||
| @@ -302,10 +302,17 @@ export default { | |||||
| if (!originService) { | if (!originService) { | ||||
| return; | return; | ||||
| } | } | ||||
| const { status, progress, startTime, endTime, outputPath } = service; | |||||
| const { status, progress, startTime, endTime, outputPath, statusDetail } = service; | |||||
| const { pollId } = option; | const { pollId } = option; | ||||
| // 更新数据 | // 更新数据 | ||||
| Object.assign(originService, { status, progress, startTime, endTime, outputPath }); | |||||
| Object.assign(originService, { | |||||
| status, | |||||
| progress, | |||||
| startTime, | |||||
| endTime, | |||||
| outputPath, | |||||
| statusDetail, | |||||
| }); | |||||
| if (this.needPoll(status) && pollId && this.pollMap[id] === pollId) { | if (this.needPoll(status) && pollId && this.pollMap[id] === pollId) { | ||||
| setTimeout(() => { | setTimeout(() => { | ||||
| this.getServiceProgress(id, option); | this.getServiceProgress(id, option); | ||||
| @@ -29,9 +29,7 @@ | |||||
| </div> | </div> | ||||
| <el-button slot="reference" type="text">详情</el-button> | <el-button slot="reference" type="text">详情</el-button> | ||||
| </el-popover> | </el-popover> | ||||
| <el-button v-if="isCurrent && !publishing && !isCustom" type="text" @click="gotoDetail" | |||||
| >查看标注</el-button | |||||
| > | |||||
| <el-button v-if="isCurrent && !publishing" type="text" @click="gotoDetail">查看标注</el-button> | |||||
| <el-button v-if="isPreset" type="text" @click="convert(row)">生成预置数据集</el-button> | <el-button v-if="isPreset" type="text" @click="convert(row)">生成预置数据集</el-button> | ||||
| <el-dropdown placement="bottom"> | <el-dropdown placement="bottom"> | ||||
| <el-button type="text" style="margin-left: 10px;" @click.stop="() => {}"> | <el-button type="text" style="margin-left: 10px;" @click.stop="() => {}"> | ||||
| @@ -99,7 +97,9 @@ export default { | |||||
| // 发布中 | // 发布中 | ||||
| const publishing = computed(() => isPublishDataset(props.row)); | const publishing = computed(() => isPublishDataset(props.row)); | ||||
| const isCurrent = computed(() => !!props.row.isCurrent); | const isCurrent = computed(() => !!props.row.isCurrent); | ||||
| const isPreset = computed(() => props.row.presetFlag); | |||||
| const isPreset = computed( | |||||
| () => props.row.presetFlag && props.row.dataType !== dataTypeCodeMap.CUSTOM | |||||
| ); | |||||
| const isOfRecord = computed(() => props.row.isOfRecord); | const isOfRecord = computed(() => props.row.isOfRecord); | ||||
| const isCustom = computed(() => props.row.dataType === dataTypeCodeMap.CUSTOM); | const isCustom = computed(() => props.row.dataType === dataTypeCodeMap.CUSTOM); | ||||
| const title = computed(() => `${props.row.name}(${props.row.versionName})`); | const title = computed(() => `${props.row.name}(${props.row.versionName})`); | ||||
| @@ -263,7 +263,7 @@ export default { | |||||
| } | } | ||||
| // 判断是否为计算图特殊节点 | // 判断是否为计算图特殊节点 | ||||
| function IsSpecialNode(itemnode) { | function IsSpecialNode(itemnode) { | ||||
| if (!itemnode || itemnode.op !== '') { | |||||
| if (!itemnode) { | |||||
| return false; | return false; | ||||
| } | } | ||||
| if (itemnode.sub_net.length > 0) { | if (itemnode.sub_net.length > 0) { | ||||
| @@ -274,22 +274,20 @@ export default { | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| for (const n in itemnode.sub_net) { | |||||
| // 1:卷积层,2:全连接层,3:池化层,4:归一化 | |||||
| if (itemnode.sub_net[n].op.toLowerCase().indexOf(SpecialNodeList[0].toLowerCase()) >= 0) { | |||||
| return 1; | |||||
| } | |||||
| if (itemnode.label.toLowerCase().indexOf(SpecialNodeList[1].toLowerCase()) >= 0) { | |||||
| return 2; | |||||
| } | |||||
| if (itemnode.label.toLowerCase().indexOf(SpecialNodeList[2].toLowerCase()) >= 0) { | |||||
| return 3; | |||||
| } | |||||
| if (itemnode.label.toLowerCase().indexOf(SpecialNodeList[3].toLowerCase()) >= 0) { | |||||
| return 4; | |||||
| } | |||||
| return false; | |||||
| // 1:卷积层,2:全连接层,3:池化层,4:归一化 | |||||
| if (itemnode.op.toLowerCase().indexOf(SpecialNodeList[0].toLowerCase()) >= 0) { | |||||
| return 1; | |||||
| } | } | ||||
| if (itemnode.op.toLowerCase().indexOf(SpecialNodeList[1].toLowerCase()) >= 0) { | |||||
| return 2; | |||||
| } | |||||
| if (itemnode.op.toLowerCase().indexOf(SpecialNodeList[2].toLowerCase()) >= 0) { | |||||
| return 3; | |||||
| } | |||||
| if (itemnode.op.toLowerCase().indexOf(SpecialNodeList[3].toLowerCase()) >= 0) { | |||||
| return 4; | |||||
| } | |||||
| return false; | |||||
| } | } | ||||
| // 绘制计算图特殊节点 | // 绘制计算图特殊节点 | ||||
| function DrawSpecialNodes(graph) { | function DrawSpecialNodes(graph) { | ||||