Skip to content

foamliu/Zero-Shot-Learning

Repository files navigation

零样本学习

零样本学习(zero-shot learning)是在已知类别上训练物体识别模型,要求模型能够识别来自未知类别的样本。对图像理解、(从已知类别到未知类别的)知识迁移具有重要意义。

依赖

  • Python 3.5
  • PyTorch 0.4

数据集

使用 AI Challenger 2018 的图像属性数据集,本数据集共78,017张图片、230个类别、359种属性。

图片可划分为5个超类(super-class),分别是动物(Animals)、水果(Fruits)、交通工具(Vehicles)、电子产品(Electronics)、发型(Hairstyles)。其中,动物和水果属于自然产物,交通工具和电子产品属于人造物,发型属于抽象概念。每个超类分别包含A: 50, F: 50, V: 50, E: 50, H: 30 个类别,总计230个类别。对于每个超类(super-class),分别设计了A: 123, F: 58, V: 81, E: 75, H: 22 个属性,共359个属性。每张图片只包含一个前景物体,标注了标签和物体包围框。对于每个类别,随机挑选了20张图片进行属性标注。

  • 训练集(seen classes):80%类别
  • 测试集(unseen classes):20%类别

标注示例图:

image

你可以从这里下载该数据集。

用法

数据预处理

提取78,017张图片及相应的标注文件:

$ python pre-process.py

训练

$ python train.py

如果想可视化训练过程,请执行:

$ tensorboard --logdir path_to_current_dir/logs

各超类训练结束最佳的验证集准确率和损失为:

度量 动物 水果 交通工具 电子产品 发型
ACCURACY 97.222 82.755 92.500 90.790 53.854
LOSS 0.025 0.044 0.023 0.051 0.077

Demo

下载下列预训练模型放在 models 目录然后执行:

$ python demo.py -s "Animals"

此处超类可以是5个超类中任意一个。

动物

原图 属性标签 类别
有柔软的皮肤, 是小的(比猪小), 是弱小的, 是胆小的, 是群居动物, 是冷血动物, 生活在水里 Label_A_37
是无毛的, 有柔软的皮肤, 是小的(比猪小), 吃浮游生物, 是弱小的, 是胆小的, 是群居动物, 是安静的, 是冷血动物, 是有毒的, 生活在海洋里, 生活在水里 Label_A_36
有柔软的皮肤, 有胡须, 是小的(比猪小), 有牙齿, 有耳朵, 有鼻子, 能游泳, 能跳跃, 吃肉, 是活跃的, 是恒温动物 Label_A_01
有柔软的皮肤, 是大的(比猪大), 有眼睛, 有鼻子, 有脊椎, 能游泳, 吃鱼, 吃肉, 有肌肉, 是友好的, 是活跃的, 是捕食者, 是群居动物, 是安静的 Label_A_42
是毛茸茸的, 有胡须, 有长的腿, 有四条腿, 有短脖子, 有牙齿, 有舌头, 有眼睛, 有耳朵, 有鼻子, 有脊椎, 能行走, 行动快速, 是强壮的, 有肌肉, 是活跃的, 是恒温动物, 能产奶, 生活在地面上 Label_A_01
是灰色的, 是光滑的, 有舌头, 有眼睛, 有耳朵, 有鼻子, 有脊椎, 能行走, 吃种子, 行动快速, 有肌肉, 是活跃的 Label_A_24
有柔软的皮肤, 是群居动物, 是安静的, 是有毒的 Label_A_36
有柔软的皮肤, 有羽毛, 是小的(比猪小), 有短的腿, 是两条腿走路的, 只有两条腿, 有两个胳膊, 有长的翅膀, 有爪子, 有长脖子, 有短尾巴, 有短的喙, 有舌头, 有眼睛, 有耳朵, 有鼻子, 有脊椎, 能游泳, 能行走, 能下蛋, 能捕鱼, 吃植物, 吃昆虫, 吃树叶, 吃种子, 行动缓慢, 是弱小的, 有肌肉, 是友好的, 是胆小的, 是活跃的, 是群居动物, 是吵闹的, 是恒温动物, 生活在平原, 是家养动物 Label_A_27
有柔软的皮肤, 是光滑的, 是小的(比猪小), 只有两条腿, 有爪子, 有短脖子, 有尖的喙, 有舌头, 有耳朵, 有鼻子, 有脊椎, 能飞行, 吃昆虫, 吃树叶, 吃肉, 是弱小的, 有肌肉, 是友好的, 是吵闹的, 是恒温动物 Label_A_30
是毛茸茸的, 有柔软的皮肤, 有长的腿, 有短脖子, 有牙齿, 有舌头, 有眼睛, 有耳朵, 吃肉, 能产奶, 生活在地面上 Label_A_22

