你拿到心仪的offer了吗?天池联合多家名企为大赛TOP100选手提供招聘绿色通道,马上加入,免初试、直达终面特权等你领取! 查看详情
首页 > 天池大赛 > 阿里大规模图像搜索大赛
  • 状态 举办方 第 2 赛季截止日期 总奖池 参赛队

    阿里大规模图像搜索大赛

    已结束 2015/12/16 ¥100000 843

    报名参赛

 

注:如果官网赛制和数据有明确的说明的事项,本文就不再重复了。

1.     大赛报名事项:

截止到2015925日,官网报名已停止。

如果选手没赶上时间,可以线下和一支名额没满的队伍进行合作,如果该队能进入决赛,再重新正式报名;

我们将在ACM MM201510.25-10.30期间)大会上公布踢馆赛,对大赛感兴趣团队可以提交申请,资格审查通过后,直接参与决赛,但是成绩不与初赛胜出队伍一起排名,踢馆赛选手单独进行排名。(注:具体踢馆赛事宜,请在ACM MM2015大会期间关注大赛官网)

 

2.     后台软件环境:

大赛后台使用环境为Linux (CentOS 6.5),接口语言为C/C++

后台编译器GCC版本为gcc version 4.4.7 20120313

boost版本为:1.41

GLIBC版本为:2.12

暂时不支持C++11

不支持Matlab

 

其它官方软件包括:

Aopencv (版本2.4.9)

Cpython2.6.6

Dprotobuf2.4.1

 

服务器上暂时不支持GPU,选手可以在本地使用GPU来加速,但提交至后台运行只使用CPU来处理。

 

3.     Caffe相关:

版本:2015.4月版,路径:/opt/env/caffe_libs 

其中:前向抽取简化版,使用时头文件一般只需要 (请不要包含:caffe.hpp)

#include <net.hpp>

#include <proto/caffe.pb.h>

#include <util/io.hpp>

 

但是不支持dropout, SPPlayer的,需要的话,请直接使用完整版的caffe 

Q:能用ImageNet训好的网络吗

A:可以使用pretrain

 

4.     数据下载相关:

官网开放数据下载,需要报名组队后才能下载(现报名已截止);

Q: 数据下载不下来,解压不正确怎么办?

A: 我们提供整体下载和分卷下载两种方式,并提供ziptar两种格式,可有都试试。支持的解压器包含:winrar7ziplinuxunzip也是可以的。请大家解压后与官方提供MD5比对,以确定数据完整。

 

5.     结果提交相关:

正常步骤是先上传代码+库,并测试通过后才能提交TopN结果;

Q:如果model比较大,每次上传代码,这个model都要重新上传?上传很慢的话,每次都要上传model的话要很久。

A:如果更新的模型,需要重新上传的。或者选手可以先提交TopN的结果,后续再提交代码+模型+库,并验证。但是先提交TopN结果的做法,是会消耗一次评测次数,而且这次评测也不会被算作最终有效结果。仅提交TopN结果的好处是,可以快速知道本团队的结果排名。

提交的代码+模型的zip包大小限制小于2G

 

Q: 上传的代码产出的结果和提交的结果不一致可以么?

A: 不可以,会被查做作弊的。但是允许一定范围的差异,具体的范围会给出。

 

6.     运行时间限制:

时间以提交后台环境结果为准,可视为测试日志中的时间;

目前限定小等于1s时,如果超过,则有惩罚扣分,见官网。

(指单张图片提取特征的时间限制)

Q: 排行榜不把超时结果过滤一下吗?

A: 暂时还没过滤,最后验证时会把时间因素考虑上。

 

7.     数据相关:

Q: 验证query及答案、评测query和目标集分别指的是什么?

A:  train_image.zip: 100W的训练集只用在前期的训练中,进入测试阶段则无用了。

val_image.zip 是所有试验、评测用的数据库,通常称为评测目标集,也就是说,搜索是从这个集合里搜索,搜索结果都出自这个集合。约有100万张图片。验证集包含500query以及对应的真实同款答案,格式参见官网说明,用以选手在本地调试算法的评估。

query_image.zip 是研发、调试算法时用的query图像及与query图像对应的相关(同款或相似款)图像(来自上面的eval_image.zip);评测query1559张不含答案的图片,用以召回top20 提交结果,并由我们负责计算map计入评分。目标集约为100W数据,用作query的召回候选集,即query需要在目标集中进行搜索相关同款图片,返回top20作为结果验证算法效果,如果此处的query为不带答案的1559query,此时返回的top20 则为提交的结果数据。

 

