任务:给出一张漫画,找到它对应同一个人的照片。(C2P)
此时探针(probe)是漫画,图库(gallery)是照片。
- train: 训练集文件,里面有123个文件夹,每个文件夹对应一个人名字,是这个人的所有图片(漫画和照片,漫画C开头,照片P开头)
- test:测试集文件,里面有3038张图片,其中探针(probe,漫画)有2915张,就是对应我们需要提交的2915个结果;图库(gallery,照片)有123张,对应每个人一张。我们需要做的就是为这2915张漫画分别找到它对应的是123张照片中的哪一张。
- FR_Train_dev.txt:训练集文档,共126行,每一行是人名、该人的漫画数量和该人的照片数量。你可能会奇怪为什么123个人有126行?因为其中有三个人的数据在比赛中被屏蔽了(Xi 、Wen、Hu),你自己脑补是谁。
- FR_Probe_C2P.txt: 测试集中的探针文档,共2915行,每一行的数字对应的是test文件夹中的一张漫画ID,我们要按这个文档的顺序依次完成每一张漫画的匹配。
- FR_Gallery_C2P.txt:测试集中的图库文档,共123行,每一行的数字对应了test文件夹中的一张照片ID,我们在匹配探针漫画时就是在这123张照片中找到对应的。
- result.csv和submit_example.csv:结果提交文件,共2915行,每一行对应着FR_Probe_C2P.txt中每一张漫画的匹配结果,这个匹配结果就是图库照片的ID号。
-
dataset.py --读取train文件夹中的训练集,数据集加载代码.
-
net_sphere.py --使用SphereNet网络,网络定义文件.
-
train_learning.py --最关键的py文件,训练我们的SphereNet网络.
-
utils.py --一些辅助用的小工具
-
c2p_test.py --使用训练好的网络来测试,完成在test文件夹中的C2P任务,并保存要提交到比赛网站的结果CSV文件。
完整的数据集在这儿 WebCaricature,但是比赛只允许我们使用小量进行人脸检测和对齐之后的数据。
基于 SephereNet来提取图片(不管是漫画还是照片)的特征,训练时提取每一张图片的特征后进行分类,使用SephereNet中的AngleLoss损失,训练好之后,在测试时,给定一张探针(即probe,是一张漫画),用网络分别得到探针和每一张图库(即gallery,是一张照片)的特征相似度。选出相似度最大的照片作为该漫画的匹配结果。
- 漫画域和照片域在算法中没有考虑区分,跨域识别还有很多可以利用的东西。比如漫画域和照片域分别使用不同的网络,再增加域之间的Loss。
- 网络可以换成更新更适合的。
- 没有充分利用训练集的特征。
- 读的相关论文不够多,思路不够灵活。
code version 1.0 by HJC (from nju to ucas)
README.md by HJC (from nju to ucas)