水果

原图 属性标签 类别
味道是甜的 Label_A_14
是红色的, 味道是甜的, 是原生的(未被加工过的), 是常见的, 可直接食用的(不需要加工), 含水量高, 有果核 Label_A_47
是黄色的, 味道是甜的, 味道是酸的, 是完整的, 是原生的(未被加工过的), 是常见的, 含水量高, 有果核, 产于热带, 长在树上 Label_A_27
是红色的, 是小的(比苹果小), 味道是甜的, 是完整的, 是软的, 是常见的, 可直接食用的(不需要加工), 含水量高, 长在树上 Label_A_10
是红色的, 味道是甜的, 有皮, 可直接食用的(不需要加工), 有果核 Label_A_11
是红色的, 味道是甜的, 是原生的(未被加工过的), 是软的, 是常见的, 含水量高, 有果核 Label_A_10
味道是甜的, 是光滑的, 是完整的 Label_A_44
是红色的, 味道是甜的, 味道是酸的, 是完整的, 是原生的(未被加工过的), 是软的, 是常见的, 可直接食用的(不需要加工), 含水量高, 长在树上 Label_A_33
味道是甜的 Label_A_46
是红色的, 味道是甜的, 是完整的, 是原生的(未被加工过的), 是常见的, 含水量高 Label_A_47

交通工具

原图 属性标签 类别
是长的, 有座位, 有发动机, 有喇叭, 有方向盘, 有刹车, 有照明灯, 能以移动, 能被驾驶, 是安全的, 是金属造的, 是塑料造的, 是贵的 Label_A_13
是大的(比汽车大), 有数吨重, 是长的, 有门, 有座位, 有窗户, 有发动机, 有喇叭, 有照明灯, 能以移动, 能被驾驶, 能载少量(≤10)乘客, 是金属造的, 是塑料造的, 是贵的 Label_A_13
是大的(比汽车大), 是长的, 有门, 有窗户, 有发动机, 有方向盘, 有照明灯, 能以移动, 能被驾驶, 可用于民用, 是安全的, 是金属造的, 是塑料造的, 是贵的 Label_A_12
有方向盘, 能以移动, 能被驾驶, 可用于民用, 可在城市道路上使用, 是危险的, 是金属造的, 是贵的 Label_A_42
是长的, 有门, 有座位, 有窗户, 有发动机, 有照明灯, 能以移动, 能被驾驶, 能载少量(≤10)乘客, 是金属造的, 是塑料造的, 是贵的 Label_A_13
是白色的, 有数吨重, 是长的, 速度快, 有门, 有座位, 有窗户, 有发动机, 有喇叭, 有方向盘, 有刹车, 有牌照, 有四个轮子, 有照明灯, 能以移动, 能被驾驶, 能载少量(≤10)乘客, 可用于救援, 可在城市道路上使用, 可在乡村道路上使用, 是安全的, 是金属造的, 是塑料造的, 是贵的 Label_A_13
是长的, 有门, 有座位, 有窗户, 有发动机, 能以移动, 能被驾驶, 可用于民用, 是金属造的, 是塑料造的, 是贵的 Label_A_35
有数吨重, 是长的, 有门, 有座位, 有窗户, 有发动机, 有刹车, 有照明灯, 能以移动, 能被驾驶, 是金属造的, 是塑料造的, 是贵的 Label_A_48
是白色的, 有数吨重, 是长的, 速度快, 有座位, 有窗户, 有喇叭, 有照明灯, 能以移动, 能被驾驶, 能载少量(≤10)乘客, 可用于救援, 可在乡村道路上使用, 是安全的, 是金属造的, 是塑料造的, 是贵的 Label_A_16
是危险的, 是塑料造的 Label_A_31

