要用 matlab 读之前处理的 COCO 的 ID map[1],将 sample ID 映射去 image name,用来读图片。ID map 文件每一行的形如:
0 9 000000000009.jpg
空格间开,第一列是 sample ID,第二列是原本的 image ID,即第三列 image name 中的 ID。
用 textscan
[2] 函数,其中格式控制符见 [3]。
Code
id_map_file = fullfile("data/COCO", "id-map.COCO.txt");
f = fopen(id_map_file, "r");
% <sample ID> <image ID> <image name>
id_map = textscan(f, "%d %d %s");
fclose(f);
% 读出的 cell 中对应三列
fprintf("cell shape:"), disp(size(id_map)); % (1, 3)
sid = id_map{1};
image_id = id_map{2};
image_name = id_map{3};
fprintf("id:"), disp(size(sid)); % (123287, 1)
fprintf("image id:"), disp(size(image_id)); % (123287, 1)
fprintf("image name:"), disp(size(image_name)); % (123287, 1)
% sid、image_id 是 int,用 `(i)` 索引
% image_name 是 str,用 `{i}` 索引
fprintf("id: %d, image id: %d, image name: %s\n", sid(1), image_id(1), image_name{1});
% 输出:id: 0, image id: 9, image name: 000000000009.jpg
References
- MS COCO 2017数据集预处理
- textscan
- formatSpec — Format of the data fields