MTMC-Pytorch: MTMC-Pytorch = Multi-Task Multi-Class Classification Project using Pytorch.
目的: 旨在搭建一个分类问题在Pytorch框架下的通解,批量解决单任务多分类问题、多任务多分类问题。
使用: 需要做的准备工作是将样本整理成如下格式按文件夹存放; MTMC自动解析任务获取类别标签、自适应样本均衡、模型训练、模型评估等过程。
MLDataloader load MTMC dataset as following directory tree.
Make sur train-val directory tree keeps consistency.
data_root_path
├── task_A
│ ├── train
│ │ ├── class_1
│ │ ├── class_2
│ │ ├── class_3
│ │ └── class_4
│ └── val
│ ├── class_1
│ ├── class_2
│ ├── class_3
│ └── class_4
└── task_B
├── train
│ ├── class_1
│ ├── class_2
│ └── class_3
└── val
├── class_1
├── class_2
└── class_3
备注:
- 通用的,而不是对任意问题都是最优的;
- 目的是集成分类问题诸多训练Tricks;
- 项目不再更新,止步于Gluon CV;(https://github.com/dmlc/gluon-cv ,尽管他不是很完整。Ref: Bag of Tricks for Image Classification with Convolutional Neural Networks https://arxiv.org/abs/1812.01187v2 )
$ conda list | grep torch
pytorch 0.4.1 py36_cuda0.0_cudnn0.0_1 pytorch
torchvision 0.2.1 py36_1 pytorch
Argmax运算前,网络输出值与准确率关系如下:
Softmax运算后,网络输出值与准确率关系如下:
类目判别在检测之后,另在Softmax后分布显示准确度收敛较好,所以类目部分直接输出Argmax对应的标签做为判定结果。
多类别值置信度值预测
Argmax运算前,网络输出值与准确率关系如下:
Softmax运算后,网络输出值与准确率关系如下:
鉴于印花问题存在以下问题:标签定义域关系相重叠,存在未定义印花种类。 搭建服务时,在服务内部进行置信度值映射:
class_idx_dict = {
"0" : "五角星",
"1" : "人物",
"2" : "几何",
"3" : "动物鸟虫",
"4" : "千鸟",
"5" : "卡通",
"6" : "复古",
"7" : "大花",
"8" : "字母数字汉字",
"9" : "手绘",
"10" : "斑马纹",
"11" : "条纹",
"12" : "格子",
"13" : "植物风景",
"14" : "波点",
"15" : "渐变色",
"16" : "爱心",
"17" : "牛仔",
"18" : "碎花",
"19" : "纯色",
"20" : "色块拼色",
"21" : "豹纹蛇纹",
"22" : "迷彩",
"23" : "食物水果"}
pvals = [0.1, 0.12, 0.14, 0.16, 0.18, 0.2, 0.22, 0.24, 0.26, 0.28, 0.3, 0.32, 0.34, 0.36, 0.38, 0.4, 0.42, 0.44, 0.46, 0.48, 0.5, 0.52, 0.54, 0.56, 0.58, 0.6, 0.62, 0.64, 0.66, 0.68, 0.7, 0.72, 0.74, 0.76, 0.78, 0.8, 0.82, 0.84, 0.86, 0.88, 0.9, 0.92, 0.94, 0.96, 0.98]
ptmat_dict = {
"五角星" : [1.30, 1.80, 2.30, 2.70, 3.00, 3.30, 3.50, 3.80, 4.00, 4.20, 4.40, 4.50, 4.70, 4.90, 5.00, 5.20, 5.30, 5.50, 5.60, 5.80, 5.90, 6.00, 6.20, 6.30, 6.50, 6.60, 6.70, 6.90, 7.00, 7.20, 7.30, 7.50, 7.60, 7.80, 7.90, 8.10, 8.30, 8.50, 8.70, 8.90, 9.10, 9.40, 9.70, 10.10, 11.20],
...
...
"食物水果" : [2.40, 2.90, 3.30, 3.60, 3.90, 4.20, 4.50, 4.70, 4.90, 5.10, 5.30, 5.50, 5.70, 5.80, 6.00, 6.10, 6.30, 6.50, 6.60, 6.70, 6.90, 7.00, 7.20, 7.30, 7.50, 7.60, 7.70, 7.90, 8.00, 8.10, 8.30, 8.40, 8.60, 8.80, 8.90, 9.10, 9.30, 9.50, 9.70, 10.00, 10.30, 10.60, 11.00, 11.60, 12.70]
}
不使用Softmax之后的值,而使用网络的输出值,可以得到两个置信度都比较高的分类判别信息。
例如下图人物卡通图案,会在“人物”&“卡通”两个类别下都有较高的置信度值:
另,输出结果如果要用作半结构化信息时,采用归一化过的置信度值是欠妥的。