电子产品

原图 属性标签 类别
可用于商业, 可用于家庭使用, 可用于个人使用, 是安全的, 是金属造的, 是塑料造的, 是常见的 Label_A_05
是黑色的, 是大的(比手机大), 可用于商业, 可用于办公, 可用于展示, 是安全的, 是金属造的, 是塑料造的, 是常见的 Label_A_02
可用于展示, 是安全的, 是金属造的, 是塑料造的, 是常见的 Label_A_43
可用于商业, 可用于家庭使用, 可用于个人使用, 是安全的, 是金属造的, 是塑料造的, 是常见的, 是可被随时移动的, 是小功率设备 Label_A_16
有数千克重, 有(电源)插头, 是安全的, 是金属造的, 是塑料造的, 是常见的 Label_A_02
是黑色的, 有(电源)插头, 有指示灯, 可用于商业, 可用于办公, 可用于安防, 是安全的, 是金属造的, 是塑料造的, 是常见的, 是安静的, 是小功率设备 Label_A_02
是小的(比手机小), 有腕带, 可用于商业, 可用于家庭使用, 可用于办公, 可用于展示, 可用于个人使用, 是金属造的, 是塑料造的, 是常见的, 是可被随时移动的, 是安静的, 是可以手持的 Label_A_47
是大的(比手机大), 可用于家庭使用, 是安全的, 是金属造的, 是塑料造的, 是常见的, 是安静的 Label_A_40
有指示灯, 可用于商业, 可用于展示, 是安全的, 是金属造的, 是塑料造的, 是常见的 Label_A_02
可用于商业, 可用于家庭使用, 可用于办公, 可用于个人使用, 是安全的, 是金属造的, 是塑料造的, 是常见的, 是小功率设备 Label_A_18

发型

原图 属性标签 类别
适合皮肤白皙的人, 适合尖尖鼻子的人, 适合化浓妆的人, 容易变乱, 是简约的, 是否优雅 Label_A_22
适合小眼睛的人, 适合尖尖鼻子的人 Label_A_29
适合小眼睛的人, 适合皮肤白皙的人, 适合尖尖鼻子的人, 适合戴帽子的人, 适合戴耳环的人, 适合化浓妆的人, 容易变乱, 是简约的, 是否优雅, 是否性感, 是否纯净, 是否活泼 Label_A_12
适合小眼睛的人, 适合皮肤白皙的人, 适合尖尖鼻子的人, 适合化浓妆的人, 容易变乱 Label_A_09
适合小眼睛的人, 适合皮肤白皙的人, 适合尖尖鼻子的人, 适合化浓妆的人, 容易变乱, 是否优雅, 是否活泼 Label_A_09
适合皮肤白皙的人, 适合尖尖鼻子的人, 适合化浓妆的人 Label_A_22
适合小眼睛的人, 适合皮肤白皙的人, 适合尖尖鼻子的人 Label_A_15
适合皮肤白皙的人, 适合尖尖鼻子的人, 适合化浓妆的人, 是否性感 Label_A_24
适合小眼睛的人, 适合皮肤白皙的人, 适合尖尖鼻子的人, 适合化浓妆的人, 容易变乱, 是否优雅, 是否活泼 Label_A_12
适合小眼睛的人, 适合皮肤白皙的人, 适合尖尖鼻子的人, 是否优雅 Label_A_30