Q:“同款图”,是如果大类目id在一起就算同款,还是必须要小类目也要相同才算对?

A:同款图是同一个商品(对象)的不同情况拍的图,肯定是所有的都要一样。比类别严格很多

 

Q:需要使用index来搜索结果么?

A:在初赛不需要,目前通过实现接口match,并使用线性查找来获取TopN

 

Q: 图片是什么样的格式?

A:  RGBjpg文件。

 

Q: 图片的id编号和同款是否有直接关系呢?

A: 没有

 

8.     结果计算:

Q: 为什么要求必须为整数数组?

A: 为了规整化提交数据代码格式,采用统一的整型数组。如果怕损失精度,可以先整体扩大原始浮点数同等倍数再取整,尽可能的降低数据损失。

 

Q:  Map计算的具体说明是什么?

A:  参照官网说明(评测指标):

http://tianchi.aliyun.com/competition/information.htm?spm=5176.100067.5678.2.0BqFJd&raceId=231510 。公式如下: 

Where n表示每张图的真实同款图数量, C表示对应图像的同款集,N表示总的query数目,ri表示结果列表图,i对应rank位置。另举例补充说明如下:top20的结果为:a b c d e f g.....其中只命中了a c g,那么a c g在你返回的序列里面的排名为1 3 7,在命中的序列里面的排名为1 2 3,那么就是(1/1+2/3+3/7/20,其中分子中的分子永远是1,2,3,4,5….,分子中的分母为实际返回的序列index,分母分两种情况:1、如果答案数目大于20个则取20,否则去真实的答案数目。

 

9.     接口实现相关:

 

Q: 如何获取图片的二进制形式?

A: 参考代码如下:C++

FILE *fp_db = fopen ("imagefile", "rb");

  if (!fp_db)

  {

          fprintf (stderr, "Can't load %s image \n", argv[2]);

          return -1;

  }

  int len_db;

  int *buf_db;

  fseek (fp_db, 0, SEEK_END);

  len_db = ftell (fp_db);

  fseek (fp_db, 0, SEEK_SET);

  buf_db = (int *) malloc (len_db);

  fread (buf_db, 1, len_db, fp_db);

  fclose (fp_db);

 

也可使用:

ifstream ifs; 

  ifs.open(fileName.c_str(), ios::binary);

 

Q: 如何从二进制img_buf得到cv::Mat,进一步得到长宽信息?

A:输入的参数中: img_buf 表示二进制的图像文件, img_size仅表示该文件的大小,可以理解成 file_size;可以将其理解成输入一个图像文件,目前都是 jpg的文件,然后使用opencv或其它方法来得到一个 cv::Mat 类似的结构,然后就可以进行后续操作了;

下面是一个最简单的示例:

  

    vector<uchar> vec_buf (img_buf, img_buf+img_size);

    cv::Mat img = cv::imdecode(cv::Mat(vec_buf), CV_LOAD_IMAGE_COLOR);

    int row = ....

 

Q: 是否可以用opencvnonfree函数?

A: 可以。

 

Q: 是否可以请教一下 你们相似度匹配的方法?余弦还是欧式距离,还是其他?

A: 可以使用任何相似度衡量方法,如欧氏距离

 

Q: init函数传入参数只有一个,如何使用?

A: 参数实际值为:/home/alisc/work.java/user/model,使用时直接拼接目录读取model下的文件即可。注意斜杠"/"

 

10.  提交测试编译运行相关:

 

Q: 编译时报错: No such file or directory

A: 检查文件是否打包,如果使用了软链接,请不要在Windows环境下解压或压缩,会破坏软链接。Linux压缩保留软链接:zip -ry code.zip interface/ model/

 

 

Q: undefined symbol: _ZN9AliscIntfC1Ev

A: 这个乱码是可以在Linux下【c++flit [乱码]】翻译成函数,翻译过来就是构造函数没有实现,直接给个空的构造就行了,因为初始化都在init函数里了

 

Q:请问单线程1s,那调用mkl等高性能计算库不是自动多线程的么?

A:调用mkl等多线程库在运行时,会有一个对资源消耗的平均水平,如同时使用多少线程,这个数可以算出来,后续会考虑如何合理计算这个。