├── .gitignore
├── LICENCE
├── README.md
├── cam_est
├── model_cam.py
└── train_sdf_cam.py
├── data
├── data_sdf_h5_queue.py
├── data_sdf_h5_queue_mask_imgh5_cammat.py
└── filelists
│ ├── 02691156_test.lst
│ ├── 02691156_train.lst
│ ├── 02828884_test.lst
│ ├── 02828884_train.lst
│ ├── 02933112_test.lst
│ ├── 02933112_train.lst
│ ├── 02958343_test.lst
│ ├── 02958343_train.lst
│ ├── 03001627_test.lst
│ ├── 03001627_train.lst
│ ├── 03211117_test.lst
│ ├── 03211117_train.lst
│ ├── 03636649_test.lst
│ ├── 03636649_train.lst
│ ├── 03691459_test.lst
│ ├── 03691459_train.lst
│ ├── 04090263_test.lst
│ ├── 04090263_train.lst
│ ├── 04256520_test.lst
│ ├── 04256520_train.lst
│ ├── 04379243_test.lst
│ ├── 04379243_train.lst
│ ├── 04401088_test.lst
│ ├── 04401088_train.lst
│ ├── 04530566_test.lst
│ └── 04530566_train.lst
├── demo
├── 03001627_17e916fc863540ee3def89b32cef8e45_20.png
├── demo.py
└── result.obj
├── isosurface
├── LIB_PATH
├── computeDistanceField
├── computeMarchingCubes
├── displayDistanceField
└── libtcmalloc.so.4
├── models
├── CNN
│ ├── __init__.py
│ ├── alexnet.py
│ ├── resnet.py
│ └── vgg.py
├── deformnet.py
├── model_normalization.py
├── posenet.py
├── sdfnet.py
└── tf_ops
│ ├── approxmatch
│ ├── __init__.py
│ ├── tf_approxmatch.cpp
│ ├── tf_approxmatch.py
│ ├── tf_approxmatch_compile.sh
│ ├── tf_approxmatch_g.cu
│ └── tf_approxmatch_so.so
│ └── nn_distance
│ ├── README.md
│ ├── __init__.py
│ ├── tf_nndistance.cpp
│ ├── tf_nndistance.py
│ ├── tf_nndistance_compile.sh
│ ├── tf_nndistance_cpu.py
│ ├── tf_nndistance_g.cu
│ └── tf_nndistance_so.so
├── postprocessing
└── clean_smallparts.py
├── preprocessing
├── create_file_lst.py
├── create_img_h5.py
├── create_point_sdf_fullgrid.py
├── create_point_sdf_grid.py
└── info.json
├── result.png
├── test
├── command
├── create_sdf.py
├── test_cd_emd.py
├── test_f_score.py
├── test_iou.py
└── test_sdf_acc.py
├── train
└── train_sdf.py
└── utils
├── output_utils.py
├── part_color_mapping.json
└── tf_util.py
/.gitignore:
--------------------------------------------------------------------------------
1 | *.xml
2 | *.pyc
3 | .idea/
4 | *.o
5 | models/CNN/pretrained_model/
6 | checkpoint/
7 | log/
8 | pnt_vis/
9 | cam_est/checkpoint/
10 |
--------------------------------------------------------------------------------
/LICENCE:
--------------------------------------------------------------------------------
1 |
2 | Copyright (c) 2012-2021 Scott Chacon and others
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining
5 | a copy of this software and associated documentation files (the
6 | "Software"), to deal in the Software without restriction, including
7 | without limitation the rights to use, copy, modify, merge, publish,
8 | distribute, sublicense, and/or sell copies of the Software, and to
9 | permit persons to whom the Software is furnished to do so, subject to
10 | the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DISN: Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction
2 | Please report bugs [here](https://github.com/Xharlie/DISN) and we will publish the bug fix and the latest [updates](https://github.com/Xharlie/DISN)
3 |
4 | * ### We just released a rendering [datasets](https://github.com/Xharlie/ShapenetRender_more_variation) with more view variations that contains RGB, albedo, depth and normal 2D images.
5 |
6 | Please cite our paper
7 | [DISN: Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction (NeurIPS 2019)](https://arxiv.org/abs/1905.10711)
8 |
9 | ```
10 | @incollection{NIPS2019_8340,
11 | title = {DISN: Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction},
12 | author = {Xu, Qiangeng and Wang, Weiyue and Ceylan, Duygu and Mech, Radomir and Neumann, Ulrich},
13 | booktitle = {Advances in Neural Information Processing Systems 32},
14 | editor = {H. Wallach and H. Larochelle and A. Beygelzimer and F. d\textquotesingle Alch\'{e}-Buc and E. Fox and R. Garnett},
15 | pages = {492--502},
16 | year = {2019},
17 | publisher = {Curran Associates, Inc.},
18 | url = {http://papers.nips.cc/paper/8340-disn-deep-implicit-surface-network-for-high-quality-single-view-3d-reconstruction.pdf}
19 | }
20 | ```
21 | Code contact: [Qiangeng Xu*](https://xharlie.github.io/) and [Weiyue Wang*](https://weiyuewang.github.io/)
22 |
23 |
24 |
25 | ## Installation
26 | ```
27 | pip install trimesh==2.37.20
28 | cd {DISN}
29 | mkdir checkpoint
30 | cd checkpoint
31 | wget https://www.dropbox.com/s/2ts7qc9w4opl4w4/SDF_DISN.tar?dl=0
32 | tar -xvzf SDF_DISN.tar?dl=0
33 | rm -rf SDF_DISN.tar?dl=0
34 | cd ..
35 | mkdir cam_est/checkpoint
36 | cd cam_est/checkpoint
37 | wget https://www.dropbox.com/s/hyv4lcvpfu0au9e/cam_DISN.tar?dl=0
38 | tar -xvzf cam_DISN.tar?dl=0
39 | rm -rf cam_DISN.tar?dl=0
40 | cd ../../
41 | change corresponding libary path in your system in isosurface/LIB_PATH
42 | ```
43 | ## Demo:
44 | * --sdf_res control the resolution of the sampled sdf, default is 64, the larger, the more fine-grained, but slower.
45 | ```
46 | cd {DISN}
47 | source isosurface/LIB_PATH
48 | nohup python -u demo/demo.py --cam_est --log_dir checkpoint/SDF_DISN --cam_log_dir cam_est/checkpoint/cam_DISN --img_feat_twostream --sdf_res 256 &> log/create_sdf.log &
49 | ```
50 | The result is demo/result.obj.
51 |
52 | ## Data Preparation
53 |
54 | * ### file location setup:
55 | * under preprocessing/info.json, you can change the locations of your data: the neccessary dir for the main model are :
56 | ```
57 | "raw_dirs_v1": {
58 | "mesh_dir": "/ssd1/datasets/ShapeNet/ShapeNetCore.v1/",
59 | "norm_mesh_dir": "/ssd1/datasets/ShapeNet/march_cube_objs_v1/",
60 | "rendered_dir": "/ssd1/datasets/ShapeNet/ShapeNetRendering/",
61 | "renderedh5_dir": "/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1/",
62 | "sdf_dir": "/ssd1/datasets/ShapeNet/SDF_v1/"
63 | }
64 | ```
65 |
66 | * ### Download ShapeNetCore.v1
67 | download the dataset following the instruction of https://www.shapenet.org/account/ (about 30GB)
68 |
69 | ```
70 | cd {your download dir}
71 | wget http://shapenet.cs.stanford.edu/shapenet/obj-zip/ShapeNetCore.v1.zip
72 | unzip ShapeNetCore.v1.zip -d {your mesh_dir}
73 | ```
74 |
75 | * ### Prepare SDF files and marching cube ground truth model
76 | To directly download the generated sdf and model, follow the instruction [here](https://github.com/Xharlie/DISN)
77 | To generate sdf files and the reconstructed models by yourself (Please expect the script to run for several hours), please execute the following command lines
78 | Our data preparation used this paper [Vega: non-linear fem deformable object simulator](http://run.usc.edu/vega/SinSchroederBarbic2012.pdf). Please also cite it if you use our code to generate sdf files
79 | ```
80 | mkdir log
81 | cd {DISN}
82 | source isosurface/LIB_PATH
83 | nohup python -u preprocessing/create_point_sdf_grid.py --thread_num {recommend 9} --category {default 'all', but can be single category like 'chair'} &> log/create_sdf.log &
84 |
85 | ## SDF folder takes about 9.0G, marching cube obj folder takes about 245G
86 |
87 | ```
88 | * ### Download and generate 2d image h5 files:
89 | * #### download 2d image following 3DR2N2[https://github.com/chrischoy/3D-R2N2], please cite their paper if you use this image tar file:
90 |
91 | ```
92 | wget http://cvgl.stanford.edu/data2/ShapeNetRendering.tgz
93 | untar it to {your rendered_dir}
94 | ```
95 | * #### run h5 file generation (about 26 GB) :
96 |
97 | ```
98 | cd {DISN}
99 | nohup python -u preprocessing/create_img_h5.py &> log/create_imgh5.log &
100 | ```
101 |
102 | ## Camera parameters estimation network
103 |
104 | * ### train the camera parameters estimation network:
105 | ```
106 | ### train the camera poses of the original rendered image dataset.
107 | nohup python -u cam_est/train_sdf_cam.py --log_dir checkpoint/{your training checkpoint dir} --gpu 0 --loss_mode 3D --learning_rate 2e-5 &> log/cam_3D_all.log &
108 |
109 | ### train the camera poses of the adding 2 more DoF augmented on the rendered image dataset.
110 | nohup python -u cam_est/train_sdf_cam.py --log_dir checkpoint/{your training checkpoint dir} --gpu 2 --loss_mode 3D --learning_rate 1e-4 --shift --shift_weight 2 &> log/cam_3D_shift2_all.log &
111 |
112 | ```
113 | * ### create h5 file of image and estimated cam parameters:
114 | ```
115 | ### Create img_h5 to {renderedh5_dir_est} in your info.json, the default is only generate h5 of test images and cam parameters(about 5.3GB)
116 | nohup python -u train_sdf_cam.py --img_h5_dir {renderedh5_dir_est} --create --restore_model checkpoint/cam_3D_all --log_dir checkpoint/{your training checkpoint dir} --gpu 0--loss_mode 3D --batch_size 24 &> log/create_cam_mixloss_all.log &
117 | ```
118 |
119 | ## SDF generation network:
120 |
121 | * ### train the sdf generation with provided camera parameters:
122 |
123 | if train from scratch, you can load official pretrained vgg_16 by setting --restore_modelcnn; or you can --restore_model to your checkpoint to continue the training):
124 |
125 | * support flip the background color from black to white since most online images have white background(by using --backcolorwhite)
126 | * if use flag --cam_est, the img_h5 is loaded from {renderedh5_dir_est} instead of {renderedh5_dir}, so that we can train the generation on the estimated camera parameters
127 | ```
128 | nohup python -u train/train_sdf.py --gpu 0 --img_feat_twostream --restore_modelcnn ./models/CNN/pretrained_model/vgg_16.ckpt --log_dir checkpoint/{your training checkpoint dir} --category all --num_sample_points 2048 --batch_size 20 --learning_rate 0.0001 --cat_limit 36000 &> log/DISN_train_all.log &
129 | ```
130 |
131 | * ### inference sdf and create mesh objects:
132 |
133 | * will save objs in {your training checkpoint dir}/test_objs/{sdf_res+1}_{iso}
134 | * will save objs in {your training checkpoint dir}/test_objs/{sdf_res+1}_{iso}
135 | * if use estimated camera post, --cam_est, will save objs in {your training checkpoint dir}/test_objs/camest_{sdf_res+1}_{iso}
136 | * if only create chair or a single category, --category {chair or a single category}
137 | * --sdf_res control the resolution of the sampled sdf, default is 64, the larger, the more fine-grained, but slower.
138 | ```
139 | source isosurface/LIB_PATH
140 |
141 | #### use ground truth camera pose
142 | nohup python -u test/create_sdf.py --img_feat_twostream --view_num 24 --sdf_res 64 --batch_size 1 --gpu 0 --sdf_res 64 --log_dir checkpoint/{your training checkpoint dir} --iso 0.00 --category all &> log/DISN_create_all.log &
143 |
144 | #### use estimated camera pose
145 | nohup python -u test/create_sdf.py --img_feat_twostream --view_num 24 --sdf_res 64 --batch_size 1 --gpu 3 --sdf_res 64 --log_dir checkpoint/{your training checkpoint dir} --iso 0.00 --category all --cam_est &> log/DISN_create_all_cam.log &
146 | ```
147 | * ### clean small objects:
148 | * #### if the model doens't converge well, you can clean flying parts that generated by mistakes
149 | ```
150 | nohup python -u clean_smallparts.py --src_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --tar_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --thread_n 10 &> log/DISN_clean.log &
151 | ```
152 |
153 | ## Evaluation:
154 | ### please compile models/tf_ops/ approxmatch and nn_distance and cites "A Point Set Generation Network for 3D Object Reconstruction from a Single Image"
155 | * ### Chamfer Distance and Earth Mover Distance:
156 | * #### cal_dir specify which obj folder to be tested, e.g. if only test watercraft, --category watercraft
157 | ```
158 | nohup python -u test/test_cd_emd.py --img_feat_twostream --view_num 24 --num_sample_points 2048 --gpu 0 --batch_size 24 --log_dir checkpoint/{your training checkpoint dir} --cal_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --category all &> log/DISN_cd_emd_all.log &
159 | ```
160 | * ### F-Score caluculation:
161 | * cal_dir specify which obj folder to be tested, e.g. if only test watercraft, --category watercraft
162 | also the threshold of true can be set, here we use 2.5 for default:
163 | ```
164 | nohup python -u test/test_f_score.py --img_feat_twostream --view_num 24 --num_sample_points 2048 --gpu 0 --batch_size 24 --log_dir checkpoint/{your training checkpoint dir} --cal_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --category all --truethreshold 2.5 &> log/DISN_fscore_2.5.log &
165 | ```
166 | * ### IOU caluculation:
167 | * cal_dir specify which obj folder to be tested, e.g. if only test watercraft, --category watercraft
168 | * --dim specify the number of voxels along each 3D dimension.
169 |
170 | ```
171 | nohup python -u test/test_iou.py --img_feat_twostream --view_num 24 --log_dir checkpoint/{your training checkpoint dir} --cal_dir checkpoint/{your training checkpoint dir}/test_objs/65_0.0 --category all --dim 110 &> DISN_iou_all.log &
172 | ```
173 |
--------------------------------------------------------------------------------
/cam_est/model_cam.py:
--------------------------------------------------------------------------------
1 | import tensorflow as tf
2 | import numpy as np
3 | import os
4 | import tensorflow.contrib.slim as slim
5 | from tensorflow.contrib.slim.python.slim.nets import vgg
6 | import sys
7 | BASE_DIR = os.path.dirname(os.path.abspath(__file__))
8 | ROOT_DIR = os.path.dirname(BASE_DIR)
9 | sys.path.append(os.path.join(ROOT_DIR))
10 | sys.path.append(os.path.join(ROOT_DIR,'..'))
11 | sys.path.append(os.path.join(ROOT_DIR, 'models'))
12 | import posenet
13 |
14 | def placeholder_inputs(batch_size, num_points, img_size, num_pc=2018, num_sample_pc = 2048*8, scope=''):
15 |
16 | with tf.variable_scope(scope) as sc:
17 | pc_pl = tf.placeholder(tf.float32, shape=(batch_size, num_pc, 3))
18 | sample_pc_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 3))
19 | sample_pc_rot_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 3))
20 | imgs_pl = tf.placeholder(tf.float32, shape=(batch_size, img_size[0], img_size[1], 3))
21 | sdf_value_pl = tf.placeholder(tf.float32, shape=(batch_size, num_sample_pc, 1))
22 | sdf_sign_pl = tf.placeholder(tf.int32, shape=(batch_size, num_sample_pc))
23 | trans_mat_pl = tf.placeholder(tf.float32, shape=(batch_size, 4, 3))
24 | RT_mat_pl = tf.placeholder(tf.float32, shape=(batch_size, 4, 3))
25 | shifts_pl = tf.placeholder(tf.float32, shape=(batch_size, 2))
26 |
27 | # camera intrinsic matrix
28 | K = np.array([[149.84375, 0., 68.5],[0., 149.84375, 68.5],[0., 0., 1.]], dtype=np.float32)#.T
29 | K_pl = tf.constant(K)
30 | K_pl = tf.expand_dims(K_pl, 0) # Convert to a len(yp) x 1 matrix.
31 | K_pl = tf.tile(K_pl, [batch_size, 1, 1]) # Create multiple columns.
32 |
33 | sdf = {}
34 | sdf['pc'] = pc_pl
35 | sdf['sample_pc'] = sample_pc_pl
36 | sdf['sample_pc_rot'] = sample_pc_rot_pl
37 | sdf['imgs'] = imgs_pl
38 | sdf['sdf_value'] = sdf_value_pl
39 | sdf['sdf_sign'] = sdf_sign_pl
40 | sdf['trans_mat'] = trans_mat_pl
41 | sdf['RT'] = RT_mat_pl
42 | sdf['K'] = K_pl
43 | sdf['shifts'] = shifts_pl
44 |
45 | return sdf
46 |
47 | def get_model(ref_dict, num_point, is_training, bn=False, bn_decay=None, img_size = (137,137), wd=1e-5, FLAGS=None):
48 |
49 | ref_img = ref_dict['imgs']
50 | ref_pc = ref_dict['pc']
51 | ref_sample_pc = ref_dict['sample_pc']
52 | ref_sample_pc_rot = ref_dict['sample_pc_rot']
53 | trans_mat = ref_dict['trans_mat']
54 | K = ref_dict['K']
55 | RT = ref_dict['RT']
56 | gt_xyshift = ref_dict['shifts']
57 |
58 | batch_size = ref_img.get_shape()[0].value
59 |
60 | # endpoints
61 | end_points = {}
62 | end_points['ref_pc'] = ref_pc
63 | end_points['RT'] = RT
64 | end_points['K'] = K
65 | end_points['gt_xyshift'] = gt_xyshift
66 | end_points['trans_mat'] = trans_mat
67 | end_points['sample_pc'] = ref_sample_pc #* 10
68 |
69 | # Image extract features
70 | if ref_img.shape[1] != 224 or ref_img.shape[2] != 224:
71 | ref_img = tf.image.resize_bilinear(ref_img, [224, 224])
72 | end_points['ref_img'] = ref_img
73 |
74 | # vgg.vgg_16.default_image_size = (224, 224)
75 | with slim.arg_scope([slim.conv2d],
76 | weights_regularizer=slim.l2_regularizer(wd)):
77 | ref_feats_embedding, vgg_end_points = vgg.vgg_16(ref_img, num_classes=1024, is_training=False, scope='vgg_16', spatial_squeeze=False)
78 | ref_feats_embedding_cnn = tf.squeeze(ref_feats_embedding, axis = [1,2])
79 | end_points['embedding'] = ref_feats_embedding_cnn
80 | print(vgg_end_points.keys())
81 |
82 | with tf.variable_scope("cameraprediction") as scope:
83 | if FLAGS.shift:
84 | pred_rotation, pred_translation, pred_RT, pred_xyshift = posenet.get_cam_mat_shft(ref_feats_embedding_cnn, is_training, batch_size, bn, bn_decay, wd)
85 | end_points['pred_rotation'] = pred_rotation
86 | end_points['pred_translation'] = pred_translation
87 | end_points['pred_RT'] = pred_RT
88 | end_points['pred_xyshift'] = pred_xyshift
89 | else:
90 | pred_rotation, pred_translation, pred_RT = posenet.get_cam_mat(ref_feats_embedding_cnn, is_training, batch_size, bn, bn_decay, wd)
91 | end_points['pred_rotation'] = pred_rotation
92 | end_points['pred_translation'] = pred_translation
93 | end_points['pred_RT'] = pred_RT
94 | end_points['pred_xyshift'] = None
95 | pred_xyshift = None
96 |
97 | print('trans_mat', trans_mat.shape)
98 | sample_img_points, gt_xy = get_img_points(ref_sample_pc, trans_mat, gt_xyshift, FLAGS)
99 | end_points['sample_img_points'] = sample_img_points
100 | end_points['gt_xy'] = gt_xy
101 |
102 | K_transpose = tf.transpose(K, perm=[0, 2, 1])
103 | pred_trans_mat = tf.matmul(pred_RT, K_transpose)
104 | pred_sample_img_points, pred_xy = get_img_points(ref_sample_pc, pred_trans_mat, pred_xyshift, FLAGS)
105 | end_points['pred_sample_img_points'] = pred_sample_img_points
106 | end_points['pred_trans_mat'] = pred_trans_mat
107 | end_points['pred_xy'] = pred_xy
108 | print("gt_xy, pred_xy", gt_xy.get_shape(), pred_xy.get_shape())
109 | return end_points
110 |
111 | def get_img_points(sample_pc, trans_mat_right, pred_xyshift, FLAGS):
112 | # sample_pc B*N*3
113 | size_lst = sample_pc.get_shape().as_list()
114 | homo_pc = tf.concat((sample_pc, tf.ones((size_lst[0], size_lst[1], 1),dtype=np.float32)),axis= -1)
115 | print("homo_pc.get_shape()", homo_pc.get_shape())
116 | pc_xyz = tf.matmul(homo_pc, trans_mat_right)
117 | print("pc_xyz.get_shape()", pc_xyz.get_shape()) # B * N * 3
118 | pc_xy = tf.cast(tf.divide(pc_xyz[:,:,:2], tf.expand_dims(pc_xyz[:,:,2], axis = 2)), dtype=tf.float32)
119 | if FLAGS.shift:
120 | pc_xy = pc_xy + tf.tile(tf.expand_dims(pred_xyshift / 2 * FLAGS.img_h, axis=1), (1,FLAGS.num_points,1))
121 | mintensor = tf.constant([0.0,0.0], dtype=tf.float32)
122 | maxtensor = tf.constant([136.0,136.0], dtype=tf.float32)
123 | return tf.minimum(maxtensor, tf.maximum(mintensor, pc_xy)), pc_xy
124 |
125 | def get_loss(end_points, sdf_weight=10., regularization=True, FLAGS=None):
126 | """ sigmoid loss+sdf value"""
127 |
128 | sample_pc = end_points['sample_pc']
129 | RT = end_points['RT']
130 | pred_RT = end_points['pred_RT']
131 | sample_img_points = end_points['sample_img_points']
132 | pred_sample_img_points = end_points['pred_sample_img_points']
133 | pred_xy = end_points['pred_xy']
134 | pred_xyshift = end_points['pred_xyshift']
135 | gt_xyshift = end_points['gt_xyshift']
136 | gt_xy = end_points['gt_xy']
137 | pred_trans_mat = end_points['pred_trans_mat']
138 | trans_mat = end_points['trans_mat']
139 | loss = 0.
140 | # K = end_points['K']
141 | # pred_rotation = end_points['pred_rotation']
142 | # pred_translation = end_points['pred_translation']
143 | # trans_cam = end_points['trans_mat']
144 |
145 | ################
146 | # Compute loss #
147 | ################
148 | end_points['losses'] = {}
149 | end_points['results'] = {}
150 |
151 | ########### camera loss
152 | ##point cloud rotation error
153 | size_lst = sample_pc.get_shape().as_list()
154 | homo_sample_pc = tf.concat((sample_pc, tf.ones((size_lst[0], size_lst[1], 1),dtype=np.float32)),axis= -1)
155 | sub_3d = tf.matmul(homo_sample_pc, pred_RT) - tf.matmul(homo_sample_pc, RT)
156 | rotpc_loss = tf.reduce_mean(tf.nn.l2_loss(sub_3d))
157 | rot2d_loss = tf.reduce_mean(tf.nn.l2_loss(pred_xy - gt_xy)) / 10000.
158 | rot2d_dist_all = tf.reduce_mean(tf.sqrt(tf.reduce_sum(tf.square(sample_img_points - pred_sample_img_points), axis = -1)), axis=1)
159 | rot2d_dist = tf.reduce_mean(rot2d_dist_all)
160 | rot3d_dist_all = tf.reduce_mean(tf.sqrt(tf.reduce_sum(tf.square(sub_3d), axis = -1)), axis=1)
161 | rot3d_dist = tf.reduce_mean(rot3d_dist_all)
162 | rotmatrix_loss = tf.reduce_mean((tf.square((pred_trans_mat-trans_mat))))
163 | end_points['rot_homopc'] = tf.matmul(homo_sample_pc, RT)
164 | end_points['pred_rot_homopc'] = tf.matmul(homo_sample_pc, pred_RT)
165 | rotpc_loss = rotpc_loss #* 100
166 | end_points['losses']['rotpc_loss'] = rotpc_loss
167 | end_points['losses']['rot2d_loss'] = rot2d_loss
168 | end_points['losses']['rot3d_dist'] = rot3d_dist
169 | end_points['losses']['rot2d_dist'] = rot2d_dist
170 | end_points['losses']['rotmatrix_loss'] = rotmatrix_loss
171 | end_points['results']['rot2d_dist_all'] = rot2d_dist_all
172 | end_points['results']['rot3d_dist_all'] = rot3d_dist_all
173 | if FLAGS.loss_mode == "3D":
174 | loss += rotpc_loss
175 | elif FLAGS.loss_mode == "2D":
176 | loss += rot2d_loss
177 | elif FLAGS.loss_mode == "3DM":
178 | loss += rotpc_loss + rotmatrix_loss * 0.3
179 | else:
180 | loss += rot2d_loss + rotpc_loss + rotmatrix_loss
181 | if FLAGS.shift:
182 | shiftxy_loss = tf.reduce_mean(tf.nn.l2_loss(gt_xyshift - pred_xyshift))
183 | end_points['losses']['shiftxy_loss'] = shiftxy_loss
184 | loss+= shiftxy_loss * FLAGS.shift_weight
185 | # ## rotation geodesic distance loss
186 | # geodist = posenet.compute_geodesic_distance_from_two_matrices(pred_rotation, RT[:,:3,:])
187 | # geodist_loss = tf.reduce_mean(tf.nn.l2_loss(geodist))
188 | # geodist_loss = geodist_loss
189 | # end_points['losses']['geodist_loss'] = geodist_loss
190 | # loss += geodist_loss
191 |
192 | # ## rotation mat loss
193 | # rot_loss = tf.reduce_mean(tf.nn.l2_loss(pred_rotation - RT[:,:3,:]))
194 | # rot_loss = 100 * rot_loss
195 | # end_points['losses']['rot_loss'] = rot_loss
196 | # loss += rot_loss
197 |
198 | # ## rotation mat differencel loss
199 | # rot_mat_diff = tf.matmul(pred_rotation, tf.transpose(RT[:,:3,:], perm=[0,2,1]))
200 | # end_points['rot_mat_diff'] = rot_mat_diff
201 | # rot_mat_diff -= tf.constant(np.eye(3), dtype=tf.float32)
202 | # rot_mat_diff_loss = tf.reduce_mean(tf.nn.l2_loss(rot_mat_diff))
203 | # rot_mat_diff_loss = 100 * rot_mat_diff_loss
204 | # end_points['losses']['rot_mat_diff'] = rot_mat_diff_loss
205 | # loss += rot_mat_diff_loss
206 |
207 | # trans_loss = tf.reduce_mean(tf.abs(pred_translation - RT[:,3,:]))
208 | # trans_loss = 100 * trans_loss
209 | # end_points['losses']['trans_loss'] = trans_loss
210 | # loss += trans_loss
211 |
212 | # cam_loss = tf.reduce_mean(tf.abs(pred_RT - RT))
213 | # cam_loss = 100 * cam_loss
214 |
215 | # end_points['losses']['rot_loss'] = rot_loss
216 | # end_points['losses']['cam_loss'] = cam_loss
217 | # cam_loss = rot_mat_diff + trans_loss
218 | # loss += cam_loss
219 |
220 | # cam_loss = tf.reduce_mean(tf.abs(pred_cam - RT))
221 | # end_points['losses']['cam_loss'] = cam_loss
222 | # loss += cam_loss
223 |
224 | # mat_diff = tf.matmul(pred_rotation, tf.transpose(pred_rotation, perm=[0,2,1]))
225 | # mat_diff -= tf.constant(np.eye(3), dtype=tf.float32)
226 | # mat_diff_loss = tf.nn.l2_loss(mat_diff)
227 | # end_points['losses']['mat_diff_loss'] = mat_diff_loss
228 | # loss += mat_diff_loss
229 |
230 | ############### weight decay
231 | if regularization:
232 | vgg_regularization_loss = tf.add_n(slim.losses.get_regularization_losses())
233 | # decoder_regularization_loss = tf.add_n(tf.get_collection('regularizer'))
234 | end_points['losses']['regularization'] = vgg_regularization_loss#(vgg_regularization_loss + decoder_regularization_loss)
235 | loss += vgg_regularization_loss#(vgg_regularization_loss + decoder_regularization_loss)
236 |
237 | end_points['losses']['overall_loss'] = loss
238 |
239 | return loss, end_points
240 |
241 |
--------------------------------------------------------------------------------
/data/filelists/02828884_test.lst:
--------------------------------------------------------------------------------
1 | 131edf0948b60ee6372c8cd7d07d8ddc
2 | c96afd58ad067a6871b66f80cfaa9877
3 | dd97603ce7538c15be5bbc844e6db7e
4 | c6dbedf2028735ccd2b12aa6a0f050b3
5 | d8c1f1b9bdbd697b849cf9ca1e2dcbed
6 | 974668cad6e15520c955e5ed03ef3a2f
7 | 866b0fab7a3e54053555de1e3169ac6e
8 | fb861f0e4e7f528fccda8d28b44378b7
9 | 22031fe0420834a9ad5067eac75a07f7
10 | 87c34f2d5d53a51768679c90b064f491
11 | 373ae08d8903dc10ba929f7d2edd1706
12 | e6a3b8946b66b83065ba78ad9601cf1b
13 | b3974f214dd4af93601104cd2d998272
14 | 9b5dfec7d45eeca94c8c340ea700916e
15 | db4aeb6354f5bd0dd4d8765e3910f617
16 | a5a9a0be36997bd82f549c6b85154162
17 | 6df5b51b250a823b147d36b9f2f13116
18 | b4ae95fbb879bed0ee38cd6552dcaadc
19 | 366db933a2c99444f4fb4dee5181bee
20 | 9c9fc31bba4881794620a50068fc504d
21 | aa2571b8067d6d5383c4907a93b0fbc1
22 | 6b4e4125c1a680cd2cc92e3c03668ea8
23 | 42ffe8d78c2e8da9d40c07d3c15cc681
24 | eb038519c5ba87b663b2acb037dfbcde
25 | fc7785be580a926a3409d1e6da3f019
26 | 23ce36288382e8285710c881d369ccb3
27 | a8e987a6a6486b962d6c8e51365a5a87
28 | 4647754b7c5b31cccb2a965e75be701c
29 | 957596b8dc4cba37ad5067eac75a07f7
30 | a4491b4a67356be5184c1614f4105c8b
31 | 218b98805019ba7df11e0e33e4b1b85c
32 | 2e2518a8a2f335ae76bc197b3a3ffc0
33 | 1b78416210cbdcf1b184e775cf66758c
34 | 89f810f17284aceb85ef4356ea4ff622
35 | 2eea9c22b37967006e40121acd58a004
36 | 94420ab399ce8a1561e51a63d5bc6e46
37 | b852e63ad5983f1a8ccde000e771fc1a
38 | b6b10e519fed3c9ea9d99888ae8a3eb5
39 | 9fd5b67a2b20b5d1b19874039c8f3e05
40 | 88440ae4e218fa6ed4d8765e3910f617
41 | ddbcdce0db6aa00524b325c2195eaee5
42 | 7b21980987b63b953e329950ec40f6dd
43 | f8ff2310c6b130d38aaa31e538081318
44 | fdf0f799b897b0c99917ad57402f53f1
45 | 71ab9fd8db7ee09a59cbde03ded257fd
46 | f7ffdf91b66c0c989c9513cebb0fb44c
47 | 459f90aa2162b1f1d46c340938e2ff1c
48 | 7a8a8c523bcaa364a41bbb5eb703e15
49 | d74a990634bb4b98ad5067eac75a07f7
50 | 2c6c50ead2551d51a0e159a720dabf7
51 | 8f102661c3efbdd184f92715bac39b74
52 | 7cab2809bcc7b73a141c96faecd80bdd
53 | 498ef3fb51503dc36e07666ce67ff5a
54 | 61ade658bb475cc6a992c1353f8a88ef
55 | 7bbd4d3fed3c4255626d7e3d07da8352
56 | 5d463e4412600a3213afadfff198a630
57 | 2cb61abc0c2663ae8f0add668496d7a1
58 | 8277bffcffda5c4edab3d510e4b89249
59 | c9ca9b7317ac41b82168e5dee0d7f21
60 | af79d505f2ef2223cb2a965e75be701c
61 | d7025b55fe15337ed7c5502d4a22edf5
62 | 6752d9230ae82d1ce67de87b371d4c06
63 | ea4740ede10b7620c09352f205bd9134
64 | 8d074f177479ac42628516f95b4691f
65 | 9e4c82a76b6aff2bbeedb4c8fd29e2d1
66 | 557899ea369eedd4cb2a965e75be701c
67 | 8a5a59ab999c03ccfb0eb7e753c06942
68 | d1f9f40f8f58394c91cb0beedee33fd
69 | 14af4a9931635c75f4fb4dee5181bee
70 | 35948e4d06a9b07e8ba8ff316aec8d3d
71 | d8b87f36fde3f2f3bc5996932c1238cd
72 | 56a818c4e5891f1d39316df04169d12f
73 | 3830a5b2eec789ac63b2acb037dfbcde
74 | 85db4f1bf9e2b62c492d9da2668ec34c
75 | 9de1b1608e6ffb9afde926512eb9d305
76 | 1a55e418c61e9dab6f4a86fe50d4c8f0
77 | f0b85200702e4739391e4d6c585a697a
78 | 84bb6a30b1c5a87be008ebe8273a693f
79 | 14abcb14222adcd499b68520b875243
80 | 95cbcdc64b28bbf396f61afd58e50ae2
81 | cad58af144b615b674a3201fd136f855
82 | 3749b110a6f7895afdb310510a9dc39
83 | a047cb14c22517e6f33e284fed03c3fc
84 | 28b9f2908f0cbb179c21c139c0613648
85 | 84efcf2796fad0d2917fe9209d09e56e
86 | e7bb6ef568db1c986dfe473551340375
87 | 5d8f7c82a04943fed201085e80edb26a
88 | 4d6b053f11e784e2a136ebdce43e4200
89 | d9c927569da63ff92ebeb1e6a8111f53
90 | a7366461245f831ea764a25163affad1
91 | beae527c550f5ce8e4ed7bd95fe664b
92 | 2bfeb0ef0693823d1418b6bd61b3ca4
93 | b9fb64100372235adbbc9440457e303e
94 | 19399a9aac37442359cbde03ded257fd
95 | a380e75d8efcb4192f550a4f461edf6b
96 | 8fc8fb14df48da05ad5067eac75a07f7
97 | 1e039c5d86b061a593ebeeedbff73b
98 | ad9a12cce63df1c9870f22c94729669b
99 | f264c4d430891732d97248c4337f8439
100 | eb9938d81ec9005882db9fca4b68095
101 | efe997f288fdce2d985ef0bf52b97bf5
102 | 550e62946d2f55554bce3147c41ec725
103 | 26299b4f8e03f3ae9470a3e695aa4fae
104 | 92f1fa8d3b5da497ad5067eac75a07f7
105 | 18d0aff1a5eb486ae2be3aed8abfbbaf
106 | 20222f467d257022c8bbbd98dee48cb
107 | c3d8c664906eb8e57b11ae648ea92233
108 | 5a96b6b335bada106fa8ce57c8ec2e09
109 | ea56c97ec123270c2d776d9e024e5deb
110 | abcb5dc91337f47682db9fca4b68095
111 | 8a03039b614b41b319fb4103277a6b93
112 | 2974b7f87eb2297ffebad4f49b26ec52
113 | 3d470843f013f9d8c9fd4914d3d18461
114 | 891b8a01ad71af2db7e843606969432b
115 | 220ab2896e0b5d87dae58dd9656897ad
116 | e56b95381904bfd08ccde000e771fc1a
117 | 717019a5d139874f44dfa7c5506ef235
118 | abf095439d2d7bdb57a8fa4c1cbcf3ea
119 | e8480e72fb656057656a19d1d18fdbac
120 | 617fa8d6d65af35d71295682a9280b8b
121 | e1ce45ee8de4436655a9b4fa7594b177
122 | de00838284782bfe97fb25ec4f973add
123 | f7b5756c04e354a0c1c40d87de24d930
124 | 552ab19eab47725cb2a965e75be701c
125 | 84d0db8ad40017a195c500dedd6e2c23
126 | cff15ed24c45878b3567b82c74e275b4
127 | 2346b4f87a4f683b92e6829c9c63f7e8
128 | e4b80a7e381c6ef0f4215050a7660e65
129 | 9399c7769b01d4742591fa6348c25a73
130 | 3e81e31d8cd99cdffae0a22d98098878
131 | 8bb2354519a2ca276d9eb2ed02ef01ed
132 | 106494f75125eea6adf66a6d73888234
133 | ce23a5781e86368af4fb4dee5181bee
134 | 3a60057b27f90ed64910664c4d1311f4
135 | c7fb65bd3bd09a852056b4bd5d870b47
136 | 72b6c4e1d8b93b21c2bf98e7124e149
137 | 6a237c1e61fe2bba8490246570868c8d
138 | 25876fee744f8f8dd45380eb90f62b3f
139 | 86059f6fa56a8c5e44175b4dddf5be08
140 | 2d1ea225c279836cd67b3c7873295e75
141 | b95994218ee416f492d9da2668ec34c
142 | fa2f82cf9275c2078ccde000e771fc1a
143 | 2731687dd460a263d8eae9bce48bbeed
144 | 5b24beacd0385489a6ca26b5255a8e6
145 | cf873b381095c2d43cbc166debd211cf
146 | 38e367e4421ec3cbba70cedf91706353
147 | 9bb6f0077f91c613f155d75bbf62b80
148 | 90a8b80aa2fa209ca936e2693dce34b6
149 | bfaad1f9dadac9b6a385f05be5d65f80
150 | e329a9a5e7422b0a43638dabe1eb5336
151 | 9e4e83e67a901168febad4f49b26ec52
152 | f495bd67af8d9f0cadd1cf65e8dc4de
153 | 5775bf637d14acf1eaa4526a35f01085
154 | 50ef39d633520df0855931d119219022
155 | 5a383d9a0e67caed4ea8cb420cbb292f
156 | d0c64a8b3fed1ba113736977841a6b9b
157 | 2fe40aafbefd99a9d2b12aa6a0f050b3
158 | 1c47c37d6c785d4fe7fd9a18c19837e5
159 | 405d1666d90df2c139842e32fb9b4e4a
160 | 3c7a0029ec98c965601104cd2d998272
161 | 9b37a6d7c9f1800952dac0add839bf80
162 | a76a3d33ac6c3c65d46c340938e2ff1c
163 | a3e3c1bd2a644e2df4fb4dee5181bee
164 | ca21ae1c48c020db1a7fdfcca5768f88
165 | 87086d24c964f9524ee9546b7112f88f
166 | 8afe9533153bb82b157f5033576317e1
167 | 7d865d0774f34972814c9aa90ee14e
168 | e2cf4a7357cae6ed2dd04fa3e4c2a53f
169 | f5e4f9657ecc18efc862eec8232fff1e
170 | 6fe6b24009d0ac4f19b647a92023d001
171 | 4b00859dc8ce46eff4fb4dee5181bee
172 | d25262c74c8269a04c80535a28040aea
173 | 1ac6a3d5c76c8b96edccc47bf0dcf5d3
174 | bd51deddfdcae18b3b8dea4a358cbf0d
175 | 241f99f97083f685beedb4c8fd29e2d1
176 | b65f1141e4eb2529100a6411eafa7455
177 | c3f92e6a78ad156863b2acb037dfbcde
178 | 5b50871735c5cce2d2b12aa6a0f050b3
179 | da39ee814b8e3c0387d7792ff13e9cd8
180 | 80593a84e45e4345f51f77a6d7299806
181 | 88f9fa58ee9ce3de1c863a93a9948fe0
182 | 1c79aa69e4ec26b65dc236dd32108e81
183 | f56c78ba29d9f73e9bc72297235ac73c
184 | f5c6c9a4c5787dae19fb4103277a6b93
185 | adf284153a2a87208c9b655484c84004
186 | 394563d19e157c126f2e3fcce6bbeeb5
187 | 91e169ea3ceb587beff42b9e13c388bc
188 | c33b2dc4fca8fd178cca710901c2e97b
189 | 56f65bffa385a635f4b6538438a0b930
190 | 9ebca72c02d26886a6e82f4002a10be2
191 | 486535f610428612cf078dc7b29022e6
192 | b2a585ba5f0b4a25e76bc197b3a3ffc0
193 | 739d41c59dc387e575f9747ff6fb5e8
194 | 98971eb747738a6880360680c1602c7d
195 | 50a3b398b3a2e5979ec4bb690ca24962
196 | 2eb289d5829907b9e6ad3e1a394e102
197 | 901872a92ecdfa4863b2acb037dfbcde
198 | a11caea04fcac4f5643a8f56e2ede6dc
199 | cf14c102e6da1a78e6d475a101a6dfca
200 | a393945aad7a2cad5067eac75a07f7
201 | a64965f10047f31db3ee3d0077feb1bd
202 | 43cae409bde302d4c88fd5e1f2929cbf
203 | 2aaf5fe631a855b4de9ff1d2442cc6d1
204 | cbf9773bfebd4321cb2a965e75be701c
205 | 9a87c9d904851205bfcc4c7214610fe3
206 | 6aae683396bc08eaa4b1640fdb2c85c0
207 | 62ec527e6093cd007a9af08d0375df56
208 | 444e7c5709eca2496f61afd58e50ae2
209 | ebf5b387f119c51cad5067eac75a07f7
210 | 605b2c687b73695c8da90b986150cc3b
211 | 5f0e28d1324397d9c0b027ae5b223d6
212 | d2cd3e3cb4ed6ee4e7fbee941d13bb9f
213 | 205b404cdee5d81cc624b11e153a6d87
214 | de80be770d51dbf53567b82c74e275b4
215 | 397ac4bbb11796902d92929fa159facf
216 | 567779d7087c75eead5067eac75a07f7
217 | f1f14399ac9684df835bac7bf872f771
218 | da52e5b3a29c06b1eb8ae9cf8e3a676c
219 | 1acf34aa0cb8f06a19fb4103277a6b93
220 | ee50d76492226837926fe0a4cdbf03
221 | 5a86b8c93baf8ad0a9030dd33d75b731
222 | 46a1e2560a1e96f3897fc31a9c059e16
223 | 972e0e5717676e47d201085e80edb26a
224 | b2ab0b13c344132ec569803a3242d4b9
225 | 57678bef578b487a738e43095496b061
226 | aab92a965e310885d2b12aa6a0f050b3
227 | 433253d0d97f814025444614eab3fc33
228 | 88134efda194f8f422f9a913dd25c68a
229 | f13e44c93bca57d092f4c88fd91c6b1b
230 | d7d6a7fae6003dd6f4fb4dee5181bee
231 | a5669fc418b91f9959cbde03ded257fd
232 | feb6a23a5e25abe459af9a18ecf57ec3
233 | 691480901ee9f047ad5067eac75a07f7
234 | 77c2f1b7a7c0a4d15ca1f314f1afc186
235 | 63a218005fa1bee7fd313061a14ce51c
236 | 4e1acb893cafc1ea29c39f613cc72411
237 | d5fd97ad2620480c62cdb4b7b7821421
238 | f2a3ac936fcabeb8d1ccbd5d84e5bc86
239 | e6b0ac08a5326f23faf575cbae5008b8
240 | 39d8fdb56b0e160dbcceec49967c0de7
241 | fa4d4e697d21ec65512d71be7dbf2d60
242 | 9d47deb11cac29f089345002d2594e4c
243 | 1b80cd42474a990ccd8655d05e2f9e02
244 | 2c75963e304f490223ed665630afd1ce
245 | ea96a04c68b969c5c35f34f09f11667
246 | 38c4c2ddbdb502e162701a18243b45d3
247 | 16549eea10c75d0f65d3152da5208307
248 | bcb4f576747e10bdd7f6e86d7d335698
249 | 7acc1a370dfcd3a85ff6fe84f53e00a5
250 | 758b78e2ad5dfdd1edecfa50e41e5c9b
251 | c02649dad5a5946dfcb04979ea30d7e8
252 | 3bc45b4fea81c02463b2acb037dfbcde
253 | 8417c3b75ce474d217b431cae0dd70ed
254 | 52867aee1e2e137912a905e721b748f5
255 | d673c7ec4a08aa6db6f5e7b313e4eaae
256 | e5b1626359c609a59d297e74104d3ac3
257 | 7f4f6fc801f4f957263e68b45fad1e64
258 | 6b9b014c54423664a9bf865a81345d8e
259 | 7e8caf5bf2eb1a61ecaa3c66b0328b42
260 | c0976144b3ec94381076bdfcbbc20a9d
261 | 294613465801739b4739fd13bce14311
262 | 3d92cb6fe0abdf9c4ab121f03cb11a77
263 | 459cad806518f195ba6d436b28fcddfb
264 | f70fe48c38bda53282c132e825d0d08f
265 | 8f52743c3cb564f149e6f7df978f3373
266 | 1be0e167a93a1069acb4ead41419080a
267 | 7a2ad24394c5d139d46c340938e2ff1c
268 | d87bd42b60591573c83f7280476c6eef
269 | 522f8c069a76c21fad5067eac75a07f7
270 | d26818a4e62d931d2056b4bd5d870b47
271 | 84d3224312b9630465826cf0dd1f6a6c
272 | 327dcb9a47911686815bd25a546c8489
273 | cae6c2b329bbc12de5d5fc930770c792
274 | 514ba7cb3392ca5ad5067eac75a07f7
275 | 3fbbb64cce9b5fb681faebbdea6bd9be
276 | 1422f82a72e0b7f48ae1c1abea367249
277 | bdce8b3475f59d38f4fb4dee5181bee
278 | 6233b6cce0da0615d4cfbd0aef5a371
279 | ade8119d5a30ba4bf1547b1668422ce3
280 | 94df387a0b97302ad201085e80edb26a
281 | c293f2fbc66af3dbf4fb4dee5181bee
282 | 870562aca7165d703c78f7fe78269073
283 | a58e45ec5204f09559cbde03ded257fd
284 | 52e921d1e558e6cda19b1c45fadaeb5f
285 | ff8f8d280de66226d2b12aa6a0f050b3
286 | 4504e203b67dd8e473f10e6caaeca56
287 | af264c02f69566cdf4fb4dee5181bee
288 | 381317c1e4c91e87855931d119219022
289 | cb30a5a8df3007f6f4fb4dee5181bee
290 | 2a9ad7f4e7ab564a5be2d177e843be47
291 | 411f68beb7d27135d1dcc55e36186e4e
292 | a12abb06ee3aa30ae074517a246f1e65
293 | 77323ba74273cfe017b431cae0dd70ed
294 | 248e0773a2a8d90879ba0a8466ed4e3b
295 | ec3b32347c823f258c2b40655482a651
296 | fcfc935c2ff7c66c858699aaad4acee4
297 | df31fdbbf7e3616b774561c9c1990536
298 | f5557538f4c6d755d295b24579cf55b8
299 | 919f90e92283eff8febad4f49b26ec52
300 | 44c720c5edf8942798cfd47a860803c5
301 | 978e21e3ac24a83c17b431cae0dd70ed
302 | 41fe326e3decebd1b40f0ac0fb9a650d
303 | 1da4abf560002490391b7a189305050
304 | 162550a8510464d97881b8f7aa99120f
305 | 7c1cf879c84904a4e82028a475156419
306 | 5f9d3dae06acf0e4e93e1127627b834
307 | c6885d073919e897de9de6d8a1c444be
308 | 40279f85fc80e16edccc47bf0dcf5d3
309 | 7f218ef91e835a90b515d1675be6b5d3
310 | 5cbed790bc24fa22056b4bd5d870b47
311 | b1ac6f2ba106e8ec2250bf58700b4d8f
312 | 88a00b80d432ed5a577e7964e0284adb
313 | fd359f64dda4e753870f22c94729669b
314 | 3e4f4c54420bdcae75becd8a4c3f1866
315 | 9d68ef4ac84c552819fb4103277a6b93
316 | 97d009dc14e25080d83393768c99f441
317 | 6152fd8b7b5b10df436455e65b78c0e3
318 | 831955faf1c5eceb433fb7e44afbc69d
319 | 818879b4a23c12bf575f9747ff6fb5e8
320 | f1fe8c6c1f9f28321739c3c7bfb786a5
321 | 303c1519c700d19299e8bf807e902261
322 | 36d1f0331d7f4ad2cf695c8970a97c29
323 | ea518b89b8511916ac51268fdb437a9e
324 | 8ea569854b8dfc8022b74f7ed4070ae0
325 | 9ad5cab6ff1e45fd48113d3612de043b
326 | dd1a375db7015e0ad6983f351200ac6a
327 | 7c40c1a2e4476afbaca9cc236210e91
328 | 367cc7ed7b83b7c8fff16555386d173d
329 | 4bc92bee14e81db06c262ba0bee45d20
330 | 8b8b59fc52257bea58e51facd8ce1a25
331 | 4eb3dc26aad9ace8f4fb4dee5181bee
332 | 9f5ae162a075ec741e85d47a2a5461b3
333 | 481885f3ffe14c40665f42dc26fed092
334 | f123b8da77f6d17e50f9fc0e2c94dd76
335 | 27267209ed320cd271cf429728b349ba
336 | 7c33a6f55768b7acb97ad864945165a1
337 | e0f7a559a6066203dacc0b57c47fa747
338 | 991803aca7fca258b40f0ac0fb9a650d
339 | 3b412429257bc1c34e437e844fb32a1e
340 | dd4d12077d16512d8ab9e8dd82b356fd
341 | b218e59af74f0be4ee9005feeed08b86
342 | 23c874e54f1f9f152d07d128adae16ff
343 | ab131feec69007a42250bf58700b4d8f
344 | 8c942a8e196a9371a782a4379556c7
345 | 93e43734f99c7ca6c42fa56863e48020
346 | d27d44b023a8ac1a54457eecf7344025
347 | 137fdd05ae4e69c7a68359455a0ffe24
348 | 6bc471eb8f212c9317b431cae0dd70ed
349 | 53f19d1ab0828e3fcd3af3995946ed40
350 | a064a3e9b537fd64818b16b10229b98
351 | 1f239e55de52bb63eefaf3e79e3e3454
352 | 3880be8744dc0ebaadab4c26397edfab
353 | ec79d41034e8deabf4fb4dee5181bee
354 | 87dfa3332d118867d0d69b51a45f7aff
355 | a557114149ae934819420b7669e7265
356 | 146934a1cb852afc1a1a2dbbd3d54d53
357 | 192684f9de3adfe827ee88e8274f281e
358 | 4e4b38efc9345bc3cc543a6b1ba2fd1d
359 | 2af98dcf936576b155f28299c0ff52b7
360 | b54d0fbc33d125bb7a6d149f6c9151a9
361 | 360d9cc763aa370320768660cf080d12
362 | ca0a5a3a4c5e255b20768660cf080d12
363 | b1117a83ebf5a4c9c337a931444a5063
364 |
--------------------------------------------------------------------------------
/data/filelists/02933112_test.lst:
--------------------------------------------------------------------------------
1 | 115e4c9a9150fe8e99dd23ec22c4943b
2 | 480a381b676003df4da5feafe6f1c8fc
3 | 6b7123a3631583c612de5317fe5b354f
4 | 63397b0df482d51ad7838dc22b16368e
5 | 92aa3075799e275a3fe047712e43e185
6 | 1a51237c9515ad0a4da5feafe6f1c8fc
7 | 298dcf7bd982cf0712de5317fe5b354f
8 | 4b80db7aaf0dff0c4da5feafe6f1c8fc
9 | 8c1cd3c09ffef7efc59350d819542ec7
10 | 140ec01582235e15c59350d819542ec7
11 | 70ef5ad531624a24cb87a43f8f346ada
12 | 59263293983a99d3de650492e45fb14f
13 | 26dcf7a76c89d5aa4da5feafe6f1c8fc
14 | 68bc79caeaf162a7ce5d6e9371bb5c33
15 | 45553c754e1132533fe047712e43e185
16 | dfe503e6a4a86d4dc59350d819542ec7
17 | 131992dab1550a7aec24cae3e129c189
18 | 7b98e7b25bb83413c59350d819542ec7
19 | a9bfa9259f31ef9fde650492e45fb14f
20 | 6f679ca92bfaca984da5feafe6f1c8fc
21 | 6a910ffe32ae2e575588a2543ef0b0b4
22 | c060caaa105890d74da5feafe6f1c8fc
23 | 24c781a3aa6310a44da5feafe6f1c8fc
24 | cc9194f94951cd934da5feafe6f1c8fc
25 | 39db396f57ec698cc59350d819542ec7
26 | 3c2a50e5907b0fb64da5feafe6f1c8fc
27 | 221d442d733de66144221bef0fa3c36b
28 | 5ff7e1be775072e5824662341ce2b233
29 | 24da7fd5e33513814da5feafe6f1c8fc
30 | 886031ff2a514f86c59350d819542ec7
31 | 3649b02bd61a337321730ef9c9d28bd1
32 | 31a7cd3b7990834cde650492e45fb14f
33 | 7d95374a9110157c7d8c689e1315827b
34 | 60ac3a02f8c1116b5588a2543ef0b0b4
35 | 4cee2825142a64acde650492e45fb14f
36 | 467b66a6ed7b3cd24da5feafe6f1c8fc
37 | 190cb7264781df604da5feafe6f1c8fc
38 | 4c99fa08135a52d04c62bee40dcdc539
39 | f3bc5eb543bd852bb7ea82317702e856
40 | 3b98711b877ae402824662341ce2b233
41 | 2a3a3bf0878f1fa4c59350d819542ec7
42 | bb741a003e5ff46c59350d819542ec7
43 | 2817480c23e4a106c59350d819542ec7
44 | 13aeab12a8ccdb244da5feafe6f1c8fc
45 | 48ad79b48a76fcec4da5feafe6f1c8fc
46 | 180154895560cd0cc59350d819542ec7
47 | aae9df5536cce166d5532c7891a349ad
48 | 5feaee9848b44d44824662341ce2b233
49 | 1ec5e12f2b5684a24da5feafe6f1c8fc
50 | 2bdedc5d70cda02cc59350d819542ec7
51 | 2cf4888579296377c59350d819542ec7
52 | 15de6a77af2b4fccc59350d819542ec7
53 | 45c91d543ef3c1a829a50a2b3c5e5b6
54 | bceca165030250f94da5feafe6f1c8fc
55 | 30675877e822626e3fe047712e43e185
56 | c55eef8d5b4d3db563b3c67777442463
57 | d3257b1df741d9a099c549327bba1953
58 | 8a7f0dd58fbf14a4c59350d819542ec7
59 | 68f25e77ac6bdea7de650492e45fb14f
60 | da5d7b5dfa92abdace5d6e9371bb5c33
61 | 23b7a3961eda17df4da5feafe6f1c8fc
62 | 233612a657bbda534da5feafe6f1c8fc
63 | 26a2132b719d226a86d53ab0fe94e911
64 | 19dd35ef180808c38f1735145fdf5c5c
65 | 6f03b6ab474c04a243e5ff23b077c03a
66 | 973023bbf9c6a603c59350d819542ec7
67 | a95f93b9da094471c59350d819542ec7
68 | 7fbd264b7031c399d37a1bae74ee50a2
69 | 1e40a4dfbd78455812de5317fe5b354f
70 | 721c788bb55b083ae8a9bc001231a118
71 | d8cd6611c5f407cdbe81a9109a782712
72 | b572114b0944ac203fe047712e43e185
73 | 83bb0c92d3ede1e8c59350d819542ec7
74 | 67616bd629dbf7b3824662341ce2b233
75 | 1cd80ed7f3ab7a5d4da5feafe6f1c8fc
76 | bc7973150ac25b1ce08dea88cca8641e
77 | 1f336c9e48f1b54686d53ab0fe94e911
78 | 47344f869d6c12e486d53ab0fe94e911
79 | 11ee3844cf96c7194da5feafe6f1c8fc
80 | 5b112266c93a711b824662341ce2b233
81 | d3ff3bd1badb62c2c59350d819542ec7
82 | 2c6aee97b0325e92de650492e45fb14f
83 | 3a2afbdc240a7f073fe047712e43e185
84 | 1d61ca99924b13fc99dd23ec22c4943b
85 | 90dd9ad1a74e25d53fe047712e43e185
86 | d7fe270a81b0f21c3fe047712e43e185
87 | 6f56fdbf225247abcd8f3fe9ca2145e1
88 | 29ce2b045bc6111912de5317fe5b354f
89 | 88982fc3cdf5d2b212de5317fe5b354f
90 | 54ea003ba0d36f34da5feafe6f1c8fc
91 | 1252e89db37d786386d53ab0fe94e911
92 | 139aeafbfbdd6bb64da5feafe6f1c8fc
93 | bdb118e2b6c9f4d712de5317fe5b354f
94 | 1715965e2e1e33e1c59350d819542ec7
95 | 6d448fdac1dc71f9c59350d819542ec7
96 | 1c898677c5b4291c847857e42f50ec6e
97 | 3167991b1c87967ac59350d819542ec7
98 | 36bfa6f0a5897be786d53ab0fe94e911
99 | 1c4e2879669e949e3fe047712e43e185
100 | 3eddbe968ac08030c59350d819542ec7
101 | 1971024c0cac65a824662341ce2b233
102 | 7359539c1b62cf1e29a50a2b3c5e5b6
103 | ea48a2a501942eedde650492e45fb14f
104 | 14dff09acf069b63c59350d819542ec7
105 | 902a342783278a9d824662341ce2b233
106 | 228a83ea767bcab94da5feafe6f1c8fc
107 | d6242003931d0a27824662341ce2b233
108 | 3cdabe258ed67a144da5feafe6f1c8fc
109 | d4a7b45abac7a39c59350d819542ec7
110 | fc5b7d19b1ab1e8bd0504a433b7a549
111 | 5a2de91981d27ba3c59350d819542ec7
112 | 40d4200a071b555c5588a2543ef0b0b4
113 | 4205bc230382f663c59350d819542ec7
114 | 1a9fa73ca819aa994da5feafe6f1c8fc
115 | 203ef2b06c3ad6033fe047712e43e185
116 | 1d973f05e870af4b4da5feafe6f1c8fc
117 | 4298f678b53d370dc59350d819542ec7
118 | 5b08e72cfe785f4912de5317fe5b354f
119 | 21f3c0d4604587b4da5feafe6f1c8fc
120 | 29c6f3ce118576724da5feafe6f1c8fc
121 | a234f5b48a26fe1d12de5317fe5b354f
122 | 285864fbee3a4038178e7d331e641179
123 | fdf32559c6b7a6643fe047712e43e185
124 | 2ba392a70c40dac7c59350d819542ec7
125 | 85ddbd698b3e7dfec59350d819542ec7
126 | 1676f8b995b976e5824662341ce2b233
127 | 1a1b62a38b2584874c62bee40dcdc539
128 | 55bfa46d7b39f4dcc59350d819542ec7
129 | 2e4184763139ff274da5feafe6f1c8fc
130 | 3d2870c83ad35dfe86d53ab0fe94e911
131 | 12cb11dbb135ca9ac59350d819542ec7
132 | 1b212b67e5eb90f4da5feafe6f1c8fc
133 | 4fd61ff0aa949a4486d53ab0fe94e911
134 | b0f329dc43af0fbd4da5feafe6f1c8fc
135 | 5294d0d31a33e67912de5317fe5b354f
136 | b7be75d3cb83457a44221bef0fa3c36b
137 | 4946c14a466fb5094da5feafe6f1c8fc
138 | 6e2beb63c61144f54da5feafe6f1c8fc
139 | b6c1fd850c5b042c738e43095496b061
140 | 5aee956ff28e337a44221bef0fa3c36b
141 | 134055516ed892913ba1c51b82b58419
142 | 23e3c2a2f61ddb2986d53ab0fe94e911
143 | 6e75ca2b08fe53a344221bef0fa3c36b
144 | 455a583e41579db14da5feafe6f1c8fc
145 | 1aa76e87d7bcf5c0c59350d819542ec7
146 | 6a121783609b4a18824662341ce2b233
147 | 29b2a25804651a34c59350d819542ec7
148 | 47f477a8b67d28028f1735145fdf5c5c
149 | 16bc9f5821d887f2d7838dc22b16368e
150 | a03797c4034be11ac59350d819542ec7
151 | 9d0a9c46bb6768fbd37a1bae74ee50a2
152 | 2bda2392d5715d16c59350d819542ec7
153 | 2b6bd6e0b3c2565839d3717288022c20
154 | 99ff3359d64f1f45ce5d6e9371bb5c33
155 | 90ccd5fbb48ba3bdde650492e45fb14f
156 | 19e444da148930154692707833167ca3
157 | 3115a3a0a61aacac59350d819542ec7
158 | 8cf41a94663c7fe24da5feafe6f1c8fc
159 | 1a4ff09890565843c59350d819542ec7
160 | f6d2550b82c208b012de5317fe5b354f
161 | 8415b7cd04f981d94692707833167ca3
162 | 839393d59ef6c8cfc59350d819542ec7
163 | c2ac91973d449b18738e43095496b061
164 | 3076e5d4a8078a0c59350d819542ec7
165 | 1ff28690a2ba31e4da5feafe6f1c8fc
166 | 8382308b895aa93286d53ab0fe94e911
167 | f939cc4fa30511963fe047712e43e185
168 | 2036aaa68d164c373fe047712e43e185
169 | 5f7e3d694d47fe6cde650492e45fb14f
170 | 56031b004d5306954da5feafe6f1c8fc
171 | 1e25501b8930873129a50a2b3c5e5b6
172 | 7aca460dbd4ef77712de5317fe5b354f
173 | 8dc8d2e0bdf870ec95d0ca3fdb30532a
174 | 30cf0cedd661880e86d53ab0fe94e911
175 | 21224eab2d099f5012de5317fe5b354f
176 | 15d3297d200f8979c59350d819542ec7
177 | 721bd0402e92e339c59350d819542ec7
178 | 70b15dbfed77ad2d4da5feafe6f1c8fc
179 | 9166a54bcb06b6c7c59350d819542ec7
180 | 779cda069c3b6338824662341ce2b233
181 | 98d963a9f353cd026b0f9e3b3feb2454
182 | 583c242abdc4c08e4da5feafe6f1c8fc
183 | 951377627e2fb20f86d53ab0fe94e911
184 | 147e9d3591cb190829a50a2b3c5e5b6
185 | 1fd36ae1d93b6f3fc59350d819542ec7
186 | c0d58499d2cecf07e1c245f9728d365
187 | 146c3a9cbe3d8f703fe047712e43e185
188 | 23aeb8fdc0d1ed4c4da5feafe6f1c8fc
189 | 6a49166d5852d23044221bef0fa3c36b
190 | bd55f9190cb5c9ea3fe047712e43e185
191 | 316bd800a04f14f0de650492e45fb14f
192 | 19492e2263ea82e4da5feafe6f1c8fc
193 | 20d00eeac9377d1212de5317fe5b354f
194 | 595999124367c701de650492e45fb14f
195 | 2b3f95e3a1ae1e3f824662341ce2b233
196 | 14864858c05f52ec4da5feafe6f1c8fc
197 | a247a4978888e6403fe047712e43e185
198 | 1566915c8a69d58812de5317fe5b354f
199 | 48b9fbf28fd33df5c59350d819542ec7
200 | b0f01584cbb37d2ff546596ce7364503
201 | 4068c751d46ca222de650492e45fb14f
202 | d0421fb0b59291df7eee615e75bc3b77
203 | a08aa6e386cd983c59350d819542ec7
204 | 3cfebf4fdfa1384da5feafe6f1c8fc
205 | 4e62d6e735b8bf2b90071898148dca0e
206 | 68aa1ed740374787de650492e45fb14f
207 | 3c28e4a1a5154ecc59350d819542ec7
208 | c817934380830ccb4da5feafe6f1c8fc
209 | 12b0773858754105c59350d819542ec7
210 | cc843a4c31c60dec64cb4ed80bd76aed
211 | 6fcae7f06d9f86b2ce5d6e9371bb5c33
212 | 74c058f9f24fbb524692707833167ca3
213 | de23f702d6e8232f12de5317fe5b354f
214 | 114b810af4a847ca99dd23ec22c4943b
215 | 7eca681f6174f1ce12de5317fe5b354f
216 | 720ee748eb25f010c59350d819542ec7
217 | 7d9b7a4412d9f373c59350d819542ec7
218 | c8631f63ec5899a4a84a884e8267301c
219 | 57dc5950f0a7304d4da5feafe6f1c8fc
220 | 1a4d4980bbe2dcf24da5feafe6f1c8fc
221 | b592fe51cdda66394692707833167ca3
222 | 4c94892ca2cd066e29a50a2b3c5e5b6
223 | 4db0db06f86fe48f4da5feafe6f1c8fc
224 | 403661cbfc8deb029a50a2b3c5e5b6
225 | 9b34b5983bd64409e08dea88cca8641e
226 | 1e694a1848b810ebc59350d819542ec7
227 | 2cd6ee7e592939a9824662341ce2b233
228 | 297684bcd05347cd86d53ab0fe94e911
229 | e619cf6aa221424cf80ff10f4838c137
230 | c4d17b681e7f3d8a1e1f137e13140387
231 | 14a093126f5764bcf2792e4b1535c6c3
232 | 8f39d603e733eb58fcbe4e14ff0c4707
233 | 5523a90c230a1d0699bf8547ee35d38a
234 | 643191e8ee56104e424f8f8e828c9ab9
235 | 9dfac0132596ff09b13b0af4c7a59aa0
236 | 11b8fd945de0ee99642f6fb37a230b5e
237 | 6543e0c78675e6eb868fb986bc092533
238 | 181cfc93cd44af805a0e5699b3040a35
239 | d7762b2997bb9e2aa70a592d6c8c9234
240 | 809d5384f84d55273a11565e5be9cf53
241 | 79a8b5fdd40e1b1d20768660cf080d12
242 | 5366e82cfca7382729f1ce9399524695
243 | a5d193fd45690070b93ba26740e73067
244 | fc3bb2eda6e061e9b50d0c6a0c254040
245 | 875437f9f2bfdc3feadc9f074ecd1df1
246 | ebc49b9b624dfb55f9913e822d5318
247 | eea67da61b5477c7d4c6910fb477cd67
248 | 422975f531854eeaf36ea1eb6542fe7e
249 | b28d1c49cfe93a3f79368d1198f406e7
250 | 3bc232700d2ed20b89a68decc32d3e34
251 | dd6ebb99b2346757da8c66dd9a203cf0
252 | eb2843ff62280f5320768660cf080d12
253 | 5ff47fe4724d0c9320768660cf080d12
254 | 84a374fd72bab291ccff75c3d7aff973
255 | 895de6b9d3e0f1ad11b65536c08c170d
256 | bd7cae3c39773a4ed0a0c43e4971be14
257 | 3e080e2b2556add4eabad247a05ad956
258 | c6e91d50e1bb3351a8851b4eb6161973
259 | 9b33a5363695ebc3391e4d6c585a697a
260 | 3b5d7b7fb89b178d50711e66b0db6ed
261 | df0f03ac21921f02c868162258053ece
262 | 1055dc4f3f2079f7e6c5cd45aa112726
263 | 353dd8c418146de16c7d1f675f2a04a5
264 | b06b351b939e279bc5ff6d1af2135fc9
265 | 5e61fc6946ed74c3532e8683617554c4
266 | c18a4772bcfbb98e85bc264270ae0601
267 | 50c7e5dace1d5dffc6256085755e32ef
268 | 906d1dc1a8e519868cb5d9909aeb1309
269 | fe8c34a5275804d451f8aaa850306632
270 | ab072b1506cbfd921b7554913e3d38e6
271 | 2544d05396cf1c91bc19762eaa7ba40f
272 | 95ca7e79cf9b51cbb9a0f5d18f1ce54c
273 | 544fbd4d4c1d445498a4820926b2a786
274 | c89a5482bb756c041d86c17c15247b0
275 | f0ebc33311b55d6b4e7d60def15dcb8b
276 | fe5f6a2aab0091438860c69ebde1e4b8
277 | 727a4dbadbb74c33bf1b16662b6673df
278 | eaf341c056c79bec1a2c782fdbf60db6
279 | aa0280a7d959a18930bbd4cddd04c77b
280 | 6e6801ca4a03a1adc672720c52b0e374
281 | f07668a627a039b87b79156a61ad4c01
282 | 46bb63196198ffa2fc98aa4b97627df6
283 | 6336b5516cc8bd50635469b95109803c
284 | 367044e655cdce1f109be8beeb87a681
285 | a631a1a99b21cd92b87eaf81a9afbbe
286 | 5382680280ef5b57d0b36851d61b6fca
287 | e72235ca5b0f9b5de485c93908cf58c1
288 | 4b2e20535d3ecd016b7154919b02cbec
289 | 6bf0f5e06cb748bb9671c58246946ed6
290 | 91ac5c074c7d137762646c8cd54d58b4
291 | dca4c8bdab8bdfe739e1d6694e046e01
292 | a3a6f9e80956ec6f4035f93ab9531db
293 | 8f7a277ae05da76c1bb088904f7cb154
294 | 9f17f45a28d063e7391e4d6c585a697a
295 | 39b51f3a6e8447c3c8a1a154de62786
296 | 4e217d2ef816a08251c4deb11af7079e
297 | 641e64902bb9f6a4aaca4b071fcc002c
298 | a7e9a54cfae053aa20768660cf080d12
299 | e18f47b52ff3aa2452174f43a416bc6f
300 | b12fd3c4e5912a7dd8b510632cc84b8c
301 | 92a1e771eb621c14c2a5a06bb7a05e87
302 | 9eada38b3a65963e30bbd4cddd04c77b
303 | ad86354fb5faf1c98a4820926b2a786
304 | 1f0b5514d93f39ebd189eb81471216ad
305 | 3931068c10d0a606ef37b256c10c21e4
306 | 9fbb34244e00b2a9eacb155f400b9076
307 | 3b3a1bfd87c87a184b499a9d711de5a7
308 | e0393e80702d9a698cbb8bac2032149c
309 | 10c484963692d3c87d40405e5ee68b4f
310 | e5bd1675d43422bb61706e18472540d6
311 | e0f6e225c7f88db19ea59510032cbc74
312 | 38def13ea098f098fb266533561ee98a
313 | a49eec529b5c44eaac00fd1150223027
314 | 941289c22ad19099a87002a4eeaf610
315 | 634fe05a380adac585430ccbd2632877
316 |
--------------------------------------------------------------------------------
/data/filelists/03211117_test.lst:
--------------------------------------------------------------------------------
1 | b9cc669597085c028766390809048ebc
2 | 534d3c5dca2d44641af9a5a7008cc3ec
3 | d32688a505930c96e2c8e43c97ec5a85
4 | d10dcdae2d7645ebcfe78be5b7b99c8d
5 | a4dd6c69ac130db6795284068bb430b2
6 | a71826a92bedd8e1f3c3e7bb31acc31a
7 | ffc9068c8de1fe46d9869786ff7f6a46
8 | a87214036fbca69e84a172a28c2dc
9 | e5b50925213ade6a340d4ac30c6d322a
10 | 63d4e03c4effa06d6845a0762dd07baf
11 | dd8cebcb4d0564059352b002a7d38daa
12 | b05a54988fb28d20d0b341c1c5648015
13 | 2c4f9415edb358adb71a0e5ffd778fe
14 | 195d9d0305fd1625679efbdc830f6d0e
15 | f8c22e6011567f655dee408cc1ce3ebd
16 | f2b3efb28b5f5d56fb4038701c4e8e29
17 | 8440ff1637f2c6d7ebe17c8dfb911d2c
18 | 3529cd0cb733596bc22a9d71e5721aa6
19 | 459ea1db4ad52f3d7b7c888d3626712b
20 | f124d85da3ef5ee5fb51920a0179fa71
21 | 3ee0923254671a1ef2bc9da1ba799c60
22 | 676e65417cd3d59f3aabc01aa1c5608b
23 | aa99cc4323af7144e7321f25048c6142
24 | 31ea284fd46d2d6013d823b13369c182
25 | e6304d3bec856684d9c9f98900faca52
26 | f3004c5b38bbc0e445804144dab4dd66
27 | 887fdc9a9940ea57bd59d5b2d356dfd7
28 | 1c47397db49047b9d35d1c787a8f626e
29 | 415b39d4f60a36d742274cb89cb6c841
30 | ec190042ef2f7aaef925cd3fbd303c2c
31 | b569ba9d9d74e7d5184dd44a99578080
32 | 58837198e067db4cde008fce66fdc56a
33 | 15e7231a97ccf7953aeb14563b37e04a
34 | b47b05891c5161189722ef9ae1c74e1
35 | 5305858e5ce441d65fabfc69ee61b28b
36 | 3cb53b32b97c0a04c04cf0f68103eaea
37 | 1ec7d9fe07b94f6e274d4393e80e99fa
38 | 9740d1752c70a41350577cf04f3bf74a
39 | 441c5d2f78e1100558ecbb7ebe658148
40 | e70f6a81158cfb213a762233fffc49ea
41 | 8a87846412b40900ab610b0c94236463
42 | e51c13070dcd4ce25432e3a73fd1f7a9
43 | ab2f9418c111cc6ddb965514105122a4
44 | 87d4b97120598dc54e6185a07ec22996
45 | ac81f325fbc993d3eb42617d0a1c53b
46 | 30fc571d408b84cd6315023d0bef39b6
47 | dec6a8c1c01e148d20685b5a7e34b501
48 | 73669f92851d3b28eb34db531a289b8e
49 | d3193b07bd166c0611e348ae03a757ef
50 | f675d7c91d540e6bb45df535caecae62
51 | 5880abd2815da0492fc6a8cbc82a5bb1
52 | 60bde4ebc37f9b31473f10e6caaeca56
53 | daae6d7f0e8d7e208a8be3c02effecce
54 | 3017481ad6a978393eb1d3da560687e9
55 | a9432163d01a99f1d38b9064784c4b38
56 | 4440935e5e566502250bf58700b4d8f
57 | 89f3262d8e06acfdeb0ce5843fe6b264
58 | 3d4079a37c8fb40e808951ff5fb582ac
59 | f5f5e872bf70f59983f551e0fd7d32ac
60 | 9972709345d24fd31ee6305032661052
61 | 6a743f7ae8deade97e0bbc356ce23758
62 | 35003dc3d74527729a1d432cc80562d9
63 | eab36391bd7fb745585e5281d7025178
64 | cc499148f0e031054b8def6cb3b321af
65 | d3f9fc10276d8922f7248d9dbed7a7b8
66 | a9a2ec15d1223290916cd984b3abbf4d
67 | 8c4cb4ea7cbd0ff5ad3833a4ccccd8ee
68 | 80976fe087ec183f3de42699b619b796
69 | 42fe49800a1e65d18a6b1cf8170af1b3
70 | d59cbf752abeeb17f1a5dd559b550d68
71 | 8a4cbeb489904fe3083b551ec2a5aa3
72 | f4097db6ad343f90d551435517f7f18d
73 | 3cbe9bb95e5004eb342398ca9dc32672
74 | d0959256c79f60872a9c9a7e9520eea
75 | 95df08344f4737e078785e24320d5ee9
76 | df81df82811b2b2fe2d8a7cb76d59615
77 | 59580147939bcb7e8b296db8a8f00728
78 | fc314f1e3325a47af287ec53a469521
79 | 76d351e5df26f91fb895bc5ff828fca
80 | 286a7629b62426b5427c20e7fc0367ac
81 | 52a7f3e36d09848ca63c1bd05197cc
82 | 66a50da0551d36c9f13ece01395d269b
83 | dfbce5e6cca00c1448627a76b6268107
84 | 8ce9fa1075039c8c63f4b01b3d592bed
85 | 2979d8814a450f884b8894e5e467986b
86 | 6e4c06e5dc03291bec77bb7db6eae005
87 | a56c13025ec97af31ac04cb85e251041
88 | 184a3f58220427c39fd28cfa9e6e405f
89 | 9db1c375f76c8ac1db01c957364e77d0
90 | 9716c06d43de24387103ae93fdb3bd5f
91 | 233a7970efc2594b26735a5c7bb362c0
92 | 6a1e4ab7debcb3f429426a0f57e4d15e
93 | 9ff60c2ab8d5a15abad8372756ee3232
94 | 73c5898bf63748ff110eeb6ed2bcbbc
95 | 5ebad73554fd866830bcd442adebae0f
96 | 2971f417b08961475a4cd9b26f359d36
97 | 56dee4eb44b2f0e64a6b6d001599a1e5
98 | 40c53f54e7fb0e3ff4c409c17e0a5165
99 | 24f34f582f9072eedc3e7f8ad872247f
100 | 2967a5504d5aef38bb3914fb474ebce4
101 | 74a99b32b562fcea7fa29a3ea424473
102 | 48b8290cb0dc0a6cc785f06f424b9d06
103 | 34d998b1845880795b1895ac674412c5
104 | 48c17189e6c58d619f4c3c326d704746
105 | d85f501bf76933c609d7d8d27dbba7f
106 | e46e45f94470b45ad1924b802935a37a
107 | af2f3c9c8fe90380c75516c7217fb218
108 | 3c7ff78e8036b217d3923426933f698d
109 | 58fceeffe91b7b1c20685b5a7e34b501
110 | e7b9c172059d23a6f12f3a2695789ca4
111 | e5dd90d78168e53741e88434245c899
112 | cf16012ae10b993bd15e5f70c1308761
113 | 2bbf7f77d43b74338a331b18e58c6914
114 | 77f4c991478ad1c26cd5a1d5c8bb85b9
115 | ebc62d2dac989b7d8b71a158ed504795
116 | d1b3804c23311181f361255e85d5896f
117 | d911b390503a11f96436916a86a90ed7
118 | 4f46683ad627700edb09a997c699dabd
119 | 6e3fafd33a4683d1fb0a4dd466ef3d66
120 | 722df1da5778d45b1e43523279c7f09f
121 | 1a92363c2a155ed3c397356311cbeea4
122 | 6f9ee2b839d3a03683fb187ab7c1f026
123 | 600bb2a17b238a927f7954f9ba534b6d
124 | 2fc578c8daf35023ef641b9022b66b97
125 | e5e5018fe96e414528d0f4c81cc1f1d8
126 | aba93b2b9b45a30dab0b172d4dea80cd
127 | 9d51ab35cca6288da8b55d3e40d96c08
128 | e09670b2d890f63d84e349450a5c51b2
129 | c62af9a75f8779b82b8499d50978754f
130 | be89d32290b9dd4aba27b59766aaedd9
131 | 96c87c372083e06e9ce9562d3c10079
132 | f2f41913123a7a7e4b87db09ac4cfa73
133 | 2e5b9f616a0805dc3704a45f4027ebcb
134 | a6ce00ec813199804e2b01a3e0fd3197
135 | 4736b46f6cb97d091e02c9947dc6e279
136 | 1d9f55b1651c5190a3f4a96ccd277d49
137 | 64fe6e4480939c5e9b485b25e7417c6f
138 | ea4b90cca359e2d38b9be827bf6fc77
139 | dfe2e7c66b4063f79a6b496c6e9f4c2
140 | 198eebeca7243399ca5ca7089655f058
141 | 4f598d41b30b28e84158c4db508f74e8
142 | 92e757e989dab6225ad009ac944c169e
143 | be2f04d1204c86d4db70fa8937c64733
144 | 74e3d29a7e0d5bc48ce0f31e09d08e16
145 | 76d87469c1fa3638577ed6878ebb1511
146 | f7effbc133537f0aa5d0c95600bf54cb
147 | fbec33bb92e066ade1f2a1daf140ac9f
148 | 44f363137d006f3cf7fe2bde3ab894f
149 | afcacbd7078a3b4b70bb6bcb670ecdf5
150 | bba0cad6dbbef2589fb287620a60b403
151 | 2f07cae4c7809f0bcf5a37a70014c623
152 | 1dd8b03b590dc0ff9470c43f253f33ee
153 | 62188618e7d0b2f23dabafedd9562ca6
154 | 6f7bbbc83183a93daafac0c8d5992bd
155 | a52e505fb03e2d8568292529fb38e524
156 | 4116b08cd0e4e19ff799a4672edb216b
157 | a8e109c66a0fcce7a87d866b539e4b68
158 | 85240d0fdd8bc669ccf3727bc3da6c48
159 | e6bedde4571506491fde762a4c6848dd
160 | bca2b66a9ef701bf585db0bff5175f74
161 | 68206e7d85afe3619d8d0b45bd2b5b8d
162 | 15896858de30017d8e75bb5638d14ce9
163 | 14add565ff90153855f9913e822d5318
164 | a990477e9c1bcaf4a70518e25ed617a7
165 | 6afc906811e9b40421d7ca6ede0e9373
166 | 5530382ad4ea8b364abfe5850a7ebd07
167 | e912fab93eb63fef6b4897a481d7d16a
168 | 8a7712d5c8614b97974e278a62ec98f
169 | 1a5494c28b607f699263b5578aef09fa
170 | ddd82fb23a12e2eb2c8bd51dc6fc05b
171 | db4de4095a962680c951cf8670bfff6
172 | 600fd2598fd5761eb9099be21c212692
173 | f4877a34163978f84efc7e7114f1b9c5
174 | 7940b411f730cb767ba0766d8bbd9a5c
175 | fe75bacab7594206ab0b172d4dea80cd
176 | 877cadd597775369ec059109909662d2
177 | 49ad86b608403b8ce760531185a75b14
178 | dcd4d3d6bbbabdc6376c487287ae2b71
179 | 90d97637c01fd05e59122da3e1ccb92c
180 | 30e739ed4c65f67ab71158027becbea8
181 | 751f46191d0baf99f541411dc07303c
182 | f47044b611046a7bf901627f525bf7a
183 | d4bffa0adec5f9a73387ebdfbbe050db
184 | faf54bcb640753a28c6daa755196a36
185 | 97870c19256a95acf5f79806bd65844f
186 | fb92cb1fa04c2ba6bf1c304f780914c6
187 | 792002ca0c65b1dfaf7869e0a5920f2a
188 | 26c4051b7dfbccf4afaac116abdd44e
189 | c2b4ffa6f1911d4cd1ecbd6620e3fd17
190 | 538eebd970e4870546ed33fa3575cd87
191 | 4302bce2d7e6594cab610b0c94236463
192 | 3ad5eaabf85f4b5cc4d320644a1ff105
193 | cc7bac4f85cbd7d68a04632e06812aec
194 | a568d8aaf2b587a2f27bd2175000097
195 | b8386207364e622d5e7087f2d9a278a9
196 | f464a98b2d4f598be8581b38259c3721
197 | 34f6cff3e8fb6315fc2aaecaba21de51
198 | 9536f9fd4795dc2d70ef2132a4b991a
199 | 815060a9c109ff4659de6f0155fa4014
200 | 777a8a1c887779f47ac59aba6f9a1449
201 | ede70dc992195dc272e55f1aa85cc5f
202 | 32be865d1baf7eb9ca4aaad7dc0e3a16
203 | 70dacf62da510868a5ff93a193b16554
204 | b86af5698f9a04a4d0d1157c0bfa4669
205 | c906b5644fe468a2b61fb7ca6803b7a5
206 | 9c23caf872048374ec8285b7fd906069
207 | 3351a012745f53a7d423fd71113e0f1d
208 | 246f0b722dff7f16fb7ec8bd3f8b241d
209 | 88be1603c4e07fed6418651cc29befff
210 | e2787b2f0dd35fccf42a90fe4baf4591
211 | 4ee8d3a617b574ee30582dab79e5c58d
212 | d9b7d9a4f7560f6ffa007087bf0a09
213 | 2190a888d3f7ba6bd3ffd38a8449bde8
214 | 5a440522b7df4cdf318d408ca5b702a3
215 | 813b3e438a8fcb189d9f3b4d1ec94c69
216 | 3ca0f34c03ddd760234c2f2e8f2fe6da
217 | 61645237bf8de4df77525a753bdd4f00
218 | b11d7ae45f5a84de8641d137e7c33076
219 | 2d0138ffe3eb25b9e23244d89a2e66d6
220 |
--------------------------------------------------------------------------------
/data/filelists/03691459_test.lst:
--------------------------------------------------------------------------------
1 | 8c18ef2a9170a8144884161c20b458b0
2 | 7ba65164444ed5be3df08ed7d70af1ee
3 | 710014b815369e1c2bcea2cd4cc7b042
4 | 3e21834bd08c078963de47aaa413f122
5 | 767f4a63260c8419e279011f622f20b0
6 | bae089bd1855bcdcfa9922db9b6aab31
7 | 4b29063d6237b062eabe53d90550c4a6
8 | 2335c268bbd05a5f230584014222e685
9 | 2a6f78d39d66f6171bd445ab4c056b71
10 | 8b73786c112d262d4852385de47501f6
11 | 7e63f06b3c48fadfd6d49cce41472b6e
12 | b0f209faa41b8f0879da6431b0766445
13 | 2f4e9cc37c3bf5f1fdd84f4a160b8854
14 | 460d5cc9d09ec59eb34ed614d2670aca
15 | af7aded6c26d2b119d3f10ce46ef328c
16 | 1b31f250deb7e124fae32a4a57dfb78
17 | 3b3f46308f2ad119988b934ce1e16bb7
18 | 5f3436d8bb1620f4617146ea341ca085
19 | f6d4918c7dd190447f45370489ca3156
20 | 7578b2e27851b989a374ee921da07aaa
21 | 300d579cb4dea9338cbc76a30015552a
22 | 2034f891fe2d1e79bb51f8b36601764d
23 | f0d27525fa81798d982acd4b5c0a58b0
24 | aede81c0789358891ae45cdab702386a
25 | 8675e32f2e122ea5c13bcab6e4ecd7e4
26 | 17c472a6899c92efcf39ad4726172e1d
27 | ac951c58cd826af6a89585af9e32f3d7
28 | 35982cb980f6916c2633ff66beb9cf31
29 | 132257fddbebc02ff14235268cca03a3
30 | 1e82e94cf9f6bda8fe893ed5dfb6041d
31 | 1301670e3ddb72b099284d844aba7576
32 | 4793c0b78701e47dd529f6660fe10a17
33 | 33d9a210df86a437cb3c1170309e6b12
34 | 6be15f4f6dd64490d747b49524a1246e
35 | 85eb14c504232ad1bb36a678453013a7
36 | f0e562c21dfcaaa1d1936ff8c5fb2337
37 | 2aad0ff91e947e64baf402ca36cbac3b
38 | 57b8d08d37d835995d0dded52efeb4fd
39 | c462e3b75f570a3b42227a2ba4dff5ab
40 | 8dfa9921e51e0fa3f99860cd321d6c67
41 | 10e079ff34f99777bcb3fc1376c3a85d
42 | a1d1f232168607c81dd4da6e97c175c2
43 | 60575cff5db034c621e6f308016fab7
44 | 5da2a1ae6ec64155dc7dfac1f2c9f0d4
45 | cc88df1c3cfac12a99db62650613bd48
46 | 622a9789d1eaf6e3cf56355417e88d12
47 | 92039123d08d8ad6adbfb30d8d1b297e
48 | 4c43241d7b30eee379e6d136097a1329
49 | 76007907d4e0ae438c2ccb23eb70d81c
50 | 4383b2bbce729356a9c2f34ef56404ef
51 | 9a94af940a768aee5865ac92cffc2982
52 | 8c7c72599c6bbafc8323fc17a8352c3d
53 | 2c5dde3b43f0b0fc5afcf0aaed5d73d0
54 | 1445e30aa2d3212db6a78dbbcf2e408
55 | d7233f2190432638d747b49524a1246e
56 | 54e61267b88174967bc8772c5c1a0c19
57 | d14e6214d7dd4ed62d563c85edb49108
58 | 596f7a94c6d1443870896ebcdb67d8d7
59 | a6453864512f46dd747b49524a1246e
60 | 5c4964d7c42cf84bdd9ef3991bf7600e
61 | 84adc06696eea1774a2b8524bd5c98
62 | 3b01bd24d47245289159eab9ccaa73ce
63 | e1be0b02973011aa4c5341ee07f41676
64 | fa2cf860e277919a7445d25f394949d0
65 | ff9c1754252b9ebf73c7253ec9acd58b
66 | 2f7b5ea50c09d928b23f3e90fedcfa3
67 | 2325005b09d12b2585d624cfcd9a37a7
68 | 2240cfeefea8b69fb90623b288d5691f
69 | 496aea93dd8f7af1f3f18c4c348425c1
70 | 9b4d3ead5066a6c5844e9c5caa6d29c6
71 | 2daca96a8e202949c67b8955be358784
72 | fd11b075bb1df4b01f1c09aefb59ebea
73 | d09f0e2e33452a739d3f10ce46ef328c
74 | 716d1d38cc0bcdc8c9d5b08933b9e0c1
75 | 400fb89ed6cc3d2bf1acfa9a5200e941
76 | af39a67dea9ff78bf46f716b2b22b550
77 | 1742419bf5a54be3e1a894502fdbf97b
78 | 4d276aacd5e4c510de7da340cde8d034
79 | c8018ed73c5f4087eb927391bdd6c8e8
80 | 6ab218aba38bdada2268dda5c324173f
81 | cfdd69078d7752298b54295fac36ff1b
82 | fff40d102ca88fdb52648dc23b25b1d
83 | 5e6d30de53afebe2fb0a4dd466ef3d66
84 | fe977bebc78501995996c3a82deb78d6
85 | 86f45d4bb1f5f8597a040c8bcae232df
86 | 8629dacee484080c7ad11885dccb6f43
87 | 5584bebdc80ecb42c9d5b08933b9e0c1
88 | cf0da3cd69392999da2140846c49e200
89 | bb570a28a0e81a51d747b49524a1246e
90 | 93c5159d17de18f02899849b3f61c3c5
91 | 3636ebcd2e5568616bb15da9e307a14
92 | 6341662056860c3e225f3f0d46b4fca3
93 | 6ef86253eb81e4d418200338a176d705
94 | 48bf5d4693bb7ecfb4bf1edf2dd92af
95 | f6954ca2e4c2b03c67b2ae8c967fcba0
96 | 7a7193771ada6796a1b0d9ebe362f8f3
97 | ef71576ad5262c4ef398d0c5832df00e
98 | b859938280d0c7346583871b5c274818
99 | 913eb13149ceb59a75a3010d3ada28ba
100 | 68393fdf9730d1c86e95461e6c2993ce
101 | 4c5b7420078b23b098935bd14e27f0a5
102 | ea95cdbe8f4114107354c46aadb2b2fd
103 | 1334b56706bddaf4451f278fffaaebae
104 | d6f0a0ca6446eab0c0b5947ffe18a468
105 | 95c24657d2ac0469a3cd3bc808c81de5
106 | 54fadd7a6c5c04d752560296120d4cb
107 | b93169c2360aa02ea14443313213c384
108 | 1788d15f49a57570a0402637f097180
109 | 8df018bf733ff01cf00aae52edb0b7b
110 | b7285ba6fc6628a1a43ada367b02a4fb
111 | 42fe49780429d25d1de55fee5ac2c5c2
112 | 81b711a75b8781956faee4308b49b522
113 | 405db2cef5b41756fa16d3c3138134ae
114 | ed981b60651d5ad8265d1076b4b6c5c
115 | ecd9a96ebfd0caf6d8f9dd7647048a0c
116 | 8aea25f1090e419c9f78b1e1185445c4
117 | 3c467fca7449a857a2b4d33761839e86
118 | f37f4ef72fd0204d839a84b4ae4862d3
119 | 39ade62ad13e3c79206861ce7df4037f
120 | 90120bf8e84315de6873d49607c1f87
121 | 3cbeb01fae7fb6ec7238b5c2712646b7
122 | a288498f21acdedb2a65278501cfbe7
123 | 19a8736130ef822b93dcf5e22ecc3f5e
124 | 10d03876d94ec5f4e7670ea63e6cabfd
125 | c2024c0fa0906fc724abfaa350249967
126 | c3733b26c3fa23ce2633ff66beb9cf31
127 | 374df728f54322363b0edb55efd49670
128 | 7b7904e3d5ac33a65afb688fc9d0c0
129 | 945805d18c0de73ae3e30e20ce3a5bf5
130 | 71b4fb2d151a9d70fb0a4dd466ef3d66
131 | 6d28e2683df5f013c9d5b08933b9e0c1
132 | 60d58e77382f081a69d22ff82177f51b
133 | d233b0a03f171cef47e72126a394af4d
134 | 6592d33f84263ef435cd53a06b1d2317
135 | 16ea8ecabd3f373bdef52d9b75805a83
136 | 85e8d20d51ce13cc7fbc060fd555478
137 | 64aed24bbb7542c6afac285245c66df0
138 | 84cabb92bca7c3fdf2198539cbd3b69c
139 | 451f3d4fd10530b9d5a56ecdb5a1cd39
140 | 7263b5bed1c020d3fd8284eaee3b0fd
141 | fd421313164e2d7f1be6fffd725195b9
142 | 164bf28ed57e29a6293982b5acb5446c
143 | ac27fec4b0460b00318a4feb4ab5fd2b
144 | fb60dd3c36439d836d74ed7e4da4b6ec
145 | 6450e70e275a80e0e39b302b17f4c82d
146 | 1124d162420a75232633ff66beb9cf31
147 | 91f570ca6702fe4abd1cba733b111584
148 | fae47d104b9111aafd949ebbd292d47
149 | 1152c16d1081c32a561e8b31a1141890
150 | 7599541dac4a89ada1efd4f01acbedc
151 | a8f3e98220f34623b3d8c1107f6ae528
152 | c2bf199ce5a022a1126d510cb8dd3d9e
153 | 7e359607ecf460f399372ee1e6dff278
154 | 48c21ec6f9623c997ededbc2b9b4362a
155 | 440745e23b80c41f398d0c5832df00e
156 | 2a59accd6ff9b5265c38e15d823f1476
157 | fa09acded526a0105b1433436fd82800
158 | 7d2bd4d349ae34a2fcefa74f1d0bc6e6
159 | f289aadb7cdf59daa62fb160d742c45
160 | 9a017f96829a34a2b17f090763e2921e
161 | cb356bbfb74abea2c6573f6ede3fd543
162 | 560a626f93c664ff9069c2d361390698
163 | 99dce9c359b0bf4afb33d0031815b3e6
164 | 2b3e7da84b849a84d3dbdb797d2f78b5
165 | 40b492e1a0fb0860e2f05bd11e1d1c68
166 | 9076b1b9e23c7446d747b49524a1246e
167 | 3adf396785cf9dee7bbfac568080cdbc
168 | 60765697073cc44cec7e019402cb7bad
169 | bdfa20e11d204ecd35cd53a06b1d2317
170 | a3f14846404245d5bbbcb091dd094e5f
171 | 10d16ee9c9402e6df2e5d34c7b677bc4
172 | 21612bf3e866a8831d6b14cb827cdf85
173 | 3972d44065257859c0b45c582c6ed736
174 | ae4bcb4baca763c24521562865ab775e
175 | 2ab4f9bbdc17d9cd618e9d35559b7aa
176 | 970ada2dffb5ce49a663d9823c133130
177 | b04281aa2c134623cb3c1170309e6b12
178 | aed74c2fb80bf363f5776cc601097c0a
179 | 95db5c34357e2a81bbb94390080b5b78
180 | 15e847b20d22d56cd288bc0586930768
181 | 4e3669ef40de1b3b465b32805167c435
182 | 66baf7b7b4ce43d7e50f6aaad9a07bc
183 | b70c600b20614f4c690135fb845b8de1
184 | fb86950be1b0ced7760a6b24be218cf3
185 | b40b4cbf6309c3519fa340262d231abd
186 | 1ba39460a5e31c722a813544190dbe4a
187 | 8b7afc9b056307f3d3ba59ac5475adf4
188 | ca052c8db0c94fd345189af3887d3c51
189 | 5ea3d1068a624c1da91bbba4742a1643
190 | 72c5cab12c0ddb22a0fd8d18f37cdbfc
191 | f452418d7be7e78eeb752889d5199f9f
192 | 923b7f0a4bf93c4fb66814b45dc64bc9
193 | 3187862d922b0ce96583871b5c274818
194 | acbda0d16acd03329d4b859036b8707c
195 | a34c80e1f6175711c9d5b08933b9e0c1
196 | b521957294cbb170c7c1bdfb41b9d2d
197 | 2a8345bd5d50456d8db1a0ee98c45ee7
198 | c1ad8720fcc7246a1fb294203c64a4b3
199 | 2ae8239afdabc2baaf365ec12406f363
200 | 8bd1d73922ebc098627a66821130f814
201 | 8a3edcc398f34fe534b2581df0f941a1
202 | 3fc0513ac3bf11c873d25f4e2e3775f1
203 | 3a4950ac89429ff5b396c6d231dec74d
204 | 17c5950c89528703225f3f0d46b4fca3
205 | ffd168e54f722339ef94793a67b4c5c0
206 | dd3f884d9b5b3c0de7b7e97e5332a9cf
207 | a6216e99923da6988947789ccf4faf06
208 | afcd98e6a91b3d16569e2e0d2caa039
209 | da9c218b79205d489c4dd878242c44b7
210 | dcf84867f92cef75a9c2f34ef56404ef
211 | 28b91f5ca7e3d174fb0a4dd466ef3d66
212 | 6fcb50de7df5381835cd53a06b1d2317
213 | bb1b387c674fdc4750577cf04f3bf74a
214 | e750bda061e86402cf39ad4726172e1d
215 | 7fc23785c19991e4e180a1a604561d3b
216 | 64ba67a67d83811c2b688d771932c023
217 | 9fbb43c7437c1bb8a2ec0446d32ce69
218 | ff4bc6c329ec7bf8a0eebc16d3afb516
219 | fbb7610643dae4a34c5341ee07f41676
220 | 800a0a91308845b4519f3f3e6cd6d1a6
221 | aed97e60cd2802ce7ffb47acd56f396b
222 | 26363bb293e6c9e499db62650613bd48
223 | f000edc1cfdeda11bee0494534c13f8c
224 | fb4c855848345ecd3e738e11bd8803f8
225 | 37758713e7a31d1710b84d6f34c2f2e1
226 | afe96f3cf256cbac81a6b6721af23c58
227 | 5336a4698616726725a4212543dabaf9
228 | 8d55d634810b52f176f6deb1c78dfee8
229 | 40511e6769c91cbcd3dbdb797d2f78b5
230 | 105d0802d1ee0430bba5c9b6de65a038
231 | 79c3e029d9ffbccbe58eb6a4fe5a2344
232 | e71f2c0e0c760ae98139dd63d55edc44
233 | f663176a43096b35a43ada367b02a4fb
234 | 1c25b626dddfc36a28d267d044b54402
235 | 548f94cd0c5fba501148996e35417db6
236 | a82329a937432afe8d28f674ed08c521
237 | 542bc1ef866548c3d24fc75b2f944a91
238 | 80109bf3b6904d577edd21390c628646
239 | 431892f5456a2b9ab96497d8dce09d96
240 | b7a6e59fe546d81cdb2e05daba43d6f
241 | 5dd29010575d36ea73e1b2d018c0512
242 | f2e521a8d08e2a2f20363e2561dd589a
243 | be83d48fc695dca62b4e8a84a498fb09
244 | be5e0dbd5a8a589ca04f967bd94443cb
245 | 92e409aa16d2d673b5203226c26c59ad
246 | 4a1ffed169f04f5fd084cd4069686980
247 | 75c408e3ce113c84d084cd4069686980
248 | 96d6d519784e40c0c066b9622c005c53
249 | 984d064e7e0310f54cb67f35c09e50ad
250 | 84e6e1fb56eb60e918d385624fdfc6d0
251 | a2dc5748b523db72bbbcb091dd094e5f
252 | 46bd2ce6ca3439c9c2687184da14e3dc
253 | f9a615ecebfe7ae1b27175774c9e33e9
254 | 8d7d7dbf8f0c0f7673e1b2d018c0512
255 | b754df4013a71f6873e1b2d018c0512
256 | b2af20dc171d40e4d4e62d99c536bbaf
257 | 2d1302ed4d4f43ca73e1b2d018c0512
258 | d087ad474122e24d887e8faf8f33b0c5
259 | 5578446e4a13451a6c7c9dba2abc9f8b
260 | 94abce2eb2c9567da7729f9969cb563e
261 | 27046cee7ae745e6d207241113bee327
262 | c75c5ae81c1fd498c066b9622c005c53
263 | 57412ca31eeb15bf75fa5879e0c49e00
264 | bc11fa1bae19a90ad74a70b98d3225c0
265 | 217733447f1ec818c066b9622c005c53
266 | d06efc46aa999fa21574d21c0c95092f
267 | b209054be0f71cfdf398d0c5832df00e
268 | 115115104976edfdc066b9622c005c53
269 | e41aab211af3f84673e1b2d018c0512
270 | 2d53b9798c7ffe7a6e55c6c7c80df9dd
271 | 485a778cb7416a59e810658c16fad24a
272 | 83dea2f2561fc2fbe9364d19fabb5f00
273 | ec0a8e2fa00a746dfe74514a9fcabaf8
274 | 1ca17d2cadd47286c066b9622c005c53
275 | f7a45911d01fe4a961775b840d882da9
276 | b0feef9f599d41cbb3d8c1107f6ae528
277 | d2426b884d1108e8bdc8d5970acdf989
278 | 39554167163a7cc3f881bbcfcc456ec
279 | ed06c596dd9b9cf3dc99793862c889e0
280 | 68bbfac3232f153c6ecea800f06e81d
281 | cfc38353ff8392e73a7dda43d8d95517
282 | a31ac0bd8915d99631c992914b89bc52
283 | 65dfccb2d5e47538a24143eec482cd09
284 | c51823c76ebc7f6e464e6423c0222f3b
285 | c398c35b48c31188c73a379f25dda815
286 | ebe84e8ccc8b5f3fa817854e3b5b5439
287 | 1ac22719af776fcea2626afcc786d93
288 | e2c1e8958295f84459fca7a6b28640d3
289 | d3a872834cd0aa94d77ea5e1afa5bfe6
290 | c15fdc911c54f4cb62c440075d5ed193
291 | 1bf06b16e59e482c238ad1274d829e68
292 | 73c40350f07efb92d207241113bee327
293 | b3f5d033d3fed8e9d207241113bee327
294 | e47b83b94a1956ad7a16fcc398700938
295 | 8e25a8e0de9ff545bf1411bc6f3b308
296 | b4d4338a36711ccdb113389b677f57ff
297 | 4f152b01f056d0c35363d5176df02e54
298 | eadad629c581c28c6b424c689f1d711a
299 | 95d01543b46b5e43f398d0c5832df00e
300 | b1fa05d508d9ed81753a010738a20397
301 | 88ae9338c167e8d5238ad1274d829e68
302 | 90e3a0488b8ff079d207241113bee327
303 | 108316842b17210394a42262667addbc
304 | 29c140fb4eba078c7909eb62c64c0070
305 | e2dc092a4ef62c09d207241113bee327
306 | 64ebe165fa668ad4abbfc2108a5a7885
307 | 4468a5e60a6fedc086bb0379a61a0978
308 | 52e827d2f969a2b61f2b6130e0fe93a6
309 | 3ee30326a3bdf219ec2ca8479368108a
310 | 6e6b4d2603930dfd4fc88114be3a6b6f
311 | d17192339d28af3234140f5d5f70bb2c
312 | 38007ed3e5ce40ab13dd6eafe1477be1
313 | 123f9066606d80206454c2aa07613033
314 | a4ffce648faf8349e651a075b3dd0597
315 | 1c5c9d780dffb5c2599d9c8430d600ff
316 | d69d5cf7868651effd28950562697757
317 | 221a981adf503875e17b9e33c097dbff
318 | 4e06e2b59a83bb6229cd1f0bcc30f82c
319 | cd451b74570bd84f44dc88afcdcd380
320 | cf7a2cb0c487f3a0bd1cba733b111584
321 |
--------------------------------------------------------------------------------
/data/filelists/04401088_test.lst:
--------------------------------------------------------------------------------
1 | 45301b15dce2724e483a0f6665d9ffe0
2 | c4b66fac952d4ef7d9039fb3a1715e96
3 | eaf85cce060622c88de42b14089e0e7c
4 | acda976ba347a3e58ba35fc6cd3da287
5 | f48acd0450cf96cde6b9b562e2cde99e
6 | 8e9c97d54060d1282085d549612807d7
7 | 7ba45cacce4b4c09c7a217851f86faa1
8 | b984d7e958fe9eb961179e7ef17bf7b5
9 | e006061cc51617b9498dffe5de12eacd
10 | 2a38116473099355498dffe5de12eacd
11 | 3bd6626a05b4f79bcf17364e7927abd
12 | 96f4e3797b8e66042b8a15395c060463
13 | 295d6f0caa702a1a2f58405e4baaa2ed
14 | ab2cdd82bc69255f1fc489fbdec3fa1
15 | 9b91faa0835a0287db45a112fe2d5592
16 | 5891622298f30916f31b75c4a94a8879
17 | b801c4ebbc1149b34961b0d325e91640
18 | d56bca3888d3a595e93f5e23021ef900
19 | fca7558e383a8200a1a64f95774cf79d
20 | e3291bf83de108ad98b4ae7d0ad0f9
21 | 9c5952804e0b2ba3e1fb8c5792a5768b
22 | 67743ab1b28ab5cab3fcf86503541b68
23 | c960421b8c637137fb4952f06d5e75bd
24 | 57aa54c9db88e364502122ac3599bb74
25 | 800ef55c1401c26ef5d4e1af18c85258
26 | 743b747a119307e8e3785a46a5c831bd
27 | 79f11cd09522565fecb1ea9fbacd5278
28 | 57daa58dd0715c58beafa80aadbc3232
29 | 2ef0e93ce68dfa74bd1f358005ee8ea2
30 | b575152bd96a4dc4adf82b2748b1cb62
31 | 80d73417fa12508d7d6b888b4eb1ac9f
32 | b490aed1d7d9a42ec4e2c9b051d6a014
33 | ab5fc5879ace7418bdec90548bc24588
34 | 6f725c21e92ae3e8dfac5fb05629bdfd
35 | b7741503cf1fe40378bfad8b5ed8c4ef
36 | dafeda191170938ad33f96248c28a3a9
37 | 87b696d3942f6845fe75c83a5776ab77
38 | e11ff7bea65e8545c3f912172873d52f
39 | 2fe4f1ea84cf924ea4d4dcdfc6fd3059
40 | 4f2b1a13f06a85961138452c33de4a3d
41 | ba9f7bd05d6f028fc1a1659eb4f57afc
42 | f1f794c3b6ed8951d07b37cd4d789f4d
43 | 8b291d445d412c09cc018c0e073a98f6
44 | 10b3b46298af96d40e7407386eaee0f
45 | 68082af238b7973aa4d4dcdfc6fd3059
46 | 1f4e56064de606093e746e5f1700ce1a
47 | 96700b47eb9bf33889a1b8cd5b44ae5e
48 | ab47334a425e1650bbef66962a25aa5f
49 | c771a9b2dc439adac38a7eff5af707a2
50 | e85bac837e951f3780ed245d94a6a268
51 | f928f74ed34e46c4b5ce02cb8ffbdc86
52 | d62ebc23fe1a7e6a985b19765176f4ab
53 | 19bb5e75692793fd45df661aef5d0a33
54 | 57056c8f465dd1aec03bc4569d70377c
55 | 6693fcd81ce5a4e6f5d789e33b735c9e
56 | 73ab63e7ac7a404b545fb5ece69fbf4e
57 | b4c1d8191707ead52e10692b3b33e38
58 | 6c53f579c7a8da15c7ef7dadd1baff8
59 | 60193289e8d9689b62f6b877265e2679
60 | e97033321b1930ed4391592096b033ae
61 | 424d356bbbdb38daab0fba1d15eaeacf
62 | fef0bba982a4ad5296913ea8ca1ac015
63 | 7cf110165b54e7511d3a21e67b7da85e
64 | d0c5bdc45a59669a39a4971adc53c51d
65 | 3f95b3ecbe55c83e9c3a7294039d408
66 | 74314be9ad38b02171eade9e9bdd0f45
67 | 162341ffb94a3884e4ba5fe92f32019a
68 | c4dcbb047d219cfeb4018979c856c916
69 | 12f2156b99444e955d73afbd7c310e93
70 | 1a0fab14a11b39d1a5295d0078b5d60
71 | b307961888415ab88ec5d235d7e81cc6
72 | 649c8024460077cce8f3b203d0634c16
73 | a53b3ac989d9e6f35f8a15a7cb97bf7a
74 | a4c32dbcb71076d5825732a29ddd146e
75 | 43d96f5a6a619c06bc663b874223ed74
76 | 8f3250e029d561341b92a1339af2f7ce
77 | fc07770a57d7a87022d3f170937c6a0b
78 | 98eab6b7dee0d64519907bbfddac6b6
79 | 2d3208fa267160862c611effe1bec8cf
80 | a04e8cce46e70fc48f2c50408e4e65f6
81 | dacb3f6f6b0cc7a52b1abd641c06dcad
82 | 2e6c1cc7d262bc36c1d28dd38097a536
83 | 83dedc1afeb57e199edca1fee171b669
84 | 4458a5056f633fa13abacfd1353cca42
85 | 692ed312d9ba1663577cfcf36d9b3392
86 | 294d1fa4193f54528db944c07f28e3d8
87 | bdb87a4218cc7ecd23bb4223d09fa6a0
88 | d61ddb57397143e38d03482ac0270137
89 | 9f6acb21f86a88d93ff936510fe2e02f
90 | 709a0c498dfa2b32db9f110046803f4f
91 | 9e2169e8e8186a3a27bac6c74974cca2
92 | 2caa10c91355efe6ae2545602370c249
93 | 85a94f368a791343985b19765176f4ab
94 | 63e84b82309bae535b6795b7faa3170f
95 | 257ef557fee9c083324b3288c1587efe
96 | fa98d507d82d325c80202e5aaf48e957
97 | 74dd744f5c5b9d132fb56cff2a0f826
98 | 23cf8469ffbd93ff8faab772f03eba4b
99 | f022d7789de219e1fb7ad0eb0a148aa8
100 | 93d617cb7bf7558671fd17a89eb6aa70
101 | 7a458ea841e4e67a11ee7ca4f000feba
102 | 6d7a0e701b4417504161e123a102b12b
103 | 678ed514423f067fba55419d0f0e294
104 | 58ece48e59781da1fd0a2086d631b6a0
105 | c1c23c7a80e4bf388c34a8518a7b6811
106 | 9e98174951026624164c8c77555f8e1f
107 | ab621af8d265667a396287d16057dbdd
108 | ba669a9b03186ee8108c9111b239151
109 | 158f605ffbe6b036436916a86a90ed7
110 | 4f2919438ca46d8de8d8ad3bdef6aca2
111 | c3ded7599240c96f8bbff91b1135bb3c
112 | 3035c3d7d7eef1fc952c851f81463faa
113 | e679783f54c36220b99a2cc4ddf0d3f9
114 | 8b174c67bfa00f03df269b2c62a1bd4a
115 | 9878b77e157e4b0dffc2eedcd24a87fb
116 | de271ee7c512d31551c2056c93a582cf
117 | dc2c4f42a5715d0a6d1ffe1a45470ad7
118 | c8550b3e45672f5d891ef59b77a7541b
119 | 832d6075c8fafe4de862e3cac45aa769
120 | cc6c216e25469966bf14f57b214697e5
121 | 18bab729642c42631308c95c9c0fcafc
122 | 36ff3418849b9b8635d9dd2d03e6c396
123 | 5ae839d512364bd4da0f54fde38627c3
124 | 13dfb842c1944c64de3b109acc7ed8a
125 | 69e334b26683a81935bbff93749c520
126 | 49db0f97d215a109a2db3e68315c7819
127 | e96198cfb23a8b9d1d7ccb77d69f693e
128 | 520bdc1f312a9c92e44148b82b01a424
129 | 590017c9eabc3a1cfe8474bfd438f6d8
130 | 68918effca4b9becf3434ae1311a0329
131 | 856d33d16a97605bc9164fb9f03dc1ac
132 | 98c63a8e5485b0a12737a4ff69ca3cd7
133 | 7176e9baddd8a2ea33ac431572f43a21
134 | 75d6dd4112038b8359aa4ad538fd90de
135 | bc27ec84fdfa912437ab6ee77f8c5e9e
136 | 74a65213a90e1f2d850a112e6048afc4
137 | ef34d9789a83659c9f8f9b52e89f6554
138 | eed72e5bc3dc4e85150c05906b260c9e
139 | 7483bc04eec05077b6d41c42f7ade8c8
140 | 479e2ed536698d478f257ecba9a6ef8
141 | e0355773a18fc61224d795aabf4bd88
142 | 9c2e939e173fb6e88af54f33b2f21f70
143 | 198557f515ecfe73f3c5246a46375579
144 | e3ad9c85b958737ef7c1509e74f67ac7
145 | f75cac5b112f14002c32dcd0becbedb7
146 | 2c8699277b2717be66289707fcc0ca1d
147 | 20bcd48918a843946e74af071fa12682
148 | 541cc8b3ccf4c799502122ac3599bb74
149 | dcc94b8d84b5093df47a365062723f15
150 | 678ec09bbde5f116716c29316ac4d0a0
151 | 39b91aa425472c3676fb191f3b44695a
152 | 738e377ef785ee92d3429357dd0adcaa
153 | db059495c20c0e2e514ce6dee24d82db
154 | 89d70d3e0c97baaa859b0bef8825325f
155 | b7dd49e4f54f736afd5d38d2ca555422
156 | 4cbd57cc8e6aef9f2ed91d160fd4ae97
157 | 36290375c3ff67b9fa391a6b067626b4
158 | 15bc36a3ce59163bce8584f8b28da0ba
159 | 4133d764b4ce5323a44bdc236120a21e
160 | 99fa43c391f71ffd592461222e5fed0
161 | e2784eee13f340f2195cb740f5da17ea
162 | 62a6de09ff956e997b239f1b8ec0d46d
163 | 42ce5fc532b667bf9f8c6ee75b301991
164 | 235cca962513b7a7629cefcc54d102ca
165 | 170f4eab739637f2a101047bb63a1772
166 | f2245c0ff356a85dda10b9c82531bbc2
167 | 142e9e68380daef34eb88be3370bffe7
168 | cbe652c317a4366b4298c9fe028be1cd
169 | e8c4ef4c74c631e83628c1e9941a8ab9
170 | f46531484dea3574a803a040655859ad
171 | eb6fd5cae6ee26c8a2651abaf391628e
172 | ab2e514557ecb359224096f37ce8c08c
173 | 10a1aa2255ede06589b4abee87a908b9
174 | 7f55d778584ee63d2271b84575f49c3b
175 | de48276b397bfbbe8fc27711a3d87327
176 | 7a1eba075f17d7b0a456028305c31de3
177 | 1049bf1611874c9cf0c2cf8583536651
178 | fbd120d2c01484d56c95c6d882af3c0
179 | 5050d6be55dbb7cbbf82a0d508a096d3
180 | f9bc179b45d2e5ffc55273be8e22f2c
181 | 67b3696286a96a8c171bc7a10f38839b
182 | a6fa27ebfdcfb0e165f198d5d73e9283
183 | 75dce3b2e5152c01ead1b13838d77bb3
184 | 52541b667e4dee9b1c1be4d7e88f11d5
185 | 4f71662203c45d66cb2c0b430ff869c
186 | 2682cb34e7db8735bdc7fd7cf135ade2
187 | 5681c4fec43043c1a9f85d9079e13c55
188 | 5f03b8d583798f7fac18d1d66482053f
189 | 58d40261b05f9a148abea0092096036
190 | e7ef78ddc23ab4edbad0eedd46c6260f
191 | a262dd4b61d374c8b91c0e89daffb776
192 | 6adb3426ac55ba827efa8dff0d683ef7
193 | f5eb39c7d2e7452ee7ef9fff09638f8e
194 | 2b829a38051e6f8d1f6dfedaba98d5f9
195 | be7a560b2a6996558c646f076042ffd9
196 | fcd923f9bcf1e859e2a1e51fbada37b3
197 | 597b3a321198f0a029b6ce1cfa22349d
198 | eb1fa4d2a399d4c38334e57fff4eb77b
199 | 467ab7ee9487525b13e4f8e4c4578272
200 | 30e53b35873e59da73ea3d752b4ac8ec
201 | 652a6fd052491909ab19ce2dec0d1925
202 | 5b7901974a37066aee44e0ef4ed60fd
203 | e8508eef82fb9163a1288f74f9304471
204 | fecfbab790d979a25d560b84ad8d9e87
205 | 3ef3e3008fd2696ca1033de17902ec9b
206 | 57245f4db78fc2be7aa291768a04b26f
207 | a2b921dea6df33765282621e4b0cea7
208 | 91240b6e6ca6136dd25ac584f0a4b696
209 | 5ff8806e12ef72e0650185da4813c6fe
210 | fa21f65c051ea2577500d68c500fdb4b
211 | 7c134eee62290ae7fd130953acb6f543
212 | c13cfcc92e41e5a924fb403e4bf9a6b1
213 | a801c5a24131f1842ed91d160fd4ae97
214 | e71c51adfe4d4f00341e76467b172f31
215 | 719a564d600f1ab38162d5a2262f4a8
216 | 34d8c06ade78bee87e273378b31b6ba6
217 |
--------------------------------------------------------------------------------
/data/filelists/04401088_train.lst:
--------------------------------------------------------------------------------
1 | 611afaaa1671ac8cc56f78d9daf213b
2 | 9f3ad4e5f16f40b3d0f9f958bc79097c
3 | 21a7e90867b64433316979ee2b237f2b
4 | 74e5759913a2ac208b0d3d4e51815944
5 | b8555009f82af5da8c3645155d02fccc
6 | 73339a7ed1e72d89aef10502d58d4967
7 | fb1e1826c233104a4e09ebaf49b0cb2f
8 | 6039379abd69be2f5383626fb6f0dbda
9 | 474b04796bf1ec91962bfd5bcfc9bf86
10 | abf5c8d2cbcd97d81a0d6bd0d03a1fc9
11 | 202fd2497d2e85f0dd6c14adedcbd4c3
12 | 16549bfa3cd0f53d2110cfd44d2335d
13 | 38881e9944ea86dca374e5b9b6427c16
14 | 6909da0ff58823615a82137b384b94e
15 | 7f643ee632aa0a3f51ad7743381c8a7d
16 | b7ebfa514d14036e2da685d55be1eb
17 | 1b1969121f2d099b27192dc5dc6ab252
18 | cb21dc07d0ca602b151d8b52c53b90
19 | f18dbf3cbc7d3822de764ca2f457c756
20 | b207b3f3617db6cb85089a13cc567dbd
21 | c9a50d65e19a4aa3e2da685d55be1eb
22 | 4f3c487c54ca29f2439292e4b8fd557e
23 | 5413423e80c9f264abe7f17e61fac246
24 | 27ef3bc1f4a05157bcff4302eb453f85
25 | 816aef1e285ab957b1c67c24f425bd0e
26 | d6120b12aca39e73cdbe8a30cf95821
27 | e1b7a28e8f8ddf15a4ecfe858e518c15
28 | f73493b7c8a78000b594bbf2c494ab81
29 | 2216e78a43c5d587b8e1b99345a5afd4
30 | fe9d97823a25e56d95e43220ee0eb824
31 | b18f0d53dd3db1999410a04d09c14d1a
32 | fb050aca4d5f2573cf1d3d11d6121bb4
33 | a434289b281e629b81139543c959a70a
34 | 6e183cdeba6b83b3805062aaa3bb7665
35 | ff8676e76a0fd471fc115be4ff5cfb9e
36 | ac6f6437f9e63981b6d41c42f7ade8c8
37 | 3bc6f902628b3f7f85f6153ed2033a1c
38 | ac1e771d6392e912f594ca916b37180c
39 | d7ed913a3888696d289b03e5721252f3
40 | 8cac6df50c515c498be6bc9d57b6a438
41 | 74aab120cfb4d88257de0221db0b9d32
42 | 5101c0131cdf76d03f9d84f9a87a44e4
43 | db89fa13b1c3c53afff0e9d5e9e3da5b
44 | a6b2c1427dec317525bf2427892579c7
45 | 5b111b3a3e94b5907e1c85c5c15da7fb
46 | e458abdbff34fefe255591a17641445
47 | e30f2d19e9f44f6ab0cb879d4613195c
48 | b35c2da756f8df5aa0eb5a85db887292
49 | 1847d3782970e60679510444cc61f839
50 | 77f5498dd2277aacfd71ce99fb45ba0c
51 | aa833540c3f2d77e2915acf4d1de24fe
52 | 73b87e2025cfdb6daf19fa8e8218bf64
53 | f3aac8f54f5f2a2f983ec12a2b33f18b
54 | 308cce8808b076bff49084215d845d01
55 | 9644fb6a1520af7fa90f3ad3635b46d5
56 | ccfac9fefb0326003f548cb8701b2293
57 | 1b43d9193794748e31811399a4ff3aa0
58 | 1b41282fb44f9bb28f6823689e03ea4
59 | 8d55c1677626cc48214d974150b798e9
60 | ef2472e661320b03e324fbf60278e45a
61 | 901a0180abe1011b3c629b56d283e7b8
62 | 4bef48f1c1b4a40fbdeec9c43546255e
63 | 70fe91a7bc072c39cf81faac56233ce6
64 | fa9b007a326be6975c8fa950032e0987
65 | d2f3eb92a31649647c17b7a9bb17a24
66 | 8da5c29d14a1003d23247d005da93d43
67 | 1f93dbc9622d83de7a9f0bb7b1eb35a4
68 | cf7973f49aa611346be7f66e5722d994
69 | 43b59b01866f23e6f8d380ef6d10e2a7
70 | 54bb14aad2406a124ce28f0f1b509eda
71 | 9dc0c2ca8de18e28b4c18e3209e12990
72 | 2c32c1b5d13074431c1943a82a09125f
73 | 81f527c62191bcd465c46de8aef92580
74 | 1d9169471bf9223423e378ba27e11ea6
75 | 18dc34a116734b43bfd324d8acaeb3f2
76 | ff8ba237ee9164c8ff86292618094648
77 | 5a37ad3759b4d93df843a7d4732b1d6
78 | abcda75b9f826fce8dd7bd77b545a577
79 | cfdd44745ba101bc714ce1441b585593
80 | 1b1aaa9a95ae964746becd46a4907f38
81 | 113303df7880cd71226bc3b9ce9ff2a1
82 | a9d358ce2d54d95e54c7ab6aa5674ccc
83 | 922380f231a342cf388f6c7a9d3e1552
84 | 6ff995a8e9faa6e83e43be0b542efff8
85 | ee7d2d986f2c989ac66dc18b3cf1700
86 | 85841bf9d27c85a26062f54263899d21
87 | 8270c952b147d263b9746cb9e2b9d08
88 | 89019c955310bc56eeb3fafe1bc8c07d
89 | 5c8d554075a904bfa7ca3fec59d82214
90 | da24f27173874672ed7485a1aa598365
91 | a82fbd031a79f88eb6d41c42f7ade8c8
92 | 2a6d70bc7ac6db391d4136675e1527dd
93 | e48a2eff0b0d0a39a0eb5a85db887292
94 | 692e5fc16bc6ebd23737433332467411
95 | a4d81a74a416b88948637414dbe9de8d
96 | 98eb601db13d2a99611f4167fca99b42
97 | 3c0801c11fc7e4c5f31b75c4a94a8879
98 | 1ac1e6fc09611ff049c647f92ae11714
99 | 3a3fb2919b1bd92658c2dcb60645f75c
100 | 1cd8004a1e0dd825c33f370fa5b41cf7
101 | 722acb5e8ccd39391e5d846d206adf3d
102 | d9ce2d0be1f3952aa36bec4fa7cd58c9
103 | 5e6ee0c5d155d2298b13932a0c28e98b
104 | efed528241cd773fa2c7c5886f4bbc93
105 | ef2b505068cf120efe48f52a0ccc160d
106 | 2eae0713342e1103397d790c3d0a8fb5
107 | 39359aaddcc4b761b0a79e28606cb167
108 | bf15900bf5afb946b35f223cefd97829
109 | 96b1d230e88cba16f71555c6480aef72
110 | 9dcc24af7e0df254525b3f0594400a46
111 | b7ab1b6f7dc5026dea8f4709e6949c8
112 | 6167bf752533508dfd6e968ab91bff17
113 | 6bd7f7a17a7bbd2d68acf22a03600648
114 | 7772938405ac56c1b6d41c42f7ade8c8
115 | f5f1fbeca9af99c98efee9b82d757c0b
116 | fc1675526d043e81a2811061ff7e0824
117 | d944c42ad08401651e5d846d206adf3d
118 | c202335fd3dccf9d45e2a4e5729b970d
119 | 4991cd37af08577070346e4935b9a42b
120 | bcc1760ef463671c825b62bd6c28eac
121 | be66886215eafadd56b70d2dbf032aa1
122 | d41b332b9e6efddaa0eb5a85db887292
123 | 6a073661711d8b9f1a5b805dbbf26206
124 | fcdbba7127ad58a84155fcb773414092
125 | f7cb2d921f246c00cc8eea03ea8843cc
126 | 8b11b38e035143ddb007a3ad40c5add6
127 | e840fab2f764532ce4bb3cae511f21f0
128 | 8f049b65309d8390f5304dc8cfbb76e1
129 | 8a56e999d75c4d6e8d1dabf86742ec3c
130 | 25eff75e43287223f1cb19f636b1c2bd
131 | c3e18e5d0f7a8709e41b17b375798648
132 | 1292caa1282ad8cffc3c4ad908ac06f4
133 | 76a4a3e8370bdc24bd2d4107e8dc02b8
134 | d9d06d2772ecc526c0dc3ed657ab97f0
135 | e13a5d5b3f7581cbecf207e73a787c06
136 | 53cd656555da181db6d41c42f7ade8c8
137 | 457b4310870bcf047f4e0c14aca1a926
138 | c864337d009c823290a9c3b0b32f8569
139 | 19208607cafce17dcb85f279c97d4c5c
140 | 9e302a3f21a992c0bb579d1d8d989550
141 | bf0f0ba650108d03cf144715a1bb5595
142 | 9efabcf2ff8a4be9a59562d67b11f3d
143 | f7fcc773249429a2761eb63018291094
144 | 953a952a18e389e4eb386a4e845c05f5
145 | 38afc0467599bd6bfa13d53e5e4a7d2a
146 | 452b924abd2ece2d58932236a22029d3
147 | 71121add7e94b024fb88c3d40924fb73
148 | 4116965029bd24393423610e52061098
149 | 556b1ebe82977992c51777c7f8bdea09
150 | 7f41f4b186fdf84c7ecaf377af2046d6
151 | c87bd717c3640f0f741e88434245c899
152 | bf2a5f434972f11a690a03770c5de186
153 | 320d0f9256ab9cc3a046bbac53886364
154 | d299bcdfee69c57d419fdfebc874eb8f
155 | 312c430f8b1a3fc80249ed612e14df4
156 | bf7daa3ade10ee75bad093be69512dcd
157 | 58c6118bd15ca3b48dd025faf4cea27d
158 | f8d97bebf67cad12a0eb5a85db887292
159 | bef91c1804ec226e5b1c02ea3a290822
160 | 2acc3bd87282a7e31da45817bd55c1e
161 | 5e87bca3231cbdf15b5f05be350ae67e
162 | 9fac50c7b7c72dc694f8f49303e93f14
163 | ec39e26f8c0829b3413ef77469a0f9cf
164 | ab8243a880170c00cca1221aa4c4f70a
165 | f760cdb0f8cbc6fa3c28e819722231b4
166 | d72b00ba0cbe10a1157f4a560c24391b
167 | 5286f018c374d3ec3f7fe3cbfc3d51a7
168 | 610a9f79a2f2faacc43c9f60fcc79b4c
169 | af983238a3e47692f90d7ee51bc3530a
170 | 84cff93cb8ed08e55acbb5d30672759
171 | 424ccff9ceea33451c81652b127a0ec9
172 | bcbf0ce42d2b0f91abae9246594d3f7d
173 | 44ce10ddb982c8ff72152988eac576ab
174 | 3ed359e502a24e5a79510444cc61f839
175 | d932fb5d06d5e4f8da8c8a88ff86c5a7
176 | 9c26b9b0584920f1539baeab407f4a02
177 | 5fe99904fa4b22d4ff1911c2640f2e42
178 | 383a304edf67f757769dec5ec0157054
179 | 420138dffb14f929f0b45b4b4c7e33b7
180 | 7dd788cca7df768495b1245be456cdf5
181 | 3036e6b2a898fc85e85776440ad91264
182 | a1e51e185a9f24354b8478bdb97333d3
183 | 112cdf6f3466e35fa36266c295c27a25
184 | 313e9b124e421a4efa9922db9b6aab31
185 | 92ec69548761efc61f74e5d5bf005208
186 | 500fbdefb58e261af2cdad303f49c9f9
187 | e06b902efc1576c62fd4061aba358325
188 | 271421566061988a93d9d97ff82834ba
189 | 3bdd569911660da81229c79e4cce736a
190 | d2636f3af00fb3e2538f655e65b0b57
191 | 1101db09207b39c244f01fc4278d10c1
192 | c43c9123ed893de5a0eb5a85db887292
193 | 17072ff9ec47bfadc3fd2392bc923b2f
194 | 878135eab6ae9aa181471a5ba59fd0fa
195 | 89f17a3563941ba9f2fdbae39bae1eff
196 | 1f565ab552dc89727e51366b0cf7747
197 | 2a48a703451da580555dee99eadeb47b
198 | 6609f05bbe9c49172cf708d3028fb325
199 | 25e03c305f41c5dd226bc3b9ce9ff2a1
200 | 6f63df7ca322514f41ced50d3a574698
201 | 59a168f51f8d7dd9e59685727bdd9ae9
202 | df2299185baf20a17b1546f309a98bd9
203 | 31e8327ffa4ba6a87790cd6f6e8952aa
204 | b1085da37756ddd1d3f1ccf368ff60f9
205 | 2df0bc8b46ad3cb858932236a22029d3
206 | a698b67778c02fcb5a0a15c8380e928f
207 | ef57d8665eb5ef7cdb965514105122a4
208 | f77811bd35b9215dfd06b6d6f44d62dc
209 | bbbca195cd6b85f1562c8e1ac545ef78
210 | d37afdca0c48251044b992023e0d3ef0
211 | 7bd9b1b1297013ed65f78a217bb320fd
212 | 27085a2456319497f1cb19f636b1c2bd
213 | e8e9617b4f7247fa3578fcb734a22822
214 | 2163366f7c3a7a0e6c63b8b48495261a
215 | 35d370a1531826adbe5693b333a3dd92
216 | 3dc95447a57f8d06c1e615a94e798da1
217 | e513675ffb2da709a060e584e7409aab
218 | 29f27d4472a17e723fd445ae159c2cb2
219 | 1bb65c38e6b563d919bade123d9b1a21
220 | 144d8038c1688e37ab3dd76bf33b0f5e
221 | 5deb3e8911dbef1adce6ba04fb42df
222 | 68189c0fdca1a8744db121a0d72356af
223 | 52494d36a6d136f6b34ae4286be3d813
224 | ae7098f0bc20cc6b2a87aa332da7bee6
225 | 436d7a114f72dc03d4713685ae50fa13
226 | 234d1646b21fd765ee45e1eced971f52
227 | 34e36249166b8c6bc3f912172873d52f
228 | 16685299c37055c2be40226527c9872
229 | b73398902d1c267b5eed8c8b1cd54386
230 | 49081a0c0cd4ad32166f3c6af52a7c59
231 | eb58b011745519194fde46457697d80
232 | 97e214d6b93e012f6337fbfda5096043
233 | c7e4a425cebaa04bf9c8feac0b33491e
234 | cb9e8cd0a29cbb26b6d41c42f7ade8c8
235 | 54539e30a59cce413864ee650d9e9c5c
236 | 2cbfb354e5dd731dfd6c7e3f0d9c56c1
237 | 267a2d6fbf29c04cbc17518d87dd1f7a
238 | e691c8f0fd7d64d7ab0b172d4dea80cd
239 | 52d1db0a460723949582767760266e88
240 | f66d8ca1f6b259de2a9eb0f146e94477
241 | baafe1add38af23a5f0b5b54dbc4f35c
242 | 5bb9020da1d3bdc260a9d7568d474ade
243 | 774bec08bd534dd28a1687774f473322
244 | 76781e8b967f98b5a0eb5a85db887292
245 | d5fd6679ddfc8ddc59f56ab706e2f74c
246 | 3ff176780a009cd93b61739f3c4d4342
247 | fabcaa4858df16e35817e30de1dabac4
248 | 609321c1351a955c1e1f8455cdf1c0bb
249 | fe553cf733e29a349426aa93c5c54668
250 | 3d1d0255e2163917f4ad1770263e7f39
251 | df90c50a892611ca8536be73396b323e
252 | 78b4f3aa956b52139531a714ad5bf7d5
253 | ab9c56981431ec70f7b18034d9df056d
254 | 40dbb04ab8f780d6cc571cd3cf8f17a1
255 | ffd186dcf855e13e26479a182158bae5
256 | 5828a8259ba570bbd24e3068806a8c67
257 | 8e3e1213e47661506457f8736d1c9e5d
258 | a3c1c9fc390b1bbbb099170e6f5a4af9
259 | 5e5c0391952208e81213f8f7891e7fa0
260 | b7049148a4ffa22fdfe197f9f37aa72d
261 | d4a038b20b1250d7241d076ab53023c1
262 | ceb47998c0ffa704f1cb19f636b1c2bd
263 | d51e5d7eae216c9ef1cb19f636b1c2bd
264 | 4b96f974453ef59ea2c7c5886f4bbc93
265 | 8e00be7402a612e17d6b888b4eb1ac9f
266 | 6d85b3dfd681eba530400184d5d3220b
267 | e1a4ea72b1f98e92d265c94f4d41d924
268 | db96e9b2c96c273de7d92dda5756fcfd
269 | 4a81237a7fc743763992b1138bb05b3c
270 | 8a26be623e40850a203d19a168d29f04
271 | e0b1cb72aba261731fa8e666182e8619
272 | fe34b663c44baf622ad536a59974757f
273 | 521fa79c95f4d3e26d9f55fbf45cc0c
274 | 8ede5d8c00e10a2ff35554ebed2bf2
275 | d740b0679a9996ae56acd5d5597a72c4
276 | e3c02395e83fefaa42dbe6bfe3cdb29d
277 | 3c244a5e76cec2cf6f108f2b64e6593a
278 | 2fe9e8fd2a7c512ad1f278e1513f3b7
279 | 27f7ab052f3fce42b35f223cefd97829
280 | bd7b84ae3b88bd5cd2dd279a9538db3c
281 | 8ea128f9035474394cb30fc798a4d976
282 | 64b6ddb847da082d761eb63018291094
283 | 3ef278f78ddb1db52a39b1d7ef8834b0
284 | 3d5c17c3e60a168bdaab9d410eb59af2
285 | 983b045d30322f96b102e855af58e521
286 | 86fc58a0c40316f2562c8e1ac545ef78
287 | c3e0378cf861099ae3f7a74e12a274ef
288 | c410d13694b8ca1d15e144fc878b7afa
289 | 7d93b8dae79d5bbe7015d3b6f402d5a4
290 | 52a81d42c352a903a0eb5a85db887292
291 | 9c1286570bbc6fc78f257ecba9a6ef8
292 | b02d8e0fb3ec903b4a952171144f2812
293 | aef45c975ed647778768dbb598f40c93
294 | bf259988d2e8728c391790b8b8084f0a
295 | 6e6d7c2ffadc2fad2fffec7af390883
296 | cea8f15682797fe6eb386a4e845c05f5
297 | 88c64c14d4b6ae5aa7636d58d56f8570
298 | 453c590f0a1b37c1e0c2427da07ca8c6
299 | 2274e1f494d6d2c3226bc3b9ce9ff2a1
300 | 7afdaca858bb0a964a28575f3344964
301 | a7056690a5bf34d24ffbcf8cf904ca12
302 | 6a0c0c55f355cc23a0eb5a85db887292
303 | 1edc7aa574624ca0200a0406803801e9
304 | 959975a60ae104c48780444eaa02106b
305 | e33124aa016bd1f19c1db271ad9472a7
306 | c7407877d3325f7f391258277c122351
307 | 22fc328d136756361e5d846d206adf3d
308 | 6682bf5d835701abe1a8044199c77d84
309 | 57657c2b0d983a1658975870bb96a55c
310 | e6f4ceda4907fcc13c47272ccf8f316c
311 | cd1739ec8797049072f1ebe52d9b9daa
312 | 35dc3f0f2f5fe8d667a434dda72a2c24
313 | 81ad8af206d6b21b89b367279b017ccc
314 | a86eec9735db06a8226bc3b9ce9ff2a1
315 | ecbb1c53e881c2b25f4e4793ed432bc1
316 | d7b2a9546b6f68bfd0659574aaccef0b
317 | 2b48b14e226b131af3b2c084b195b056
318 | 69e45e401c1d05b767d8789d3a6519d0
319 | d79b59ea51a9d80c483afc91de6851e4
320 | 388415634e1056942ab70120fece57c0
321 | 8ec3b148b8c608a0562c671ec5000f23
322 | ee7ef8b40cc2c90d6b7170bfc4da1f8
323 | 2c6d9512b4013504ff0682cfb57a62dd
324 | da390e1a895506db28792f2ae4de363e
325 | 5dcb666efc36d9a68480fb9b9f30e540
326 | 9a94067c6ae50d59227a8035cf3430d9
327 | 5814df537b8f1bcde95cd0dc8c2f0e83
328 | a4910da0271b6f213a7e932df8806f9e
329 | 33db5943a8942fdfd998bbb6a9d203d8
330 | b1feb3020d9380ba4fb324159a14f34e
331 | 2d26f853e710b3e894088ff49a6baac4
332 | c6ad139da5e0799c712cb59213324f9d
333 | c71acd79ec4cf1cdd11ec2c68afc26e4
334 | 8b4d28e4df5ac6e8656557acf97c5e2a
335 | d3dcafb368c1defaa2c7c5886f4bbc93
336 | ad66da8440023d8a1e929774f9727b5e
337 | 5148da752bcd11884ce243cdbc967ce2
338 | 912d81dbf33f20956aedbd2a02b96953
339 | b77f57d319fd864fda5309001d158b32
340 | 1a9707b3e9d8345048891ddb73756acf
341 | 35f584cf8fd22794e4b68d3b17c43658
342 | 9a4812cc600c67a6bc4fefdf821af065
343 | c28ca490e5e7d104b1508bbfb8b56edb
344 | 5f4937b6e428e4ee122db064a7596ea
345 | 585f02091286a7a82b7045644a6897b2
346 | f0b3e6f5bd34ca3cf0c6f578f0594c3
347 |
--------------------------------------------------------------------------------
/data/filelists/04530566_test.lst:
--------------------------------------------------------------------------------
1 | b497c390de93b4dcba21fe79619ae253
2 | c991fc4636615e64ed01ae0c90548352
3 | 5a0ca7a6df97542e69c3c818538357ad
4 | 2fb7d918e4a738fd97556ba76bc2663
5 | 23be001cceb4c31af6f70779d83413f3
6 | 28be32d7361adce59e5ca238b1551011
7 | ac93c084dc99fa8a1613e32ab05e546d
8 | e3f81331fa00c5f893375feb9c1d5577
9 | 8c3148ee031b15446e0dbba30ac27e8
10 | 728fa87ee84c5c2d2fc7e4ac493eaaf8
11 | d4fcf6486fd18a4982266a2b21a2294
12 | a8976b06101853deb4d272023dce0149
13 | 1d075cc087e9c9e3e3d3b281e2d34942
14 | 2a301f7070178c028cd011e47ff1df1
15 | b5290cd73084cec0283f6ecb26ba2c4c
16 | 67b312f1ecd5e4a9810b5070d24f8934
17 | 4b54d54c1e9cd6cbff5cc490d863ff3d
18 | 498bc74044946e85484d83b7c37bccdd
19 | 2552d0de59d21f1bfbc6fe0b6b7dde54
20 | 4f8e847d3453f2f17301f2b895d332ac
21 | 8d7c4ca5e08a8a3a6d4334e260ec617d
22 | 924eeaf6f203fb636be14c19eeda8326
23 | eb1d9a98d4024b2e89d2f742ca991829
24 | e7bd994999e1d6d87ad17faf524063ac
25 | cb79681fc1caae04a63e14ddd32fec78
26 | cc97fdf906ef08afc5646791c1cc7f13
27 | 25159673c007368b8b44023403d275d4
28 | 3c52a65c90a604f36d41dce38b96c472
29 | 738eee54143b5406615bb39b45716cb5
30 | 587793fcbae6a6fbf5abe4b4be4c3d4b
31 | 834dead664b43efb1ca19e5e5c1d5766
32 | 70b7ef0d69c7013473965669ebe40616
33 | 2a569537a0f6abd34b5acb1c7aa990eb
34 | 6e52344e2aa435d37e264261353b57e1
35 | 6a9764e3e4127744be2fa29f46d19511
36 | feaf5c41e664348220dfe072b77502f8
37 | c929e6d77b548b27e6f3ce318264cd13
38 | 3838f398264452a47c97d792b03a31cc
39 | 614aaafb767bfe62dcf47132cab9d51b
40 | eb90fdddcb1f25fca60ce6f0a0028c13
41 | 8d8113b30710a6bb68d1fcae6985bcc8
42 | d5f0a8785afc39120dfe072b77502f8
43 | fc15175b34b5e47ec57b4b6e80796be3
44 | 1b19bc5a09198bc85fa2a5df3ce5bc40
45 | 927c8ab9d2603aec2d4fe9f5177af0
46 | 4a7375e11a8ac1ae565f244baeeca983
47 | 2c7a846828d3584f2e332a83fed6fe76
48 | 327be46d4b15ba2aa79c0870e481d9eb
49 | c9d1159874c934f16f1b09a7281511b8
50 | e3c5033a9367bfa5a6dc0341d8503142
51 | b032f7baa738f10ef1ec74085c31730d
52 | 325d6d879e306fec3547bc1786bc3b6
53 | d2f5b582c65ee9567f79d93424b708f0
54 | 1dce61f6dd85dc469811751e3fab8939
55 | 6c99359667a1b49d657a96a9bceb8713
56 | a7444ff7be7aad024c8ad92cfce1307c
57 | 60c58f42072396986d4334e260ec617d
58 | 54b6788d413eb45bf6b4f9d652536b82
59 | 37aeaa30913d6ac73e7331a68f273ff6
60 | 8fb16643e061a3bd82b5804533e545b1
61 | 10212c1a94915e146fc883a34ed13b89
62 | 5ab18f317c0a5d21576932faf8645222
63 | 9380065fd20eec791a7be2887bc37d1
64 | ac736a87ca813c6d701c68e1045b606
65 | 1a2f00c6886f14354d85fb76de815344
66 | a85ef79371cb1edb52fd6b83c5929135
67 | 8851329ba7c3394d41556f795d265590
68 | 47c53f9cfdd4addfe054bb56e3407f7b
69 | 79803d0a02bbdc93ff790997f2048517
70 | ca529b32d5bccdfe7d66e5fb8a76ea1f
71 | 9a0c149f5c47207f22252c899eb7861f
72 | c29e6490308ad33320d713ce6286f99c
73 | 721a41c68f8d1e1af898a4b2192a12e
74 | e00d3546401b6759710b5d09f274df
75 | d65fc1dbe7fe802a5761a0b53ed37cec
76 | 635bed8b6b180fa3e65273dbd0c0f949
77 | 2d136ffca92d9c4e3639e751e7f78cf0
78 | 5f1956ad3dd52a69d3a2c7c88c74aa63
79 | 2080308141b05e9e584c6557cf979aa5
80 | c23960425c8cb654c6cb0dfa2f14f9d4
81 | d1f0353c7fa985c91915777d56cf77e0
82 | 27bee532a7cbe5dbc4bd6e2ad0dc6de6
83 | e765446c37351a26850e00840470903a
84 | 41d1856d2e24a738b4624ce09086ad45
85 | 29c5c9924a3e1e2367585a906cb87a62
86 | f17262f7443b98de38d037116a032a18
87 | 5aac718c51fc73ca00223dcc18ecf69
88 | 3283111173c12947622984b5941cfb8
89 | d9e771ae62f0bebd28642b2f4910862d
90 | 2c68972ae4868355a6a720afea6887c
91 | 6824763a090a0b2fd942f20c59bd7ad0
92 | a51410ca51a40c2529412f6cb23454eb
93 | 1d2aa0bcc9ade276a70cfb3232f40c6
94 | 72a9394882b8151bef94bcb012573cf2
95 | 1175df3d5cedc3365c00e52236fed2eb
96 | 24beb61e46bf6b1970d557f49392fb1
97 | fcb92e30085a580d9c6645849b3b7d65
98 | 61eaa4afe332ba113547ed4d05d19f04
99 | 189668ffa80d37877622984b5941cfb8
100 | 72a68c898941cb3541556f795d265590
101 | 24000ec6bcb6ab9182b5804533e545b1
102 | 607b88a99de743eda0fefbd3658c7966
103 | fa2b5f163549ca457ba04de7d6d93ce8
104 | 68d32bb51ab2050efe999a207e6e230e
105 | cd4240b8246555df54102e7ecaeb1c5
106 | 34c099dc4cbcb0ee7c304709a8c6cd35
107 | 7103677dbfe63b1ff85fa5c7c88c6c9f
108 | b2f200bd0861e1daeb78d3e0a9401d4b
109 | 6f36c486675210cdd566d7f46e9a16d3
110 | 587cc1fc65ac4991ff920fdb73e92549
111 | 2f004ec4a719d231e513e51a78e5ea1b
112 | 9122c94c6aa76d9e652b5e55e45d0bc1
113 | 1fb07d5bf3421a46e2b83b21c9537e1b
114 | 283dc6c755398547657a96a9bceb8713
115 | aa695b15cb58096f36aafa2ff65e6955
116 | 46fefa9e95b353f4b1bb46d2556ba67d
117 | 6419254bff42d878e820a92cdd43b76d
118 | 68babb87d66a981dd187e410b169ccd0
119 | ad2c82cd40584b43fc4c78b4701b2fab
120 | 58a768c309c01b2cd6dc46f6baef3245
121 | a32082d31b6b9a0566dd4c46ee29f5d0
122 | 693566461a33af90d7f8e93419dcfd5f
123 | e1e3c053f4b4f1405e45696ec6d1a105
124 | d5c7613bf466d33e94daa4565dd30535
125 | f02b990da656df8dba71d80f7b736179
126 | 8676b1989d68f3e970c565b5a7d76650
127 | a755dbab93afbb3a1a05bdebf75f301d
128 | 8d95b6ddd06a8a80f57109a0257e61dd
129 | 5c313324778eb79ad976d6ec0305833a
130 | 20c2bcd71abffc2a93add66353cae8ec
131 | a431fbb7e58ef0c46c03c11657c96c60
132 | 3c835bfc9201041a34f2450730697f14
133 | 4ecbd1471e916cd6c1ae34bcb12af75b
134 | 86fafe5bf7013d18248c5646daf6718
135 | a0372d1c35e531e7130b54be1fe602e
136 | 6e1781a84b5dbda6fb3e64e796c0391a
137 | 77d2d34922964c7b57c58fd0f9b1d74
138 | e5524ebe2d9f1e8c47caa6b5f3c46e10
139 | bad5505a49b50dc8b89145155e320b60
140 | f03f7c963928073227ac692756be9e24
141 | 83ecbc5daab43647ff790997f2048517
142 | 6c687a500aff678ad83f267e8f0b536
143 | 3e7923c788b0b9a67297c18bca670e89
144 | eb05e72eb8f94a24816427daa1887efe
145 | 6911bfee295138ccae6afdd0fd1549e
146 | c359eef375afa3b6dd42314e00caace4
147 | 90d83e1dde32426407e66c6e74f5ce3
148 | 20d1090d07a49fe927ac692756be9e24
149 | a3109a4b09953b5e2b141dc6bd7c4bce
150 | 41032fa8e4f632a5447ea5854b3cf405
151 | ec685f1f4bd71a191bf585548743bf8
152 | a36f6174628ee5807789fc10abcbc749
153 | 6371cc04f48161ec43b0018b6edb5e48
154 | 6d71354936e0e1e8c362d63d34a4d0a
155 | c715bbc7a1586afe64ab9e610db7c692
156 | 7a6634eb949d72719e6f7dedb7e5f584
157 | 6313352481b445a8ecbbed03ea2b4cdc
158 | 25f20d56a125b4028d8e8d98cb30b332
159 | 848164edcd9aa41594daa4565dd30535
160 | 93285afc55afb00f6bad0887a204b994
161 | 84b75e53176c9f1fe1e2f026632da15
162 | ba05637e557909b19527abfa7ff95c0f
163 | 52fb0261b905147d2fe023c7dc3e5231
164 | 183054ec6b2665a38b2b48d71cfe16ab
165 | 5c695e7aa51d16ee557500503415b4e6
166 | 2362039302d80f99f2c9de96bdb467eb
167 | 27e9a27b6e3b49c227ac692756be9e24
168 | acc820666df876cb33af5a5d96363fe1
169 | 508e6fc3b47590556be64995e9ed73eb
170 | d1e59a48852965fb036cb639ea80765
171 | 7edbaebf7d4fa994eca93934e5f39869
172 | dd4b3fc340bddb7f70adfca72a15271b
173 | 5b88544e42981ce0a71aa3ce894d7bf7
174 | ac8a42622eed9830ae433bf4d273c8e2
175 | b89d4bfad9c9b64d476a01ad767951be
176 | 9262aa413df7b369d735fa1ab17311ec
177 | 70744087c22ee199a51aab4cdab636bb
178 | e0d1f833e8dc5c604947b319a9e09fd
179 | 307a956fb5eaf7a629d81e9641dd535d
180 | ca129502c7b2b8186d54dce3f3e9f18b
181 | 9696dd7f30247c5c573080510ce7a6bb
182 | dde0cd836238f7946cde899c8674e2a8
183 | 73fd73a8bda002eae8d6be23f236225a
184 | 77cf1b9003d904df96bb95f1b1976a40
185 | aeb021c1e1838706b44ca19ee8c5531e
186 | 2114fe40b577ced9c7640fef6931a907
187 | 1d176576e4ded157a313c221866393fc
188 | e3e2bf1879ec9298c711893477336d39
189 | abdd2218a607a19819194900293f58f0
190 | 6c2c2ce0215d3f979b3523fcb9cc5680
191 | d45f39e14c365801892294bafc22e040
192 | 9f468767b1fd9285eb2c303a0e0d287b
193 | 409ff4fbba1ba94adab1bb7802748e9e
194 | ea34a8282ae86edcd3fb60637c014c9e
195 | b7d831d7b1dcad77a8596b6b008107ab
196 | 2067c22906b79faff877f04737ced5b5
197 | b03e831a78f2f16a5b04bf7f324b7e5e
198 | 1f20ff37655c5dd61aa01ae491663d9
199 | 6847480bd905f05b544654c1c7449887
200 | f81ae8a4452ad290aa9bbcb26e1c5ea7
201 | f269ef3a1c758432e8d6be23f236225a
202 | ff77dc4561e1a8a531d119333f70ecc8
203 | 72d110284cdf597e68b6f3ae18faf6b7
204 | b090b42f3dc0e7a4aa7c6f19b4833a28
205 | 2b17c0705ee0426e53b2b4f48361e0b2
206 | 5e1c4ca986d216866554a94f24190b8a
207 | 697c8a9055e5ff2ea7a62969e8bea32d
208 | 2615224e88e47ed29e5ca238b1551011
209 | 703e4a7096ac1aba8f7e96a8530f50cf
210 | 6f8bb01950141f63b3e3c8d3ee0e8f52
211 | 2e54c2bad5d117994daa4565dd30535
212 | 57b1795508e5f9d19996f95a20b4c45a
213 | 9a7b0effb53375625f647c1b0a6369bc
214 | df73ce22935c8081b04c44c0f84a941e
215 | 7eedbeaa5216ff06ccd600f441988364
216 | 52ad452f1c63aee5a66bcb069f7626a7
217 | 2b58ca08b8f93769c5408f4f799fe72
218 | e1a43edb6152a3726e23bf72aec61fd1
219 | 22a66588db3822831d20b5ad5ef1cb1b
220 | 8c0199fb20e7d4d391347c63d1dae43c
221 | c89c8eca488d5072cdd34f38f87d26cf
222 | 4bd85ce20325ba7442c20743f866e1a6
223 | 2abe34f72a7ed4eb0d00cfc385a039b
224 | c8f85606ab95f0bd75086ae01906f5ab
225 | b093af9dabb14b70cfd826dd468a5497
226 | 2571a0b3d1eb9280f26f17fb5c4740a9
227 | 7ee49cd8ad72bfd2c620cf302459a7d3
228 | 6a5f7a634b13ea7a94daa4565dd30535
229 | beacf34e9b0c0597894b951d14f8e56
230 | 7e16ed13ded8aba83f59687345e725a
231 | 9e3c0b7fb69ec3997cd1f8dd6fbce8fb
232 | d703643f4a4f76a16c63b8b48495261a
233 | 6c1cfb2fe245b969c2e818a707fdb3e0
234 | c15004cb38217b33af018ffb2ed4ff85
235 | 9d3f9edb3fe0ada39bddaef1ba7e1752
236 | 5a2bdc97e9d6683077f1d7a36adeef7b
237 | 370ab590d5f9f6e12998de2923cbf8ed
238 | 2d847f7ada349864a4f87aa9a31cd70
239 | c1b48711737649616a740b8023d40f30
240 | ffacadade68cec7b926a1ee5a429907
241 | 995547c0276be2626bd4106c65ec103c
242 | 395ce591ad2e2d9be47b958d3d1f5177
243 | f90a485c72b6047b102edba1bfa321c4
244 | 7b602de66f5eff247991cd6455da4fb3
245 | 123c021333485d698a75485f44bcc744
246 | dace99ad1144747eaec7ac3c7340a2f9
247 | 2988a53fc376653aae529ab4a75c4af
248 | ddf03991440ea0d15eb13ba95b07c9cb
249 | 65e829c5a8a52b9491347c63d1dae43c
250 | 703c1f85dc01baad9fb3e3631a88cdab
251 | f91e712b124915514b6c44ccda750d2e
252 | 65be4fb7c78125eda52f887aa13ba9c2
253 | e11279543f1e3ea015ebc00dd3588bef
254 | e88c7403ff401716b7002bddf0942f8e
255 | c21024d97247df5ae922b610a625137b
256 | 8e8a38abbfa3ddec942654e703edf3c5
257 | 847e8fedddf6bee5518c49741aed1bc1
258 | 9bedc0d32c657b5a95003e7aecc71b93
259 | 8faf5fbe39f67f3dfa2eb3102eea4e72
260 | 54da496566d05afb568b456e2715b08f
261 | 93c013c922b90649ec08eb6485163157
262 | 816efac46f2f3c99452a4c76a476a0f6
263 | 2e620c48f90f6fb2f569f587daa38158
264 | a28a7d34ad5f006f959df312c935a698
265 | 887be2603a56d8acc13b4b8de5611825
266 | 73c6ef5ee071b7f9791ed0cd6a81047
267 | c6e127fca727e2be3d312efac35b8a09
268 | 8d5e3b659cf0df154327dc86b5ea9517
269 | 95de565a937cc4ccdb024f6e72f57630
270 | 35960e065788a31b123c06ea72522927
271 | 377ea2491f8db13c4808655181d482fb
272 | f3f66f0bce27d439c1dbab1d1ee81853
273 | 5fd1b1b185638c49c13c29cdfe828247
274 | 4214845c44563c5fb1bb46d2556ba67d
275 | 602df167ba6cb5f5443efa8c2bef3b97
276 | d09202ccf8fa18d7de6289e76b045123
277 | 6ea8d00d7359f08f9e4614310319ea50
278 | 1eac28fe0b2d620bf0f75e254acd7ce4
279 | bacbb452a0f6917a663e90eaf6b4ca52
280 | 389d122da973fd5cd812ac1676a22587
281 | e93a47089f5c03fb7220891f188bc420
282 | c993c40ab88b161e3cedf90fdd80720e
283 | 6fd433c69f9c498a12d1578498a3b488
284 | 7890b89eba662af0ce90854bc9efdc95
285 | 1f846bab69b20a23561fc06c3ebd59d2
286 | f8b80289dbba94bdb7002bddf0942f8e
287 | c680824e615c772d18d5c097fe7ed300
288 | 411da0cd0b0089362b249fd16295bbfb
289 | f99537c4b6d50126d87c63d8b3018b58
290 | 1d5ff455b6ebd04e413559acd5524c40
291 | 1abf3b20f05ed8ea902d6f4ac8edb5f4
292 | 7aba61c9096ce60b7002bddf0942f8e
293 | c8f5f746daa5bd96b34ff70ac6c9e4d5
294 | 2212bb44240a9f0b57cf4c4836e6df44
295 | 921a5d88994aa99c71327f667b2179b0
296 | 2e958577e7756f59bf9717d602b327f4
297 | 83122dd93e3f42c08099d0cb75c1d1e1
298 | 2ba37ef44fa116f8300ca77569ad3884
299 | 2ee1a459db90488826fea6918e74b120
300 | e82e97e22066a75d798832e32e32aae6
301 | 83aa90436933149311c337781d78350b
302 | 6d6e65b938b88eaf3a4406b2a58a646a
303 | f12f615701b9fd31a9e77d2a83027228
304 | bdc39427c6267262c541ae04c251c7da
305 | ae65e1f6bb539fa775e66ae917e551ed
306 | eba55caf770565989c063286c702ba92
307 | 368dadba3b837dd926be51fab07b7ec6
308 | 4140a889b730d00cc613c8345c33a85a
309 | 957ac9708448e111f0ef63bb932093ce
310 | 9004946f75082a8632c0857fb4bcf47a
311 | 97b9c8f223390554e2584b7a39a94cb9
312 | 3897d265d993ee2a1fabf3cbd0fc77bc
313 | b5b320871c5dd884a24134966691a2dc
314 | bb601d5ded9bdc00746ffcbc44510229
315 | 854728b0055ec423e4f0b6b21d3809cf
316 | 2e6a74a610868d5be1e91cfa8fea7dba
317 | be8efba4b5c1cbfb94daa4565dd30535
318 | 71d6ab6979e5a313dde8c025d72da437
319 | c45f67b42b7febf52b249fd16295bbfb
320 | f18739a47f1f08e08510ad9ae6ed36b6
321 | 4464fb8cf0d04cb732c0857fb4bcf47a
322 | 2c8725b9a09b6d0a44ebbc705ad8c07
323 | d4079a1fa9c5eee8a3599da6d4b3696d
324 | a13e0728cbc8a41594ebaf95f022dfde
325 | f73392abd103857666ab813654be63ca
326 | e4717ec5f7e12fbf07aa2d157764a08
327 | 92f08b4bd8aed9bedc2616ac929c8116
328 | b9c516eec45c825979283d5c77809cc1
329 | 1f9315ee16e03c64450e0a3087ad6863
330 | 39ee3af7e07310f494daa4565dd30535
331 | 72f3510fb835c3557c0ab7347b9e831a
332 | cdfe819679f7c2e2916576b265053633
333 | 438a1ce3825bc06a18803813f0c0dee8
334 | 4d8ae6327ab4ed301e66f1783a4812d7
335 | 522614512d74a2f8c5f391634c2a5ade
336 | 20c2e1a09d00f51294daa4565dd30535
337 | ac479ce45b04972891bdbed880f31c72
338 | 10e10b663a81801148c1c53e2c827229
339 | a0b661c93028d7de798832e32e32aae6
340 | 9d8d5086930871efe2e5f41247736024
341 | dfd7315b7f8a07ca67585a906cb87a62
342 | 24a0d85f723fed2d7f332834f123f44
343 | 59a363d3852757572b249fd16295bbfb
344 | 49075ee8db9d66538d1140748efc85ed
345 | 9114091d7dce55242e5cac9166d7a1f5
346 | 698f399e6c578386b64d3e1832079349
347 | 7551b29b91fa4d47ca732a92ee1dda3b
348 | ace32fcd2b6c3fd081e9f45621d2c8eb
349 | 739a6f209a49040a4f44d84b9baa5f42
350 | 1fb578de4aebcd62b249fd16295bbfb
351 | 7af3abe01d2ba4ddf09d36263ac1039c
352 | e2595bc7ef0809097c0ab7347b9e831a
353 | a4d9445d191c80a235a6b421c152ac60
354 | e92386352c19221ac99bbfcf5650bf52
355 | 8a553a23adde929ceb2c303a0e0d287b
356 | ba5723d5cab50a0b7d86b3749977e29
357 | bc698a05ff49b6e06d793283e2a4a87e
358 | 758c75266d7788c0f5678db9e73ab77e
359 | d317c39473534f97b1bb46d2556ba67d
360 | 3f3043e275bac07a6f315eca7454150f
361 | 751aeec5f1d50668332d76467c18dfde
362 | d37263bdd876ddf6f885c09aa3e51c57
363 | 37b4b837ca7da6a4561fc06c3ebd59d2
364 | 49665c3dca5441d77c0ab7347b9e831a
365 | 1378b7d4dc05adba9069b3c9aa123329
366 | 33e3b187089a68d3f983f6a1267b9260
367 | a99574a44a78208981f422b7e55b97ef
368 | c8414ce9b8848c3c1a3ad8aa8e24c7d1
369 | 76dab7acad83682765aae3dfe86a49ae
370 | 84097ba1b35f844ceb2c303a0e0d287b
371 | 4e3cd4d3b11584dda70cfb3232f40c6
372 | 33f7a4ca412285334616fd0dc3d5279
373 | 786f18c5f99f7006b1d1509c24a9f631
374 | ffffe224db39febe288b05b36358465d
375 | 5fb24b87514df43a82b0247bfa21216b
376 | 8605c975778dc8634c634743f56177d4
377 | 98da594a65640370c8333f6c4d99e2c8
378 |
--------------------------------------------------------------------------------
/demo/03001627_17e916fc863540ee3def89b32cef8e45_20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/demo/03001627_17e916fc863540ee3def89b32cef8e45_20.png
--------------------------------------------------------------------------------
/isosurface/LIB_PATH:
--------------------------------------------------------------------------------
1 | export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./isosurface/:/home/xharlie/dev/isosurface/tbb/tbb2018_20180822oss/lib/intel64/gcc4.7:/opt/intel/lib/intel64:/opt/intel/mkl/lib/intel64:/usr/local/lib64:/usr/local/lib:/usr/local/cuda/lib64
2 |
--------------------------------------------------------------------------------
/isosurface/computeDistanceField:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/isosurface/computeDistanceField
--------------------------------------------------------------------------------
/isosurface/computeMarchingCubes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/isosurface/computeMarchingCubes
--------------------------------------------------------------------------------
/isosurface/displayDistanceField:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/isosurface/displayDistanceField
--------------------------------------------------------------------------------
/isosurface/libtcmalloc.so.4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/isosurface/libtcmalloc.so.4
--------------------------------------------------------------------------------
/models/CNN/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/models/CNN/__init__.py
--------------------------------------------------------------------------------
/models/CNN/alexnet.py:
--------------------------------------------------------------------------------
1 | """This is an TensorFLow implementation of AlexNet by Alex Krizhevsky at all.
2 | Paper:
3 | (http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)
4 | Explanation can be found in my blog post:
5 | https://kratzert.github.io/2017/02/24/finetuning-alexnet-with-tensorflow.html
6 | This script enables finetuning AlexNet on any given Dataset with any number of
7 | classes. The structure of this script is strongly inspired by the fast.ai
8 | Deep Learning class by Jeremy Howard and Rachel Thomas, especially their vgg16
9 | finetuning script:
10 | Link:
11 | - https://github.com/fastai/courses/blob/master/deeplearning1/nbs/vgg16.py
12 | The pretrained weights can be downloaded here and should be placed in the same
13 | folder as this file:
14 | - http://www.cs.toronto.edu/~guerzhoy/tf_alexnet/
15 | @author: Frederik Kratzert (contact: f.kratzert(at)gmail.com)
16 | """
17 |
18 | import tensorflow as tf
19 | import numpy as np
20 |
21 |
22 | class AlexNet(object):
23 | """Implementation of the AlexNet."""
24 |
25 | def __init__(self, x, skip_layer, is_training, num_classes = 1024, keep_prob = 0.7,
26 | weights_path='DEFAULT'):
27 | """Create the graph of the AlexNet model.
28 | Args:
29 | x: Placeholder for the input tensor.
30 | keep_prob: Dropout probability.
31 | num_classes: Number of classes in the dataset.
32 | skip_layer: List of names of the layer, that get trained from
33 | scratch
34 | weights_path: Complete path to the pretrained weight file, if it
35 | isn't in the same folder as this code
36 | """
37 | # Parse input arguments into class variables
38 | self.X = x
39 | self.NUM_CLASSES = num_classes
40 | self.KEEP_PROB = keep_prob
41 | self.SKIP_LAYER = skip_layer
42 | self.is_training = is_training
43 |
44 | if weights_path == 'DEFAULT':
45 | self.WEIGHTS_PATH = '/media/ssd/projects/pointnet/pointnet/pointnet2/models/alexnet/bvlc_alexnet.npy'
46 | else:
47 | self.WEIGHTS_PATH = weights_path
48 |
49 | # Call the create function to build the computational graph of AlexNet
50 | self.create()
51 |
52 | def create(self):
53 | """Create the network graph."""
54 | # 1st Layer: Conv (w ReLu) -> Lrn -> Pool
55 | conv1 = conv(self.X, 11, 11, 96, 1, 1, padding='VALID', name='conv1')
56 | norm1 = lrn(conv1, 2, 2e-05, 0.75, name='norm1')
57 | pool1 = max_pool(norm1, 3, 3, 2, 2, padding='VALID', name='pool1')
58 |
59 | # 2nd Layer: Conv (w ReLu) -> Lrn -> Pool with 2 groups
60 | conv2 = conv(pool1, 5, 5, 256, 1, 1, groups=2, name='conv2')
61 | norm2 = lrn(conv2, 2, 2e-05, 0.75, name='norm2')
62 | pool2 = max_pool(norm2, 3, 3, 2, 2, padding='VALID', name='pool2')
63 |
64 | # 3rd Layer: Conv (w ReLu)
65 | conv3 = conv(pool2, 3, 3, 384, 1, 1, name='conv3')
66 |
67 | # 4th Layer: Conv (w ReLu) splitted into two groups
68 | conv4 = conv(conv3, 3, 3, 384, 1, 1, groups=2, name='conv4')
69 |
70 | # 5th Layer: Conv (w ReLu) -> Pool splitted into two groups
71 | conv5 = conv(conv4, 3, 3, 256, 1, 1, groups=2, name='conv5')
72 |
73 | pool5 = max_pool(conv5, 3, 3, 2, 2, padding='VALID', name='pool5')
74 |
75 | print ('pool5', pool5.shape)
76 | # 6th Layer: Flatten -> FC (w ReLu) -> Dropout
77 | # flattened = tf.reshape(pool5, [-1, 6*6*256])
78 | # fc6 = fc(flattened, 6*6*256, 4096, name='fc6')
79 | # dropout6 = dropout(fc6, self.KEEP_PROB)
80 | fc6 = conv(pool5, 11, 11, 4096, 1, 1, padding='VALID', name='fc6')
81 | print ('fc6', fc6.shape)
82 | dropout6 = tf.layers.dropout(fc6, self.KEEP_PROB, training = self.is_training)
83 |
84 | # # 7th Layer: FC (w ReLu) -> Dropout
85 | # fc7 = fc(dropout6, 4096, 4096, name='fc7')
86 | # dropout7 = dropout(fc7, self.KEEP_PROB)
87 | fc7 = conv(dropout6, 1, 1, 4096, 1, 1, padding='VALID', name='fc7')
88 | dropout7 = tf.layers.dropout(fc7, self.KEEP_PROB, training = self.is_training)
89 |
90 | # 8th Layer: FC and return unscaled activations
91 | # self.out = fc(dropout7, 4096, self.NUM_CLASSES, relu=False, name='fc8')
92 | self.out = conv(dropout7, 1, 1, 4096, 1, 1, padding='VALID', relu=False, name='fc8')
93 |
94 | def load_initial_weights(self, session):
95 | """Load weights from file into network.
96 | As the weights from http://www.cs.toronto.edu/~guerzhoy/tf_alexnet/
97 | come as a dict of lists (e.g. weights['conv1'] is a list) and not as
98 | dict of dicts (e.g. weights['conv1'] is a dict with keys 'weights' &
99 | 'biases') we need a special load function
100 | """
101 | # Load the weights into memory
102 | weights_dict = np.load(self.WEIGHTS_PATH, encoding='bytes').item()
103 |
104 | # Loop over all layer names stored in the weights dict
105 | for op_name in weights_dict:
106 |
107 | # Check if layer should be trained from scratch
108 | if op_name not in self.SKIP_LAYER:
109 |
110 | with tf.variable_scope(op_name, reuse=True):
111 |
112 | # Assign weights/biases to their corresponding tf variable
113 | for data in weights_dict[op_name]:
114 |
115 | # Biases
116 | if len(data.shape) == 1:
117 | var = tf.get_variable('biases', trainable=False)
118 | session.run(var.assign(data))
119 |
120 | # Weights
121 | else:
122 | var = tf.get_variable('weights', trainable=False)
123 | session.run(var.assign(data))
124 |
125 |
126 | def conv(x, filter_height, filter_width, num_filters, stride_y, stride_x, name,
127 | padding='VALID', groups=1, relu = True):
128 | """Create a convolution layer.
129 | Adapted from: https://github.com/ethereon/caffe-tensorflow
130 | """
131 | # Get number of input channels
132 | input_channels = int(x.get_shape()[-1])
133 |
134 | # Create lambda function for the convolution
135 | convolve = lambda i, k: tf.nn.conv2d(i, k,
136 | strides=[1, stride_y, stride_x, 1],
137 | padding=padding)
138 |
139 | with tf.variable_scope(name) as scope:
140 | # Create tf variables for the weights and biases of the conv layer
141 | weights = tf.get_variable('weights', shape=[filter_height,
142 | filter_width,
143 | input_channels/groups,
144 | num_filters])
145 | biases = tf.get_variable('biases', shape=[num_filters])
146 |
147 | if groups == 1:
148 | conv = convolve(x, weights)
149 |
150 | # In the cases of multiple groups, split inputs & weights and
151 | else:
152 | # Split input and weights and convolve them separately
153 | input_groups = tf.split(axis=3, num_or_size_splits=groups, value=x)
154 | weight_groups = tf.split(axis=3, num_or_size_splits=groups,
155 | value=weights)
156 | output_groups = [convolve(i, k) for i, k in zip(input_groups, weight_groups)]
157 |
158 | # Concat the convolved output together again
159 | conv = tf.concat(axis=3, values=output_groups)
160 |
161 | # Add biases
162 | bias = tf.reshape(tf.nn.bias_add(conv, biases), tf.shape(conv))
163 |
164 | # Apply relu function
165 |
166 | if relu:
167 | relu = tf.nn.relu(bias, name=scope.name)
168 |
169 | return relu
170 | else:
171 | return bias
172 |
173 |
174 | def fc(x, num_in, num_out, name, relu=True):
175 | """Create a fully connected layer."""
176 | with tf.variable_scope(name) as scope:
177 |
178 | # Create tf variables for the weights and biases
179 | weights = tf.get_variable('weights', shape=[num_in, num_out],
180 | trainable=True)
181 | biases = tf.get_variable('biases', [num_out], trainable=True)
182 |
183 | # Matrix multiply weights and inputs and add bias
184 | act = tf.nn.xw_plus_b(x, weights, biases, name=scope.name)
185 |
186 | if relu:
187 | # Apply ReLu non linearity
188 | relu = tf.nn.relu(act)
189 | return relu
190 | else:
191 | return act
192 |
193 |
194 | def max_pool(x, filter_height, filter_width, stride_y, stride_x, name,
195 | padding='SAME'):
196 | """Create a max pooling layer."""
197 | return tf.nn.max_pool(x, ksize=[1, filter_height, filter_width, 1],
198 | strides=[1, stride_y, stride_x, 1],
199 | padding=padding, name=name)
200 |
201 |
202 | def lrn(x, radius, alpha, beta, name, bias=1.0):
203 | """Create a local response normalization layer."""
204 | return tf.nn.local_response_normalization(x, depth_radius=radius,
205 | alpha=alpha, beta=beta,
206 | bias=bias, name=name)
207 |
208 |
209 | def dropout(x, keep_prob):
210 | """Create a dropout layer."""
211 | return tf.nn.dropout(x, keep_prob)
212 |
213 |
--------------------------------------------------------------------------------
/models/CNN/resnet.py:
--------------------------------------------------------------------------------
1 | import tensorflow as tf
2 | from tensorflow.contrib.slim.python.slim.nets import resnet_v1
3 | from tensorflow.contrib.framework.python.framework import checkpoint_utils
4 | import cv2
5 |
6 | slim = tf.contrib.slim
7 | resnet_v1 = resnet_v1
8 |
9 | if __name__ == "__main__":
10 | #print ("unitest for resnet")
11 | batch_size = 10
12 | img_size = 256
13 | img = cv2.imread('/mnt/ilcompf8d0/user/weiyuewa/sources/pipeline1/tf_neural_renderer/img.png')
14 |
15 | # with tf.Session('') as sess:
16 |
17 | with tf.device('/gpu:0'):
18 | inputbatch = tf.expand_dims(tf.constant(img, dtype=tf.float32), axis=0)#tf.zeros([batch_size, img_size, img_size, 3])
19 |
20 | logits, endpoints = resnet_v1.resnet_v1_50(inputbatch, 1000, is_training=False)
21 |
22 | config = tf.ConfigProto()
23 | config.gpu_options.allow_growth = True
24 | config.allow_soft_placement = True
25 | config.log_device_placement = False
26 | sess = tf.Session(config=config)
27 | variables_to_restore = []
28 |
29 | a = [name for name, _ in checkpoint_utils.list_variables('pretrained_model/resnet_v1_50.ckpt')]
30 | # print a
31 | for var in slim.get_model_variables():
32 | if (var.op.name.startswith('resnet_v1_50')) and (var.op.name in a) and ('logits' not in var.op.name):
33 | variables_to_restore.append(var)
34 | # print variables_to_restore
35 | # slim.assign_from_checkpoint_fn('pretrained_model/resnet_v1_50.ckpt', variables_to_restore, ignore_missing_vars=False)
36 | init = tf.global_variables_initializer()
37 | sess.run(init)
38 |
39 | saver = tf.train.Saver(variables_to_restore)
40 | saver.restore(sess, 'pretrained_model/resnet_v1_50.ckpt')
41 | # print a.keys()
42 |
43 | cls_val = sess.run(logits)
44 | print cls_val
45 |
46 | # print logits
47 | print endpoints.keys()
--------------------------------------------------------------------------------
/models/posenet.py:
--------------------------------------------------------------------------------
1 | import tensorflow as tf
2 | import os
3 | import sys
4 | BASE_DIR = os.path.dirname(os.path.abspath(__file__))
5 | ROOT_DIR = os.path.dirname(BASE_DIR)
6 | sys.path.append(os.path.join(ROOT_DIR))
7 | sys.path.append(os.path.join(ROOT_DIR,'..'))
8 | sys.path.append(os.path.join(ROOT_DIR, 'models'))
9 | sys.path.append(os.path.join(ROOT_DIR, 'utils'))
10 | import tf_util
11 |
12 | # batch*n
13 | def normalize_vector(v):
14 | batch=v.shape[0]
15 |
16 | v_mag = tf.sqrt(tf.reduce_sum(tf.square(v), axis=1, keepdims=True))
17 | v_mag = tf.maximum(v_mag, 1e-8)
18 | v = v / v_mag
19 | return v
20 |
21 | ######################
22 | def compute_rotation_matrix_from_ortho6d(poses):
23 | x_raw = poses[:,0:3]#batch*3
24 | y_raw = poses[:,3:6]#batch*3
25 | x = normalize_vector(x_raw) #batch*3
26 | z = tf.linalg.cross(x,y_raw) #batch*3
27 | z = normalize_vector(z)#batch*3
28 | y = tf.linalg.cross(z,x) #batch*3
29 | print('x', x.shape, 'y', y.shape, 'z', z.shape)
30 | x = tf.reshape(x, [-1, 3, 1])
31 | y = tf.reshape(y, [-1, 3, 1])
32 | z = tf.reshape(z, [-1, 3, 1])
33 | matrix = tf.concat((x,y,z), 2) #batch*3*3
34 | print('matrix', matrix.shape)
35 |
36 | return matrix
37 |
38 | def compute_geodesic_distance_from_two_matrices(m1, m2):
39 | batch=m1.shape[0]
40 | m = tf.matmul(m1, tf.transpose(m2, [0,2,1])) #batch*3*3
41 | cos = (m[:,0,0] + m[:,1,1] + m[:,2,2] - 1) / 2.
42 | cos = tf.minimum(cos, 1.)
43 | cos = tf.maximum(cos, -1.)
44 |
45 | theta = tf.acos(cos)
46 |
47 | return theta
48 |
49 | #############
50 | def get_cam_mat_shift(globalfeat, is_training, batch_size, bn, bn_decay, wd=None):
51 |
52 | with tf.variable_scope("scale") as scope: #
53 | scale = tf_util.fully_connected(globalfeat, 64, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)
54 | scale = tf_util.fully_connected(scale, 32, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)
55 | scale = tf_util.fully_connected(scale, 1, bn=bn, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)
56 | pred_scale = tf.reshape(scale, [batch_size, 1, 1]) * tf.tile(tf.expand_dims(tf.eye(3), 0), [batch_size, 1, 1])
57 |
58 | with tf.variable_scope("ortho6d") as scope: #
59 | rotation = tf_util.fully_connected(globalfeat, 512, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)
60 | rotation = tf_util.fully_connected(rotation, 256, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)
61 | rotation = tf_util.fully_connected(rotation, 6, bn=bn, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)
62 | pred_rotation = tf.reshape(rotation, [batch_size, 6])
63 |
64 | with tf.variable_scope("translation") as scope:
65 | translation = tf_util.fully_connected(globalfeat, 128, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)
66 | translation = tf_util.fully_connected(translation, 64, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)
67 | # w_trans_init =
68 | weights = tf.get_variable('fc3/weights', [64, 3],
69 | initializer=tf.truncated_normal_initializer(stddev=0.05, seed=1),
70 | dtype=tf.float32)
71 | biases = tf.get_variable('fc3/biases', [3],
72 | initializer=tf.constant_initializer(0.0),
73 | dtype=tf.float32)
74 | translation = tf.matmul(translation, weights)
75 | translation = tf.nn.bias_add(translation, biases)
76 | pred_translation = tf.reshape(translation, [batch_size, 3])
77 | pred_translation += tf.constant([-0.00193892, 0.00169222, 1.3949631], dtype=tf.float32)
78 |
79 | with tf.variable_scope("xyshift") as scope:
80 | pred_xyshift = tf_util.fully_connected(globalfeat, 128, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)
81 | pred_xyshift = tf_util.fully_connected(pred_xyshift, 64, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)
82 | pred_xyshift = tf_util.fully_connected(pred_xyshift, 2, bn=bn, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)
83 | pred_translation = tf.reshape(pred_translation, [batch_size, 1, 3])
84 | pred_rotation_mat = compute_rotation_matrix_from_ortho6d(pred_rotation)
85 | pred_rotation_mat = tf.matmul(pred_scale, pred_rotation_mat)
86 | pred_RT = tf.concat([pred_rotation_mat, pred_translation], axis = 1)
87 | return pred_rotation_mat, pred_translation, pred_RT, pred_xyshift
88 |
89 |
90 | #############
91 | def get_cam_mat(globalfeat, is_training, batch_size, bn, bn_decay, wd=None):
92 |
93 | with tf.variable_scope("scale") as scope: #
94 | scale = tf_util.fully_connected(globalfeat, 64, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)
95 | scale = tf_util.fully_connected(scale, 32, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)
96 | scale = tf_util.fully_connected(scale, 1, bn=bn, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)
97 | pred_scale = tf.reshape(scale, [batch_size, 1, 1]) * tf.tile(tf.expand_dims(tf.eye(3), 0), [batch_size, 1, 1])
98 |
99 | with tf.variable_scope("ortho6d") as scope: #
100 | rotation = tf_util.fully_connected(globalfeat, 512, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)
101 | rotation = tf_util.fully_connected(rotation, 256, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)
102 | rotation = tf_util.fully_connected(rotation, 6, bn=bn, is_training=is_training, scope='fc3', activation_fn=None, bn_decay=bn_decay)
103 | pred_rotation = tf.reshape(rotation, [batch_size, 6])
104 |
105 | with tf.variable_scope("translation") as scope:
106 | translation = tf_util.fully_connected(globalfeat, 128, bn=bn, is_training=is_training, scope='fc1', bn_decay=bn_decay)
107 | translation = tf_util.fully_connected(translation, 64, bn=bn, is_training=is_training, scope='fc2', bn_decay=bn_decay)
108 | # w_trans_init =
109 | weights = tf.get_variable('fc3/weights', [64, 3],
110 | initializer=tf.truncated_normal_initializer(stddev=0.05, seed=1),
111 | dtype=tf.float32)
112 | biases = tf.get_variable('fc3/biases', [3],
113 | initializer=tf.constant_initializer(0.0),
114 | dtype=tf.float32)
115 | translation = tf.matmul(translation, weights)
116 | translation = tf.nn.bias_add(translation, biases)
117 | pred_translation = tf.reshape(translation, [batch_size, 3])
118 | pred_translation += tf.constant([-0.00193892, 0.00169222, 1.3949631], dtype=tf.float32)
119 |
120 | pred_translation = tf.reshape(pred_translation, [batch_size, 1, 3])
121 | pred_rotation_mat = compute_rotation_matrix_from_ortho6d(pred_rotation)
122 | pred_rotation_mat = tf.matmul(pred_scale, pred_rotation_mat)
123 | pred_RT = tf.concat([pred_rotation_mat, pred_translation], axis = 1)
124 | return pred_rotation_mat, pred_translation, pred_RT
125 |
--------------------------------------------------------------------------------
/models/sdfnet.py:
--------------------------------------------------------------------------------
1 | import tensorflow as tf
2 | import tf_util
3 |
4 | def get_sdf_3dcnn(grid_idx, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None, FLAGS=None):
5 |
6 | globalfeats_expand = tf.reshape(globalfeats, [batch_size, 1, 1, 1, -1])
7 | print('globalfeats_expand', globalfeats_expand.get_shape())
8 | net2 = tf_util.conv3d_transpose(globalfeats_expand, 128, [2, 2, 2], stride=[2, 2, 2],
9 | bn_decay=bn_decay, bn=bn,
10 | is_training=is_training, weight_decay=wd, scope='3deconv1') # 2
11 |
12 | net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2],bn_decay=bn_decay, bn=bn,
13 | is_training=is_training, weight_decay=wd, scope='3deconv2') # 4
14 |
15 | net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,
16 | is_training=is_training, weight_decay=wd, scope='3deconv3') # 8
17 |
18 | net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,
19 | is_training=is_training, weight_decay=wd, scope='3deconv4') # 16
20 |
21 | net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,
22 | is_training=is_training, weight_decay=wd, scope='3deconv5') # 32
23 |
24 | net2 = tf_util.conv3d_transpose(net2, 32, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,
25 | is_training=is_training, weight_decay=wd, padding='VALID', scope='3deconv6') # 65
26 |
27 | net2 = tf_util.conv3d(net2, 1, [1, 1, 1], stride=[1, 1, 1], bn_decay=bn_decay, bn=bn, activation_fn=None,
28 | is_training=is_training, weight_decay=wd, padding='VALID', scope='3conv7')
29 | res_plus = FLAGS.sdf_res+1
30 | full_inter = tf.reshape(net2, (batch_size, res_plus, res_plus, res_plus))
31 |
32 | print("3d cnn net2 shape:", full_inter.get_shape())
33 |
34 | pred = tf.reshape(full_inter, [batch_size, -1, 1])
35 | return pred
36 |
37 | def get_sdf_3dcnn_binary(grid_idx, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None, FLAGS=None):
38 | globalfeats_expand = tf.reshape(globalfeats, [batch_size, 1, 1, 1, -1])
39 | print('globalfeats_expand', globalfeats_expand.get_shape())
40 | net2 = tf_util.conv3d_transpose(globalfeats_expand, 128, [2, 2, 2], stride=[2, 2, 2],
41 | bn_decay=bn_decay, bn=bn,
42 | is_training=is_training, weight_decay=wd, scope='3deconv1') # 2
43 |
44 | net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2],bn_decay=bn_decay, bn=bn,
45 | is_training=is_training, weight_decay=wd, scope='3deconv2') # 4
46 |
47 | net2 = tf_util.conv3d_transpose(net2, 128, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,
48 | is_training=is_training, weight_decay=wd, scope='3deconv3') # 8
49 |
50 | net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,
51 | is_training=is_training, weight_decay=wd, scope='3deconv4') # 16
52 |
53 | net2 = tf_util.conv3d_transpose(net2, 64, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,
54 | is_training=is_training, weight_decay=wd, scope='3deconv5') # 32
55 |
56 | net2 = tf_util.conv3d_transpose(net2, 32, [3, 3, 3], stride=[2, 2, 2], bn_decay=bn_decay, bn=bn,
57 | is_training=is_training, weight_decay=wd, padding='VALID', scope='3deconv6') # 65
58 |
59 | net2 = tf_util.conv3d(net2, 2, [1, 1, 1], stride=[1, 1, 1], bn_decay=bn_decay, bn=bn, activation_fn=None,
60 | is_training=is_training, weight_decay=wd, padding='VALID', scope='3conv7_binary')
61 | res_plus = FLAGS.sdf_res+1
62 | full_inter = tf.reshape(net2, (batch_size, res_plus, res_plus, res_plus))
63 |
64 | print("3d cnn net2 shape:", full_inter.get_shape())
65 |
66 | pred = tf.reshape(full_inter, [batch_size, -1, 2])
67 | return pred
68 |
69 | def get_sdf_basic2(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):
70 |
71 | net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
72 | weight_decay=wd, scope='fold1/conv1')
73 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
74 | weight_decay=wd, scope='fold1/conv2')
75 | net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
76 | weight_decay=wd, scope='fold1/conv3')
77 |
78 | globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])
79 | globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])
80 | print( 'net2', net2.shape)
81 | print( 'globalfeats_expand', globalfeats_expand.shape)
82 | concat = tf.concat(axis=3, values=[net2, globalfeats_expand])
83 |
84 | net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
85 | weight_decay=wd, scope='fold2/conv1')
86 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
87 | weight_decay=wd, scope='fold2/conv2')
88 | pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')
89 |
90 | pred = tf.reshape(pred, [batch_size, -1, 1])
91 |
92 | return pred
93 |
94 |
95 | def get_sdf_basic2_binary(src_pc, globalfeats, is_training, batch_size, num_point, bn, bn_decay, wd=None):
96 |
97 | net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
98 | weight_decay=wd, scope='fold1/conv1')
99 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
100 | weight_decay=wd, scope='fold1/conv2')
101 | net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
102 | weight_decay=wd, scope='fold1/conv3')
103 |
104 | globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])
105 | globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])
106 | print( 'net2', net2.shape)
107 | print( 'globalfeats_expand', globalfeats_expand.shape)
108 | concat = tf.concat(axis=3, values=[net2, globalfeats_expand])
109 |
110 | net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
111 | weight_decay=wd, scope='fold2/conv1')
112 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
113 | weight_decay=wd, scope='fold2/conv2')
114 | pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')
115 |
116 | pred = tf.reshape(pred, [batch_size, -1, 2])
117 |
118 | return pred
119 |
120 |
121 | def get_sdf_basic2_imgfeat_onestream(src_pc, globalfeats, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):
122 |
123 | net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
124 | weight_decay=wd, scope='fold1/conv1')
125 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
126 | weight_decay=wd, scope='fold1/conv2')
127 | net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
128 | weight_decay=wd, scope='fold1/conv3')
129 |
130 | globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])
131 | globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])
132 | print('net2', net2.shape)
133 | print('globalfeats_expand', globalfeats_expand.shape)
134 | concat = tf.concat(axis=3, values=[net2, globalfeats_expand, point_feat])
135 |
136 | net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
137 | weight_decay=wd, scope='fold2/conv1')
138 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
139 | weight_decay=wd, scope='fold2/conv2')
140 | pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')
141 |
142 | pred = tf.reshape(pred, [batch_size, -1, 1])
143 |
144 | return pred
145 |
146 | def get_sdf_basic2_imgfeat_onestream_binary(src_pc, globalfeats, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):
147 |
148 | net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
149 | weight_decay=wd, scope='fold1/conv1')
150 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
151 | weight_decay=wd, scope='fold1/conv2')
152 | net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
153 | weight_decay=wd, scope='fold1/conv3')
154 |
155 | globalfeats = tf.reshape(globalfeats, [batch_size, 1, 1, -1])
156 | globalfeats_expand = tf.tile(globalfeats, [1, src_pc.get_shape()[1], 1, 1])
157 | print('net2', net2.shape)
158 | print('globalfeats_expand', globalfeats_expand.shape)
159 | concat = tf.concat(axis=3, values=[net2, globalfeats_expand, point_feat])
160 |
161 | net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
162 | weight_decay=wd, scope='fold2/conv1')
163 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
164 | weight_decay=wd, scope='fold2/conv2')
165 | pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')
166 |
167 | pred = tf.reshape(pred, [batch_size, -1, 2])
168 |
169 | return pred
170 |
171 | def get_sdf_basic2_imgfeat_twostream(src_pc, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):
172 |
173 | net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
174 | weight_decay=wd, scope='fold1/conv1')
175 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
176 | weight_decay=wd, scope='fold1/conv2')
177 | net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
178 | weight_decay=wd, scope='fold1/conv3')
179 |
180 | concat = tf.concat(axis=3, values=[net2, point_feat])
181 |
182 | net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
183 | weight_decay=wd, scope='fold2/conv1')
184 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
185 | weight_decay=wd, scope='fold2/conv2')
186 | pred = tf_util.conv2d(net2, 1, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5')
187 |
188 | pred = tf.reshape(pred, [batch_size, -1, 1])
189 |
190 | return pred
191 |
192 | def get_sdf_basic2_imgfeat_twostream_binary(src_pc, point_feat, is_training, batch_size, num_point, bn, bn_decay, wd=None):
193 |
194 | net2 = tf_util.conv2d(tf.expand_dims(src_pc,2), 64, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
195 | weight_decay=wd, scope='fold1/conv1')
196 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
197 | weight_decay=wd, scope='fold1/conv2')
198 | net2 = tf_util.conv2d(net2, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
199 | weight_decay=wd, scope='fold1/conv3')
200 |
201 | concat = tf.concat(axis=3, values=[net2, point_feat])
202 |
203 | net2 = tf_util.conv2d(concat, 512, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
204 | weight_decay=wd, scope='fold2/conv1')
205 | net2 = tf_util.conv2d(net2, 256, [1,1], padding='VALID', stride=[1,1], bn_decay=bn_decay, bn=bn, is_training=is_training,
206 | weight_decay=wd, scope='fold2/conv2')
207 | pred = tf_util.conv2d(net2, 2, [1,1], padding='VALID', stride=[1,1], activation_fn=None, bn=False, weight_decay=wd, scope='fold2/conv5_bi')
208 |
209 | pred = tf.reshape(pred, [batch_size, -1, 2])
210 |
211 | return pred
212 |
--------------------------------------------------------------------------------
/models/tf_ops/approxmatch/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/models/tf_ops/approxmatch/__init__.py
--------------------------------------------------------------------------------
/models/tf_ops/approxmatch/tf_approxmatch.py:
--------------------------------------------------------------------------------
1 | """ Approxmiate algorithm for computing the Earch Mover's Distance.
2 |
3 | Original author: Haoqiang Fan
4 | Modified by Charles R. Qi
5 | """
6 |
7 | import tensorflow as tf
8 | from tensorflow.python.framework import ops
9 | import sys
10 | import os
11 | BASE_DIR = os.path.dirname(os.path.abspath(__file__))
12 | approxmatch_module=tf.load_op_library(os.path.join(BASE_DIR, 'tf_approxmatch_so.so'))
13 | def approx_match(xyz1,xyz2):
14 | '''
15 | input:
16 | xyz1 : batch_size * #dataset_points * 3
17 | xyz2 : batch_size * #query_points * 3
18 | returns:
19 | match : batch_size * #query_points * #dataset_points
20 | '''
21 | return approxmatch_module.approx_match(xyz1,xyz2)
22 | ops.NoGradient('ApproxMatch')
23 | #@tf.RegisterShape('ApproxMatch')
24 | #def _approx_match_shape(op):
25 | # shape1=op.inputs[0].get_shape().with_rank(3)
26 | # shape2=op.inputs[1].get_shape().with_rank(3)
27 | # return [tf.TensorShape([shape1.dims[0],shape2.dims[1],shape1.dims[1]])]
28 |
29 | def match_cost(xyz1,xyz2,match):
30 | '''
31 | input:
32 | xyz1 : batch_size * #dataset_points * 3
33 | xyz2 : batch_size * #query_points * 3
34 | match : batch_size * #query_points * #dataset_points
35 | returns:
36 | cost : batch_size
37 | '''
38 | return approxmatch_module.match_cost(xyz1,xyz2,match)
39 | #@tf.RegisterShape('MatchCost')
40 | #def _match_cost_shape(op):
41 | # shape1=op.inputs[0].get_shape().with_rank(3)
42 | # shape2=op.inputs[1].get_shape().with_rank(3)
43 | # shape3=op.inputs[2].get_shape().with_rank(3)
44 | # return [tf.TensorShape([shape1.dims[0]])]
45 | @tf.RegisterGradient('MatchCost')
46 | def _match_cost_grad(op,grad_cost):
47 | xyz1=op.inputs[0]
48 | xyz2=op.inputs[1]
49 | match=op.inputs[2]
50 | grad_1,grad_2=approxmatch_module.match_cost_grad(xyz1,xyz2,match)
51 | return [grad_1*tf.expand_dims(tf.expand_dims(grad_cost,1),2),grad_2*tf.expand_dims(tf.expand_dims(grad_cost,1),2),None]
52 |
53 | if __name__=='__main__':
54 | alpha=0.5
55 | beta=2.0
56 | import numpy as np
57 | import math
58 | import random
59 | import cv2
60 |
61 |
62 | npoint=100
63 |
64 | pt_in=tf.placeholder(tf.float32,shape=(1,npoint*4,3))
65 | mypoints=tf.Variable(np.random.randn(1,npoint,3).astype('float32'))
66 | match=approx_match(pt_in,mypoints)
67 | loss=tf.reduce_sum(match_cost(pt_in,mypoints,match))
68 | #match=approx_match(mypoints,pt_in)
69 | #loss=tf.reduce_sum(match_cost(mypoints,pt_in,match))
70 | #loss=tf.reduce_sum((distf+1e-9)**0.5)*0.5+tf.reduce_sum((distb+1e-9)**0.5)*0.5
71 | #loss=tf.reduce_max((distf+1e-9)**0.5)*0.5*npoint+tf.reduce_max((distb+1e-9)**0.5)*0.5*npoint
72 |
73 | optimizer=tf.train.GradientDescentOptimizer(1e-4).minimize(loss)
74 |
75 | with tf.Session('') as sess:
76 | sess.run(tf.initialize_all_variables())
77 | while True:
78 | meanloss=0
79 | meantrueloss=0
80 | for i in xrange(1001):
81 | #phi=np.random.rand(4*npoint)*math.pi*2
82 | #tpoints=(np.hstack([np.cos(phi)[:,None],np.sin(phi)[:,None],(phi*0)[:,None]])*random.random())[None,:,:]
83 | #tpoints=((np.random.rand(400)-0.5)[:,None]*[0,2,0]+[(random.random()-0.5)*2,0,0]).astype('float32')[None,:,:]
84 | tpoints=np.hstack([np.linspace(-1,1,400)[:,None],(random.random()*2*np.linspace(1,0,400)**2)[:,None],np.zeros((400,1))])[None,:,:]
85 | trainloss,_=sess.run([loss,optimizer],feed_dict={pt_in:tpoints.astype('float32')})
86 | trainloss,trainmatch=sess.run([loss,match],feed_dict={pt_in:tpoints.astype('float32')})
87 | #trainmatch=trainmatch.transpose((0,2,1))
88 | show=np.zeros((400,400,3),dtype='uint8')^255
89 | trainmypoints=sess.run(mypoints)
90 | for i in xrange(len(tpoints[0])):
91 | u=np.random.choice(range(len(trainmypoints[0])),p=trainmatch[0].T[i])
92 | # cv2.line(show,
93 | # (int(tpoints[0][i,1]*100+200),int(tpoints[0][i,0]*100+200)),
94 | # (int(trainmypoints[0][u,1]*100+200),int(trainmypoints[0][u,0]*100+200)))
95 | # for x,y,z in tpoints[0]:
96 | # cv2.circle(show,(int(y*100+200),int(x*100+200)),2)
97 | # for x,y,z in trainmypoints[0]:
98 | # cv2.circle(show,(int(y*100+200),int(x*100+200)),3)
99 | cost=((tpoints[0][:,None,:]-np.repeat(trainmypoints[0][None,:,:],4,axis=1))**2).sum(axis=2)**0.5
100 | print (trainloss,np.mean(cost))
101 | cv2.imshow('show',show)
102 | cmd=cv2.waitKey(10)%256
103 | if cmd==ord('q'):
104 | break
105 |
--------------------------------------------------------------------------------
/models/tf_ops/approxmatch/tf_approxmatch_compile.sh:
--------------------------------------------------------------------------------
1 | #/bin/bash
2 | /usr/local/cuda/bin/nvcc tf_approxmatch_g.cu -o tf_approxmatch_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
3 | g++ -std=c++11 tf_approxmatch.cpp tf_approxmatch_g.cu.o -o tf_approxmatch_so.so -shared -fPIC -I /home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow/include -I /usr/local/cuda/include -I /home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow/include/external/nsync/public -lcudart -L /usr/local/cuda/lib64/ -L//home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 # -D_GLIBCXX_USE_CXX11_ABI=0
4 |
--------------------------------------------------------------------------------
/models/tf_ops/approxmatch/tf_approxmatch_g.cu:
--------------------------------------------------------------------------------
1 | __global__ void approxmatch(int b,int n,int m,const float * __restrict__ xyz1,const float * __restrict__ xyz2,float * __restrict__ match,float * temp){
2 | float * remainL=temp+blockIdx.x*(n+m)*2, * remainR=temp+blockIdx.x*(n+m)*2+n,*ratioL=temp+blockIdx.x*(n+m)*2+n+m,*ratioR=temp+blockIdx.x*(n+m)*2+n+m+n;
3 | float multiL,multiR;
4 | if (n>=m){
5 | multiL=1;
6 | multiR=n/m;
7 | }else{
8 | multiL=m/n;
9 | multiR=1;
10 | }
11 | const int Block=1024;
12 | __shared__ float buf[Block*4];
13 | for (int i=blockIdx.x;i=-2;j--){
22 | float level=-powf(4.0f,j);
23 | if (j==-2){
24 | level=0;
25 | }
26 | for (int k0=0;k0>>(b,n,m,xyz1,xyz2,match,temp);
182 | }
183 | __global__ void matchcost(int b,int n,int m,const float * __restrict__ xyz1,const float * __restrict__ xyz2,const float * __restrict__ match,float * __restrict__ out){
184 | __shared__ float allsum[512];
185 | const int Block=1024;
186 | __shared__ float buf[Block*3];
187 | for (int i=blockIdx.x;i>>(b,n,m,xyz1,xyz2,match,out);
228 | }
229 | __global__ void matchcostgrad2(int b,int n,int m,const float * __restrict__ xyz1,const float * __restrict__ xyz2,const float * __restrict__ match,float * __restrict__ grad2){
230 | __shared__ float sum_grad[256*3];
231 | for (int i=blockIdx.x;i>>(b,n,m,xyz1,xyz2,match,grad1);
294 | matchcostgrad2<<>>(b,n,m,xyz1,xyz2,match,grad2);
295 | }
296 |
297 |
--------------------------------------------------------------------------------
/models/tf_ops/approxmatch/tf_approxmatch_so.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/models/tf_ops/approxmatch/tf_approxmatch_so.so
--------------------------------------------------------------------------------
/models/tf_ops/nn_distance/README.md:
--------------------------------------------------------------------------------
1 | From https://github.com/fanhqme/PointSetGeneration/tree/master/depthestimate
2 |
--------------------------------------------------------------------------------
/models/tf_ops/nn_distance/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/models/tf_ops/nn_distance/__init__.py
--------------------------------------------------------------------------------
/models/tf_ops/nn_distance/tf_nndistance.py:
--------------------------------------------------------------------------------
1 | """ Compute Chamfer's Distance.
2 |
3 | Original author: Haoqiang Fan.
4 | Modified by Charles R. Qi
5 | """
6 |
7 | import tensorflow as tf
8 | from tensorflow.python.framework import ops
9 | import sys
10 | import os
11 | BASE_DIR = os.path.dirname(os.path.abspath(__file__))
12 | nn_distance_module=tf.load_op_library(os.path.join(BASE_DIR, 'tf_nndistance_so.so'))
13 |
14 | def nn_distance(xyz1,xyz2):
15 | '''
16 | Computes the distance of nearest neighbors for a pair of point clouds
17 | input: xyz1: (batch_size,#points_1,3) the first point cloud
18 | input: xyz2: (batch_size,#points_2,3) the second point cloud
19 | output: dist1: (batch_size,#point_1) distance from first to second
20 | output: idx1: (batch_size,#point_1) nearest neighbor from first to second
21 | output: dist2: (batch_size,#point_2) distance from second to first
22 | output: idx2: (batch_size,#point_2) nearest neighbor from second to first
23 | '''
24 | return nn_distance_module.nn_distance(xyz1,xyz2)
25 | #@tf.RegisterShape('NnDistance')
26 | #def _nn_distance_shape(op):
27 | #shape1=op.inputs[0].get_shape().with_rank(3)
28 | #shape2=op.inputs[1].get_shape().with_rank(3)
29 | #return [tf.TensorShape([shape1.dims[0],shape1.dims[1]]),tf.TensorShape([shape1.dims[0],shape1.dims[1]]),
30 | #tf.TensorShape([shape2.dims[0],shape2.dims[1]]),tf.TensorShape([shape2.dims[0],shape2.dims[1]])]
31 | @ops.RegisterGradient('NnDistance')
32 | def _nn_distance_grad(op,grad_dist1,grad_idx1,grad_dist2,grad_idx2):
33 | xyz1=op.inputs[0]
34 | xyz2=op.inputs[1]
35 | idx1=op.outputs[1]
36 | idx2=op.outputs[3]
37 | return nn_distance_module.nn_distance_grad(xyz1,xyz2,grad_dist1,idx1,grad_dist2,idx2)
38 |
39 |
40 | if __name__=='__main__':
41 | import numpy as np
42 | import random
43 | import time
44 | from tensorflow.python.ops.gradient_checker import compute_gradient
45 | random.seed(100)
46 | np.random.seed(100)
47 | with tf.Session('') as sess:
48 | xyz1=np.random.randn(32,16384,3).astype('float32')
49 | xyz2=np.random.randn(32,1024,3).astype('float32')
50 | #with tf.device('/gpu:0'):
51 | if True:
52 | inp1=tf.Variable(xyz1)
53 | inp2=tf.constant(xyz2)
54 | reta,retb,retc,retd=nn_distance(inp1,inp2)
55 | loss=tf.reduce_sum(reta)+tf.reduce_sum(retc)
56 | train=tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss)
57 | sess.run(tf.initialize_all_variables())
58 | t0=time.time()
59 | t1=t0
60 | best=1e100
61 | for i in xrange(100):
62 | trainloss,_=sess.run([loss,train])
63 | newt=time.time()
64 | best=min(best,newt-t1)
65 | print (i,trainloss,(newt-t0)/(i+1),best)
66 | t1=newt
67 | #print sess.run([inp1,retb,inp2,retd])
68 | #grads=compute_gradient([inp1,inp2],[(16,32,3),(16,32,3)],loss,(1,),[xyz1,xyz2])
69 | #for i,j in grads:
70 | #print i.shape,j.shape,np.mean(np.abs(i-j)),np.mean(np.abs(i)),np.mean(np.abs(j))
71 | #for i in xrange(10):
72 | #t0=time.time()
73 | #a,b,c,d=sess.run([reta,retb,retc,retd],feed_dict={inp1:xyz1,inp2:xyz2})
74 | #print 'time',time.time()-t0
75 | #print a.shape,b.shape,c.shape,d.shape
76 | #print a.dtype,b.dtype,c.dtype,d.dtype
77 | #samples=np.array(random.sample(range(xyz2.shape[1]),100),dtype='int32')
78 | #dist1=((xyz1[:,samples,None,:]-xyz2[:,None,:,:])**2).sum(axis=-1).min(axis=-1)
79 | #idx1=((xyz1[:,samples,None,:]-xyz2[:,None,:,:])**2).sum(axis=-1).argmin(axis=-1)
80 | #print np.abs(dist1-a[:,samples]).max()
81 | #print np.abs(idx1-b[:,samples]).max()
82 | #dist2=((xyz2[:,samples,None,:]-xyz1[:,None,:,:])**2).sum(axis=-1).min(axis=-1)
83 | #idx2=((xyz2[:,samples,None,:]-xyz1[:,None,:,:])**2).sum(axis=-1).argmin(axis=-1)
84 | #print np.abs(dist2-c[:,samples]).max()
85 | #print np.abs(idx2-d[:,samples]).max()
86 |
87 |
88 |
--------------------------------------------------------------------------------
/models/tf_ops/nn_distance/tf_nndistance_compile.sh:
--------------------------------------------------------------------------------
1 | /usr/local/cuda/bin/nvcc tf_nndistance_g.cu -o tf_nndistance_g.cu.o -c -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC
2 | g++ -std=c++11 tf_nndistance.cpp tf_nndistance_g.cu.o -o tf_nndistance_so.so -shared -fPIC -I /home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow/include -I /usr/local/cuda/include -I /home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow/include//external/nsync/public -lcudart -L /usr/local/cuda/lib64/ -L/home/xharlie/anaconda3/envs/tf110/lib/python3.6/site-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=0
3 |
--------------------------------------------------------------------------------
/models/tf_ops/nn_distance/tf_nndistance_cpu.py:
--------------------------------------------------------------------------------
1 | import tensorflow as tf
2 | import numpy as np
3 |
4 | def nn_distance_cpu(pc1, pc2):
5 | '''
6 | Input:
7 | pc1: float TF tensor in shape (B,N,C) the first point cloud
8 | pc2: float TF tensor in shape (B,M,C) the second point cloud
9 | Output:
10 | dist1: float TF tensor in shape (B,N) distance from first to second
11 | idx1: int32 TF tensor in shape (B,N) nearest neighbor from first to second
12 | dist2: float TF tensor in shape (B,M) distance from second to first
13 | idx2: int32 TF tensor in shape (B,M) nearest neighbor from second to first
14 | '''
15 | N = pc1.get_shape()[1].value
16 | M = pc2.get_shape()[1].value
17 | pc1_expand_tile = tf.tile(tf.expand_dims(pc1,2), [1,1,M,1])
18 | pc2_expand_tile = tf.tile(tf.expand_dims(pc2,1), [1,N,1,1])
19 | pc_diff = pc1_expand_tile - pc2_expand_tile # B,N,M,C
20 | pc_dist = tf.reduce_sum(pc_diff ** 2, axis=-1) # B,N,M
21 | dist1 = tf.reduce_min(pc_dist, axis=2) # B,N
22 | idx1 = tf.argmin(pc_dist, axis=2) # B,N
23 | dist2 = tf.reduce_min(pc_dist, axis=1) # B,M
24 | idx2 = tf.argmin(pc_dist, axis=1) # B,M
25 | return dist1, idx1, dist2, idx2
26 |
27 |
28 | def verify_nn_distance_cup():
29 | np.random.seed(0)
30 | sess = tf.Session()
31 | pc1arr = np.random.random((1,5,3))
32 | pc2arr = np.random.random((1,6,3))
33 | pc1 = tf.constant(pc1arr)
34 | pc2 = tf.constant(pc2arr)
35 | dist1, idx1, dist2, idx2 = nn_distance_cpu(pc1, pc2)
36 | print(sess.run(dist1))
37 | print(sess.run(idx1))
38 | print(sess.run(dist2))
39 | print(sess.run(idx2))
40 |
41 | dist = np.zeros((5,6))
42 | for i in range(5):
43 | for j in range(6):
44 | dist[i,j] = np.sum((pc1arr[0,i,:] - pc2arr[0,j,:]) ** 2)
45 | print(dist)
46 |
47 | if __name__ == '__main__':
48 | verify_nn_distance_cup()
49 |
--------------------------------------------------------------------------------
/models/tf_ops/nn_distance/tf_nndistance_g.cu:
--------------------------------------------------------------------------------
1 | #if GOOGLE_CUDA
2 | #define EIGEN_USE_GPU
3 | //#include "third_party/eigen3/unsupported/Eigen/CXX11/Tensor"
4 |
5 | __global__ void NmDistanceKernel(int b,int n,const float * xyz,int m,const float * xyz2,float * result,int * result_i){
6 | const int batch=512;
7 | __shared__ float buf[batch*3];
8 | for (int i=blockIdx.x;ibest){
120 | result[(i*n+j)]=best;
121 | result_i[(i*n+j)]=best_i;
122 | }
123 | }
124 | __syncthreads();
125 | }
126 | }
127 | }
128 | void NmDistanceKernelLauncher(int b,int n,const float * xyz,int m,const float * xyz2,float * result,int * result_i,float * result2,int * result2_i){
129 | NmDistanceKernel<<>>(b,n,xyz,m,xyz2,result,result_i);
130 | NmDistanceKernel<<>>(b,m,xyz2,n,xyz,result2,result2_i);
131 | }
132 | __global__ void NmDistanceGradKernel(int b,int n,const float * xyz1,int m,const float * xyz2,const float * grad_dist1,const int * idx1,float * grad_xyz1,float * grad_xyz2){
133 | for (int i=blockIdx.x;i>>(b,n,xyz1,m,xyz2,grad_dist1,idx1,grad_xyz1,grad_xyz2);
156 | NmDistanceGradKernel<<>>(b,m,xyz2,n,xyz1,grad_dist2,idx2,grad_xyz2,grad_xyz1);
157 | }
158 |
159 | #endif
160 |
161 |
--------------------------------------------------------------------------------
/models/tf_ops/nn_distance/tf_nndistance_so.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/models/tf_ops/nn_distance/tf_nndistance_so.so
--------------------------------------------------------------------------------
/postprocessing/clean_smallparts.py:
--------------------------------------------------------------------------------
1 | import argparse
2 | import numpy as np
3 | import tensorflow as tf
4 | import pymesh
5 | import os
6 | import sys
7 | from joblib import Parallel, delayed
8 | BASE_DIR = os.path.dirname(os.path.abspath(__file__))
9 | sys.path.append(BASE_DIR) # model
10 | sys.path.append(os.path.join(BASE_DIR, 'models'))
11 | sys.path.append(os.path.join(BASE_DIR, 'data'))
12 | sys.path.append(os.path.join(BASE_DIR, 'utils'))
13 | sys.path.append(os.path.join(BASE_DIR, 'preprocessing'))
14 | slim = tf.contrib.slim
15 |
16 |
17 |
18 | parser = argparse.ArgumentParser()
19 | parser.add_argument('--src_dir', type=str, default="", help='src directory, before clean')
20 | parser.add_argument('--tar_dir', type=str, default="", help='where to store')
21 | parser.add_argument('--thread_n', type=int, default=10, help='parallelism')
22 |
23 | FLAGS = parser.parse_args()
24 | print('pid: %s'%(str(os.getpid())))
25 | print(FLAGS)
26 |
27 | def separate_single_mesh(src_mesh, tar_mesh):
28 | src_mesh = pymesh.load_mesh(src_mesh)
29 | dis_meshes = pymesh.separate_mesh(src_mesh, connectivity_type='auto')
30 | pymesh.save_mesh_raw(tar_mesh+".obj", src_mesh.vertices, src_mesh.faces)
31 | count=0
32 | for dis_mesh in dis_meshes:
33 | print("dis_mesh.vertices.shape",dis_mesh.vertices.shape)
34 | print("dis_mesh.faces.shape",dis_mesh.faces.shape)
35 | pymesh.save_mesh_raw(tar_mesh+"_"+str(count)+".obj", dis_mesh.vertices, dis_mesh.faces)
36 | count+=1
37 |
38 | def clean_single_mesh(src_mesh, tar_mesh, dist_thresh, num_thresh):
39 | src_mesh_obj = pymesh.load_mesh(src_mesh)
40 | dis_meshes = pymesh.separate_mesh(src_mesh_obj, connectivity_type='auto')
41 | max_mesh_verts = 0
42 | for dis_mesh in dis_meshes:
43 | if dis_mesh.vertices.shape[0] > max_mesh_verts:
44 | max_mesh_verts = dis_mesh.vertices.shape[0]
45 |
46 | collection=[]
47 | for dis_mesh in dis_meshes:
48 | if dis_mesh.vertices.shape[0] > max_mesh_verts*num_thresh:
49 | centroid = np.mean(dis_mesh.vertices, axis=0)
50 | if np.sqrt(np.sum(np.square(centroid))) < dist_thresh:
51 | collection.append(dis_mesh)
52 | tar_mesh_obj = pymesh.merge_meshes(collection)
53 | pymesh.save_mesh_raw(tar_mesh, tar_mesh_obj.vertices, tar_mesh_obj.faces)
54 | print("threshes:", str(dist_thresh), str(num_thresh), " clean: ", src_mesh, " create: ",tar_mesh)
55 |
56 | def clean_meshes(cats, src_dir, tar_dir,dist_thresh=0.5, num_thresh=0.3, thread_n=12):
57 | for cat_nm, cat_id in cats.items():
58 | src_cat_dir=os.path.join(src_dir,cat_id)
59 | tar_cat_dir=os.path.join(tar_dir,cat_id)
60 | os.makedirs(tar_cat_dir, exist_ok=True)
61 | _,_,src_file_lst, tar_file_lst = build_file_dict(src_cat_dir, tar_cat_dir)
62 | dist_thresh_lst=[dist_thresh for i in range(len(src_file_lst))]
63 | num_thresh_lst=[num_thresh for i in range(len(src_file_lst))]
64 | with Parallel(n_jobs=thread_n) as parallel:
65 | parallel(delayed(clean_single_mesh)
66 | (src_mesh, tar_mesh, dist_thresh, num_thresh)
67 | for src_mesh, tar_mesh, dist_thresh, num_thresh in
68 | zip(src_file_lst, tar_file_lst, dist_thresh_lst,num_thresh_lst))
69 | print("done with ", cat_nm, cat_id)
70 | print("done!")
71 |
72 | def build_file_dict(src_dir, tar_dir):
73 | src_file_dict = {}
74 | tar_file_dict = {}
75 | src_file_lst=[]
76 | tar_file_lst=[]
77 | for file in os.listdir(src_dir):
78 | src_full_path = os.path.join(src_dir, file)
79 | tar_full_path = os.path.join(tar_dir, file)
80 | if os.path.isfile(src_full_path):
81 | obj_id = file.split("_")[1]
82 | if obj_id in src_file_dict.keys():
83 | src_file_dict[obj_id].append(src_full_path)
84 | else:
85 | src_file_dict[obj_id] = [src_full_path]
86 | src_file_lst.append(src_full_path)
87 | if obj_id in tar_file_dict.keys():
88 | tar_file_dict[obj_id].append(tar_full_path)
89 | else:
90 | tar_file_dict[obj_id] = [tar_full_path]
91 | tar_file_lst.append(tar_full_path)
92 |
93 | return src_file_dict, tar_file_dict,src_file_lst,tar_file_lst
94 |
95 |
96 | if __name__ == "__main__":
97 |
98 |
99 | cats = {
100 | # "chair": "03001627",
101 | # "bench": "02828884",
102 | # "car": "02958343",
103 | # "airplane": "02691156",
104 | # "sofa": "04256520",
105 | # "table": "04379243",
106 | # "phone": "04401088",
107 | "cabinet": "02933112",
108 | "display": "03211117",
109 | # "lamp": "03636649",
110 | "speaker": "03691459",
111 | "rifle": "04090263",
112 | "watercraft": "04530566"
113 | }
114 | # src_dir = "checkpoint/all_best/sdf_2d_sdfproj_twostream_wd_2048_weight10_ftprev_inweight/test_objs/65_0.0"
115 | # tar_dir = "checkpoint/all_best/sdf_2d_sdfproj_twostream_wd_2048_weight10_ftprev_inweight/test_objs/65_0.0_sep"
116 | clean_meshes(cats, FLAGS.src_dir, FLAGS.tar_dir, dist_thresh=0.5, num_thresh=0.3, thread_n=FLAGS.thread_n)
117 |
118 |
--------------------------------------------------------------------------------
/preprocessing/create_file_lst.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os
3 | CUR_PATH = os.path.dirname(os.path.realpath(__file__))
4 |
5 | def get_all_info():
6 | with open(CUR_PATH+'/info.json') as json_file:
7 | data = json.load(json_file)
8 | lst_dir, cats, all_cats, raw_dirs = data["lst_dir"], data['cats'], data['all_cats'], data["raw_dirs_v1"]
9 | return lst_dir, cats, all_cats, raw_dirs
10 |
11 | if __name__ == "__main__":
12 |
13 | # nohup python -u create_file_lst.py &> create_imgh5.log &
14 |
15 | lst_dir, cats, all_cats, raw_dirs = get_all_info()
16 |
--------------------------------------------------------------------------------
/preprocessing/create_img_h5.py:
--------------------------------------------------------------------------------
1 | import h5py
2 | import os
3 | import numpy as np
4 | CUR_PATH = os.path.dirname(os.path.realpath(__file__))
5 | import cv2
6 | import trimesh
7 | import create_file_lst
8 | from joblib import Parallel, delayed
9 |
10 | rot90y = np.array([[0, 0, -1],
11 | [0, 1, 0],
12 | [1, 0, 0]], dtype=np.float32)
13 |
14 | def getBlenderProj(az, el, distance_ratio, img_w=137, img_h=137):
15 | """Calculate 4x3 3D to 2D projection matrix given viewpoint parameters."""
16 | F_MM = 35. # Focal length
17 | SENSOR_SIZE_MM = 32.
18 | PIXEL_ASPECT_RATIO = 1. # pixel_aspect_x / pixel_aspect_y
19 | RESOLUTION_PCT = 100.
20 | SKEW = 0.
21 | CAM_MAX_DIST = 1.75
22 | CAM_ROT = np.asarray([[1.910685676922942e-15, 4.371138828673793e-08, 1.0],
23 | [1.0, -4.371138828673793e-08, -0.0],
24 | [4.371138828673793e-08, 1.0, -4.371138828673793e-08]])
25 |
26 | # Calculate intrinsic matrix.
27 | # 2 atan(35 / 2*32)
28 | scale = RESOLUTION_PCT / 100
29 | # print('scale', scale)
30 | f_u = F_MM * img_w * scale / SENSOR_SIZE_MM
31 | f_v = F_MM * img_h * scale * PIXEL_ASPECT_RATIO / SENSOR_SIZE_MM
32 | # print('f_u', f_u, 'f_v', f_v)
33 | u_0 = img_w * scale / 2
34 | v_0 = img_h * scale / 2
35 | K = np.matrix(((f_u, SKEW, u_0), (0, f_v, v_0), (0, 0, 1)))
36 |
37 | # Calculate rotation and translation matrices.
38 | # Step 1: World coordinate to object coordinate.
39 | sa = np.sin(np.radians(-az))
40 | ca = np.cos(np.radians(-az))
41 | se = np.sin(np.radians(-el))
42 | ce = np.cos(np.radians(-el))
43 | R_world2obj = np.transpose(np.matrix(((ca * ce, -sa, ca * se),
44 | (sa * ce, ca, sa * se),
45 | (-se, 0, ce))))
46 |
47 | # Step 2: Object coordinate to camera coordinate.
48 | R_obj2cam = np.transpose(np.matrix(CAM_ROT))
49 | R_world2cam = R_obj2cam * R_world2obj
50 | cam_location = np.transpose(np.matrix((distance_ratio * CAM_MAX_DIST,
51 | 0,
52 | 0)))
53 | # print('distance', distance_ratio * CAM_MAX_DIST)
54 | T_world2cam = -1 * R_obj2cam * cam_location
55 |
56 | # Step 3: Fix blender camera's y and z axis direction.
57 | R_camfix = np.matrix(((1, 0, 0), (0, -1, 0), (0, 0, -1)))
58 | R_world2cam = R_camfix * R_world2cam
59 | T_world2cam = R_camfix * T_world2cam
60 |
61 | RT = np.hstack((R_world2cam, T_world2cam))
62 |
63 | return K, RT
64 |
65 | def get_rotate_matrix(rotation_angle1):
66 | cosval = np.cos(rotation_angle1)
67 | sinval = np.sin(rotation_angle1)
68 |
69 | rotation_matrix_x = np.array([[1, 0, 0, 0],
70 | [0, cosval, -sinval, 0],
71 | [0, sinval, cosval, 0],
72 | [0, 0, 0, 1]])
73 | rotation_matrix_y = np.array([[cosval, 0, sinval, 0],
74 | [0, 1, 0, 0],
75 | [-sinval, 0, cosval, 0],
76 | [0, 0, 0, 1]])
77 | rotation_matrix_z = np.array([[cosval, -sinval, 0, 0],
78 | [sinval, cosval, 0, 0],
79 | [0, 0, 1, 0],
80 | [0, 0, 0, 1]])
81 | scale_y_neg = np.array([
82 | [1, 0, 0, 0],
83 | [0, -1, 0, 0],
84 | [0, 0, 1, 0],
85 | [0, 0, 0, 1]
86 | ])
87 |
88 | neg = np.array([
89 | [-1, 0, 0, 0],
90 | [0, -1, 0, 0],
91 | [0, 0, -1, 0],
92 | [0, 0, 0, 1]
93 | ])
94 | # y,z swap = x rotate -90, scale y -1
95 | # new_pts0[:, 1] = new_pts[:, 2]
96 | # new_pts0[:, 2] = new_pts[:, 1]
97 | #
98 | # x y swap + negative = z rotate -90, scale y -1
99 | # new_pts0[:, 0] = - new_pts0[:, 1] = - new_pts[:, 2]
100 | # new_pts0[:, 1] = - new_pts[:, 0]
101 |
102 | # return np.linalg.multi_dot([rotation_matrix_z, rotation_matrix_y, rotation_matrix_y, scale_y_neg, rotation_matrix_z, scale_y_neg, rotation_matrix_x])
103 | return np.linalg.multi_dot([neg, rotation_matrix_z, rotation_matrix_z, scale_y_neg, rotation_matrix_x])
104 |
105 |
106 | def get_norm_matrix(sdf_h5_file):
107 | with h5py.File(sdf_h5_file, 'r') as h5_f:
108 | norm_params = h5_f['norm_params'][:]
109 | center, m, = norm_params[:3], norm_params[3]
110 | x,y,z = center[0], center[1], center[2]
111 | M_inv = np.asarray(
112 | [[m, 0., 0., 0.],
113 | [0., m, 0., 0.],
114 | [0., 0., m, 0.],
115 | [0., 0., 0., 1.]]
116 | )
117 | T_inv = np.asarray(
118 | [[1.0 , 0., 0., x],
119 | [0., 1.0 , 0., y],
120 | [0., 0., 1.0 , z],
121 | [0., 0., 0., 1.]]
122 | )
123 | return np.matmul(T_inv, M_inv)
124 |
125 |
126 | def convert_img2h5(source_dir, target_dir, file_lst_dir, cats, sdf_dir):
127 | os.makedirs(target_dir, exist_ok=True)
128 | for keys, vals in cats.items():
129 | fs = []
130 | cat_target_dir = os.path.join(target_dir, vals)
131 | os.makedirs(cat_target_dir, exist_ok=True)
132 | lst_train_file = os.path.join(file_lst_dir, vals+"_train.lst")
133 | lst_test_file = os.path.join(file_lst_dir, vals+"_test.lst")
134 |
135 | with open(lst_train_file, "r") as f:
136 | list_obj = f.readlines()
137 | list_obj = [obj.rstrip('\r\n') for obj in list_obj]
138 | fs+=list_obj
139 | with open(lst_test_file, "r") as f:
140 | list_obj = f.readlines()
141 | list_obj = [obj.rstrip('\r\n') for obj in list_obj]
142 | fs+=list_obj
143 | repeat = len(fs)
144 | source_dir_lst = [source_dir for i in range(repeat)]
145 | cat_target_dir_lst = [cat_target_dir for i in range(repeat)]
146 | sdf_dir_lst = [sdf_dir for i in range(repeat)]
147 | vals_lst = [vals for i in range(repeat)]
148 |
149 | with Parallel(n_jobs=10) as parallel:
150 | parallel(delayed(gen_obj_img_h5)
151 | (source_dir, cat_target_dir, sdf_dir,vals, obj)
152 | for source_dir, cat_target_dir, sdf_dir, vals, obj in
153 | zip(source_dir_lst, cat_target_dir_lst, sdf_dir_lst, vals_lst, fs))
154 |
155 |
156 | def gen_obj_img_h5(source_dir, cat_target_dir, sdf_dir, vals, obj):
157 | img_dir = os.path.join(source_dir, vals, obj, "rendering")
158 | tar_obj_dir = os.path.join(cat_target_dir, obj)
159 | os.makedirs(tar_obj_dir, exist_ok=True)
160 | sdf_fl = os.path.join(sdf_dir, vals, obj, "ori_sample.h5")
161 | norm_mat = get_norm_matrix(sdf_fl)
162 | rot_mat = get_rotate_matrix(-np.pi / 2)
163 | with open(img_dir + "/renderings.txt", 'r') as f:
164 | lines = f.read().splitlines()
165 | file_lst = [line.strip() for line in lines]
166 | params = np.loadtxt(img_dir + "/rendering_metadata.txt")
167 | param_lst = [params[num, ...].astype(np.float32) for num in range(len(file_lst))]
168 | for i in range(len(file_lst)):
169 | h5_file = os.path.join(tar_obj_dir, file_lst[i][:2] + ".h5")
170 | if os.path.exists(h5_file):
171 | try:
172 | with h5py.File(h5_file, 'r') as h5_f:
173 | trans_mat_shape = h5_f["trans_mat"][:].shape[0]
174 | print("{} exist! trans first shape is {}".format(h5_file, str(trans_mat_shape)))
175 | continue
176 | except:
177 | print("{} exist! but file error".format(h5_file))
178 | camR, _ = get_img_cam(param_lst[i])
179 | obj_rot_mat = np.dot(rot90y, camR)
180 | img_file = os.path.join(img_dir, file_lst[i])
181 | img_arr = cv2.imread(img_file, cv2.IMREAD_UNCHANGED).astype(np.uint8)
182 | az, el, distance_ratio = param_lst[i][0], param_lst[i][1], param_lst[i][3]
183 | K, RT = getBlenderProj(az, el, distance_ratio, img_w=137, img_h=137)
184 | trans_mat = np.linalg.multi_dot([K, RT, rot_mat, norm_mat])
185 | trans_mat_right = np.transpose(trans_mat)
186 | regress_mat = np.transpose(np.linalg.multi_dot([RT, rot_mat, norm_mat]))
187 |
188 | with h5py.File(h5_file, 'w') as f1:
189 | f1.create_dataset('img_arr', data=img_arr, compression='gzip',
190 | dtype='uint8', compression_opts=4)
191 | f1.create_dataset('trans_mat', data=trans_mat_right, compression='gzip',
192 | dtype='float32', compression_opts=4)
193 | f1.create_dataset('K', data=K, compression='gzip',
194 | dtype='float32', compression_opts=4)
195 | f1.create_dataset('RT', data=RT, compression='gzip',
196 | dtype='float32', compression_opts=4)
197 | f1.create_dataset('obj_rot_mat', data=obj_rot_mat, compression='gzip',
198 | dtype='float32', compression_opts=4)
199 | f1.create_dataset('regress_mat', data=regress_mat, compression='gzip',
200 | dtype='float32', compression_opts=4)
201 | print("write:", h5_file)
202 |
203 |
204 | def get_img_cam(param):
205 | cam_mat, cam_pos = camera_info(degree2rad(param))
206 |
207 | return cam_mat, cam_pos
208 |
209 | def degree2rad(params):
210 | params_new = np.zeros_like(params)
211 | params_new[0] = np.deg2rad(params[0] + 180.0)
212 | params_new[1] = np.deg2rad(params[1])
213 | params_new[2] = np.deg2rad(params[2])
214 | return params_new
215 |
216 | def unit(v):
217 | norm = np.linalg.norm(v)
218 | if norm == 0:
219 | return v
220 | return v / norm
221 |
222 | def camera_info(param):
223 | az_mat = get_az(param[0])
224 | el_mat = get_el(param[1])
225 | inl_mat = get_inl(param[2])
226 | cam_mat = np.transpose(np.matmul(np.matmul(inl_mat, el_mat), az_mat))
227 | cam_pos = get_cam_pos(param)
228 | return cam_mat, cam_pos
229 |
230 | def get_cam_pos(param):
231 | camX = 0
232 | camY = 0
233 | camZ = param[3]
234 | cam_pos = np.array([camX, camY, camZ])
235 | return -1 * cam_pos
236 |
237 | def get_az(az):
238 | cos = np.cos(az)
239 | sin = np.sin(az)
240 | mat = np.asarray([cos, 0.0, sin, 0.0, 1.0, 0.0, -1.0 * sin, 0.0, cos], dtype=np.float32)
241 | mat = np.reshape(mat, [3, 3])
242 | return mat
243 |
244 | def get_el(el):
245 | cos = np.cos(el)
246 | sin = np.sin(el)
247 | mat = np.asarray([1.0, 0.0, 0.0, 0.0, cos, -1.0 * sin, 0.0, sin, cos], dtype=np.float32)
248 | mat = np.reshape(mat, [3, 3])
249 | return mat
250 |
251 | def get_inl(inl):
252 | cos = np.cos(inl)
253 | sin = np.sin(inl)
254 | # zeros = np.zeros_like(inl)
255 | # ones = np.ones_like(inl)
256 | mat = np.asarray([cos, -1.0 * sin, 0.0, sin, cos, 0.0, 0.0, 0.0, 1.0], dtype=np.float32)
257 | mat = np.reshape(mat, [3, 3])
258 | return mat
259 |
260 | def get_img_points(sample_pc, trans_mat_right):
261 | sample_pc = sample_pc.reshape((-1,3))
262 | homo_pc = np.concatenate((sample_pc, np.ones((sample_pc.shape[0],1),dtype=np.float32)),axis=-1)
263 | pc_xyz = np.dot(homo_pc, trans_mat_right).reshape((-1,3))
264 | print("pc_xyz shape: ", pc_xyz.shape)
265 | pc_xy = pc_xyz[:,:2] / np.expand_dims(pc_xyz[:,2], axis=1)
266 | return pc_xy.astype(np.int32)
267 |
268 | def get_points(obj_fl):
269 | sample_pc = np.zeros((0,3), dtype=np.float32)
270 | mesh_lst = trimesh.load_mesh(obj_fl, process=False)
271 | if not isinstance(mesh_lst, list):
272 | mesh_lst = [mesh_lst]
273 | for mesh in mesh_lst:
274 | choice = np.random.randint(mesh.vertices.shape[0], size=1000)
275 | sample_pc = np.concatenate((sample_pc, mesh.vertices[choice,...]), axis=0) #[choice,...]
276 | # color = [[255,0,0], [0,255,0], [0,0,255], [255, 0, 255]]
277 | color = 255*np.ones_like(sample_pc,dtype=np.uint8)
278 | color[:,0] = 0
279 | color[:,1] = 0
280 | return sample_pc, np.asarray(color, dtype=np.uint8)
281 |
282 | def get_img(img_h5):
283 | with h5py.File(img_h5, 'r') as h5_f:
284 | print("read", img_h5)
285 | trans_mat= h5_f["trans_mat"][:].astype(np.float32)
286 | regress_mat= h5_f["regress_mat"][:].astype(np.float32)
287 | obj_rot_mat= h5_f["obj_rot_mat"][:].astype(np.float32)
288 | K= h5_f["K"][:].astype(np.float32)
289 | img_arr = h5_f["img_arr"][:][:, :, :3].copy()
290 | trans_mat2 = np.dot(regress_mat, np.transpose(K))
291 | print(trans_mat2-trans_mat)
292 | return img_arr, trans_mat, obj_rot_mat, regress_mat
293 |
294 | def test_img_h5(img_h5_fl, num, march_obj_fl):
295 | img_arr, trans_mat, obj_rot_mat, regress_mat = get_img(img_h5_fl)
296 | new_pts, colors = get_points(march_obj_fl)
297 | pc_xy = get_img_points(new_pts, trans_mat)
298 | for j in range(pc_xy.shape[0]):
299 | y = int(pc_xy[j, 1])
300 | x = int(pc_xy[j, 0])
301 | # print (y,x)
302 | # print(img_arr[y, x, :])
303 | # print(tuple([int(x) for x in colors[j]]))
304 | cv2.circle(img_arr, (x, y), 3, tuple([int(x) for x in colors[j]]), -1)
305 | rot_pc = np.dot(new_pts, obj_rot_mat)
306 | np.savetxt(os.path.join("send/", "{}_{}_{}.txt".format("03001627", "184b4797cea77beb5ca1c42bb8ac17a", str(num))), rot_pc)
307 |
308 | print("send/184b4797cea77beb5ca1c42bb8ac17a_{}.png".format(str(num)))
309 | cv2.imwrite("send/184b4797cea77beb5ca1c42bb8ac17a_{}.png".format(str(num)), img_arr)
310 |
311 |
312 | if __name__ == "__main__":
313 |
314 | # nohup python -u create_file_lst.py &> create_imgh5.log &
315 |
316 | lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()
317 | convert_img2h5(raw_dirs["rendered_dir"],
318 | raw_dirs["renderedh5_dir"],
319 | lst_dir, cats,
320 | raw_dirs["sdf_dir"])
321 |
322 |
323 | # test_img_h5("/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/05.h5", 5,
324 | # "/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj")
325 |
326 | # gen_obj_img_h5("/ssd1/datasets/ShapeNet/ShapeNetRendering",
327 | # "send/03001627", "/ssd1/datasets/ShapeNet/SDF_v1/256_expr_1.2_bw_0.1/", "03001627", "184b4797cea77beb5ca1c42bb8ac17a")
328 | #
329 | # test_img_h5("send/03001627/184b4797cea77beb5ca1c42bb8ac17a/00.h5",0,
330 | # "/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj")
331 | # test_img_h5("send/03001627/184b4797cea77beb5ca1c42bb8ac17a/01.h5",1,
332 | # "/ssd1/datasets/ShapeNet/march_cube_objs_v1/03001627/184b4797cea77beb5ca1c42bb8ac17a/isosurf.obj")
333 |
--------------------------------------------------------------------------------
/preprocessing/info.json:
--------------------------------------------------------------------------------
1 | {
2 | "lst_dir": "./data/filelists",
3 | "cats": {
4 | "watercraft": "04530566",
5 | "rifle": "04090263",
6 | "display": "03211117",
7 | "lamp": "03636649",
8 | "speaker": "03691459",
9 | "cabinet": "02933112",
10 | "chair": "03001627",
11 | "bench": "02828884",
12 | "car": "02958343",
13 | "airplane": "02691156",
14 | "sofa": "04256520",
15 | "table": "04379243",
16 | "phone": "04401088"
17 | },
18 | "all_cats": [
19 | "airplane",
20 | "bench",
21 | "cabinet",
22 | "car",
23 | "chair",
24 | "display",
25 | "lamp",
26 | "speaker",
27 | "rifle",
28 | "sofa",
29 | "table",
30 | "phone",
31 | "watercraft"
32 | ],
33 | "raw_dirs_v1": {
34 | "mesh_dir": "/ssd1/datasets/ShapeNet/ShapeNetCore.v1/",
35 | "norm_mesh_dir": "/ssd1/datasets/ShapeNet/march_cube_objs_v1/",
36 | "norm_mesh_dir_v2": "/ssd1/datasets/ShapeNet/march_cube_objs/",
37 | "sdf_dir": "/ssd1/datasets/ShapeNet/SDF_v1/",
38 | "sdf_dir_v2": "/ssd1/datasets/ShapeNet/SDF_v2/",
39 | "rendered_dir": "/ssd1/datasets/ShapeNet/ShapeNetRendering/",
40 | "renderedh5_dir": "/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1/",
41 | "renderedh5_dir_v2": "/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v2/",
42 | "renderedh5_dir_est": "/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1_pred_3d/",
43 | "3dnnsdf_dir": "/ssd1/datasets/ShapeNet/SDF_full/"
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laughtervv/DISN/f8206adb45f8a0714eaefcae8433337cd562b82a/result.png
--------------------------------------------------------------------------------
/test/command:
--------------------------------------------------------------------------------
1 | cp -r 65_0.0_sep/02933112 65_0.0_comb/ &
2 | cp -r 65_0.0_sep/03211117 65_0.0_comb/ &
3 | cp -r 65_0.0_sep/03691459 65_0.0_comb/ &
4 | cp -r 65_0.0_sep/04090263 65_0.0_comb/ &
5 | cp -r 65_0.0_sep/04530566 65_0.0_comb/ &
6 | cp -r 65_0.0/02691156 65_0.0_comb/ &
7 | cp -r 65_0.0/02828884 65_0.0_comb/ &
8 | cp -r 65_0.0/02958343 65_0.0_comb/ &
9 | cp -r 65_0.0/03001627 65_0.0_comb/ &
10 | cp -r 65_0.0/03636649 65_0.0_comb/ &
11 | cp -r 65_0.0/04256520 65_0.0_comb/ &
12 | cp -r 65_0.0/04379243 65_0.0_comb/ &
13 | cp -r 65_0.0/04401088 65_0.0_comb/ &
14 |
15 |
16 |
17 | cp -r camest_65_0.0_sep/02933112 camest_65_0.0_comb/ &
18 | cp -r camest_65_0.0_sep/03211117 camest_65_0.0_comb/ &
19 | cp -r camest_65_0.0_sep/03691459 camest_65_0.0_comb/ &
20 | cp -r camest_65_0.0_sep/04090263 camest_65_0.0_comb/ &
21 | cp -r camest_65_0.0_sep/04530566 camest_65_0.0_comb/ &
22 | cp -r camest_65_0.0/02691156 camest_65_0.0_comb/ &
23 | cp -r camest_65_0.0/02828884 camest_65_0.0_comb/ &
24 | cp -r camest_65_0.0/02958343 camest_65_0.0_comb/ &
25 | cp -r camest_65_0.0/03001627 camest_65_0.0_comb/ &
26 | cp -r camest_65_0.0/03636649 camest_65_0.0_comb/ &
27 | cp -r camest_65_0.0/04256520 camest_65_0.0_comb/ &
28 | cp -r camest_65_0.0/04379243 camest_65_0.0_comb/ &
29 | cp -r camest_65_0.0/04401088 camest_65_0.0_comb/ &
30 |
31 |
32 |
33 | cp -r 65_0.0_sep/02933112 65_0.0_comb/ &
34 | cp -r 65_0.0_sep/04090263 65_0.0_comb/ &
35 | cp -r 65_0.0/02691156 65_0.0_comb/ &
36 | cp -r 65_0.0/02828884 65_0.0_comb/ &
37 | cp -r 65_0.0/02958343 65_0.0_comb/ &
38 | cp -r 65_0.0/03001627 65_0.0_comb/ &
39 | cp -r 65_0.0/03636649 65_0.0_comb/ &
40 | cp -r 65_0.0/04256520 65_0.0_comb/ &
41 | cp -r 65_0.0/04379243 65_0.0_comb/ &
42 | cp -r 65_0.0/04401088 65_0.0_comb/ &
43 | cp -r 65_0.0/04530566 65_0.0_comb/ &
44 | cp -r 65_0.0/03211117 65_0.0_comb/ &
45 | cp -r 65_0.0/03691459 65_0.0_comb/ &
46 |
47 |
48 |
--------------------------------------------------------------------------------
/test/test_iou.py:
--------------------------------------------------------------------------------
1 | import argparse
2 | import math
3 | from datetime import datetime
4 | import numpy as np
5 | import random
6 | import tensorflow as tf
7 | import socket
8 | import pymesh
9 | import os
10 | import sys
11 | from joblib import Parallel, delayed
12 | BASE_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
13 | sys.path.append(BASE_DIR) # model
14 | sys.path.append(os.path.join(BASE_DIR, 'models'))
15 | sys.path.append(os.path.join(BASE_DIR, 'data'))
16 | sys.path.append(os.path.join(BASE_DIR, 'utils'))
17 | sys.path.append(os.path.join(BASE_DIR, 'preprocessing'))
18 | from tensorflow.contrib.framework.python.framework import checkpoint_utils
19 | import create_file_lst
20 |
21 | slim = tf.contrib.slim
22 | lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()
23 |
24 | parser = argparse.ArgumentParser()
25 | parser.add_argument('--store', action='store_true')
26 | parser.add_argument('--max_epoch', type=int, default=1, help='Epoch to run [default: 201]')
27 | parser.add_argument('--img_h', type=int, default=137, help='Image Height')
28 | parser.add_argument('--img_w', type=int, default=137, help='Image Width')
29 | parser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')
30 | parser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')
31 | parser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')
32 | parser.add_argument('--num_classes', type=int, default=1024, help='vgg global embedding dimensions')
33 | parser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')
34 | parser.add_argument('--dim', type=int, default=110)
35 | parser.add_argument('--alpha', action='store_true')
36 | parser.add_argument('--rot', action='store_true')
37 | parser.add_argument('--tanh', action='store_true')
38 | parser.add_argument('--cat_limit', type=int, default=168000, help="balance each category, 1500 * 24 = 36000")
39 | parser.add_argument('--sdf_res', type=int, default=64, help='sdf grid')
40 | parser.add_argument('--binary', action='store_true')
41 | parser.add_argument('--num_sample_points', type=int, default=2048, help='Sample Point Number for each obj to test[default: 2048]')
42 | parser.add_argument('--gpu', type=str, default='0', help='GPU to use [default: GPU 0]')
43 | parser.add_argument('--batch_size', type=int, default=1, help='Batch Size during training [default: 32]')
44 | parser.add_argument('--cam_est', action='store_true')
45 |
46 |
47 | parser.add_argument('--log_dir', default='checkpoint/exp_200', help='Log dir [default: log]')
48 | parser.add_argument('--test_lst_dir', default=lst_dir, help='test mesh data list')
49 | parser.add_argument('--threedcnn', action='store_true')
50 | parser.add_argument('--img_feat_onestream', action='store_true')
51 | parser.add_argument('--img_feat_twostream', action='store_true')
52 | parser.add_argument('--category', default="all", help='Which single class to train on [default: None]')
53 | parser.add_argument('--view_num', type=int, default=24, help="how many views do you want to create for each obj")
54 | parser.add_argument('--cal_dir', type=str, default="", help="target obj directory that needs to be tested")
55 |
56 | FLAGS = parser.parse_args()
57 | print('pid: %s'%(str(os.getpid())))
58 | print(FLAGS)
59 |
60 | EPOCH_CNT = 0
61 | GPU_INDEX = FLAGS.gpu
62 | PRETRAINED_MODEL_PATH = FLAGS.log_dir
63 | LOG_DIR = FLAGS.log_dir
64 | SDF_WEIGHT = 10.
65 |
66 | os.environ["CUDA_VISIBLE_DEVICES"] = GPU_INDEX
67 | if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)
68 | RESULT_PATH = os.path.join(LOG_DIR, 'test_results_allpts')
69 | if not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)
70 | LOG_FOUT = open(os.path.join(LOG_DIR, 'log_test.txt'), 'w')
71 | LOG_FOUT.write(str(FLAGS)+'\n')
72 |
73 |
74 | HOSTNAME = socket.gethostname()
75 | print("HOSTNAME:", HOSTNAME)
76 | VV = False
77 | VV = VV and (HOSTNAME == "ubuntu")
78 |
79 | def log_string(out_str):
80 | LOG_FOUT.write(out_str+'\n')
81 | LOG_FOUT.flush()
82 | print(out_str)
83 |
84 |
85 | if FLAGS.threedcnn:
86 | info = {'rendered_dir': raw_dirs["renderedh5_dir_v2"],
87 | 'sdf_dir': raw_dirs["3dnnsdf_dir"],
88 | 'gt_marching_cube':raw_dirs['norm_mesh_dir_v2']}
89 | elif FLAGS.img_feat_onestream or FLAGS.img_feat_twostream:
90 | info = {'rendered_dir': raw_dirs["renderedh5_dir"],
91 | 'sdf_dir': raw_dirs["sdf_dir"],
92 | 'gt_marching_cube':raw_dirs['norm_mesh_dir']}
93 | if FLAGS.cam_est:
94 | info['rendered_dir']= raw_dirs["renderedh5_dir_est"]
95 | else:
96 | info = {'rendered_dir': raw_dirs["renderedh5_dir_v2"],
97 | 'sdf_dir': raw_dirs['sdf_dir_v2'],
98 | 'gt_marching_cube':raw_dirs['norm_mesh_dir_v2']}
99 |
100 | print(info)
101 |
102 | def load_model(sess, LOAD_MODEL_FILE, prefixs, strict=False):
103 |
104 | vars_in_pretrained_model = dict(checkpoint_utils.list_variables(LOAD_MODEL_FILE))
105 | vars_in_defined_model = []
106 |
107 | for var in tf.trainable_variables():
108 | if isinstance(prefixs, list):
109 | for prefix in prefixs:
110 | if (var.op.name.startswith(prefix)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):
111 | if (list(var.shape) == vars_in_pretrained_model[var.op.name]):
112 | vars_in_defined_model.append(var)
113 | else:
114 | if (var.op.name.startswith(prefixs)) and (var.op.name in vars_in_pretrained_model.keys()) and ('logits' not in var.op.name):
115 | if (list(var.shape) == vars_in_pretrained_model[var.op.name]):
116 | vars_in_defined_model.append(var)
117 | saver = tf.train.Saver(vars_in_defined_model)
118 | saver.restore(sess, LOAD_MODEL_FILE)
119 | print( "Model loaded in file: %s" % (LOAD_MODEL_FILE))
120 |
121 | return True
122 |
123 | def build_file_dict(dir):
124 | file_dict = {}
125 | for file in os.listdir(dir):
126 | full_path = os.path.join(dir, file)
127 | if os.path.isfile(full_path) and os.stat(full_path)[6] > 200:
128 | obj_id = file.split("_")[1]
129 | if obj_id in file_dict.keys():
130 | file_dict[obj_id].append(full_path)
131 | else:
132 | file_dict[obj_id] = [full_path]
133 | for obj_id in file_dict.keys():
134 | paths = file_dict[obj_id]
135 | if len(paths) == 0:
136 | print("{} no ok files ".format(obj_id))
137 | elif len(paths) < FLAGS.view_num:
138 | choice = np.random.randint(len(paths), size=FLAGS.view_num)
139 | # print(obj_id," choice: ",choice)
140 | file_dict[obj_id] = []
141 | for ind in choice:
142 | file_dict[obj_id].append(paths[ind])
143 | else:
144 | file_dict[obj_id] = random.sample(paths, FLAGS.view_num)
145 | return file_dict
146 |
147 | class NoStdStreams(object):
148 | def __init__(self,stdout = None, stderr = None):
149 | self.devnull = open(os.devnull,'w')
150 | self._stdout = stdout or self.devnull or sys.stdout
151 | self._stderr = stderr or self.devnull or sys.stderr
152 |
153 | def __enter__(self):
154 | self.old_stdout, self.old_stderr = sys.stdout, sys.stderr
155 | self.old_stdout.flush(); self.old_stderr.flush()
156 | sys.stdout, sys.stderr = self._stdout, self._stderr
157 |
158 | def __exit__(self, exc_type, exc_value, traceback):
159 | self._stdout.flush(); self._stderr.flush()
160 | sys.stdout = self.old_stdout
161 | sys.stderr = self.old_stderr
162 | self.devnull.close()
163 |
164 |
165 | def iou_all(cats, pred_dir, gt_dir, test_lst_dir, dim=110):
166 | for cat_nm, cat_id in cats.items():
167 | pred_dir_cat = os.path.join(pred_dir, cat_id)
168 | gt_dir_cat = os.path.join(gt_dir, cat_id)
169 | test_lst_f = os.path.join(test_lst_dir, cat_id + "_test.lst")
170 | iou_avg, best_iou_pred_lst = iou_cat(pred_dir_cat, gt_dir_cat, test_lst_f, dim=dim)
171 | print("cat_nm: {}, cat_id: {}, iou_avg: {}".format(cat_nm, cat_id, iou_avg))
172 | print("done!")
173 |
174 | def iou_cat(pred_dir, gt_dir, test_lst_f, dim=110):
175 | pred_dict = build_file_dict(pred_dir)
176 | iou_sum = 0.0
177 | count = 0.0
178 | best_iou_pred_lst = []
179 | with open(test_lst_f, "r") as f:
180 | test_objs = f.readlines()
181 | for obj_id in test_objs:
182 | obj_id = obj_id.rstrip('\r\n')
183 | src_path = os.path.join(gt_dir, obj_id, "isosurf.obj")
184 | src_path_lst = [src_path for i in range(len(pred_dict[obj_id]))]
185 | dim_lst = [dim for i in range(len(pred_dict[obj_id]))]
186 | if obj_id not in pred_dict.keys():
187 | print("skip error obj id, no key:", obj_id)
188 | continue
189 | pred_path_lst = pred_dict[obj_id]
190 | if len(pred_path_lst) == 0:
191 | print("skip error obj id:", obj_id)
192 | continue
193 | with Parallel(n_jobs=min(12, FLAGS.view_num)) as parallel:
194 | result_lst = parallel(delayed(iou_pymesh)
195 | (src_path, pred_path, dim)
196 | for src_path, pred_path, dim in
197 | zip(src_path_lst, pred_path_lst, dim_lst))
198 | iou_vals = np.asarray([result[0] for result in result_lst], dtype=np.float32)
199 | sum_iou = np.sum(iou_vals)
200 | iou_sum += sum_iou
201 | count += len(iou_vals)
202 | avg_iou = np.mean(iou_vals)
203 | ind = np.argmax(iou_vals)
204 | best_iou_pred_lst.append(result_lst[ind])
205 | print("obj_id iou avg: ", avg_iou, " best pred: ", result_lst[ind])
206 | return iou_sum / count, best_iou_pred_lst
207 |
208 | def iou_pymesh(mesh_src, mesh_pred, dim=FLAGS.dim):
209 | try:
210 | mesh1 = pymesh.load_mesh(mesh_src)
211 | grid1 = pymesh.VoxelGrid(2./dim)
212 | grid1.insert_mesh(mesh1)
213 | grid1.create_grid()
214 |
215 | ind1 = ((grid1.mesh.vertices + 1.1) / 2.4 * dim).astype(np.int)
216 | v1 = np.zeros([dim, dim, dim])
217 | v1[ind1[:,0], ind1[:,1], ind1[:,2]] = 1
218 |
219 |
220 | mesh2 = pymesh.load_mesh(mesh_pred)
221 | grid2 = pymesh.VoxelGrid(2./dim)
222 | grid2.insert_mesh(mesh2)
223 | grid2.create_grid()
224 |
225 | ind2 = ((grid2.mesh.vertices + 1.1) / 2.4 * dim).astype(np.int)
226 | v2 = np.zeros([dim, dim, dim])
227 | v2[ind2[:,0], ind2[:,1], ind2[:,2]] = 1
228 |
229 | intersection = np.sum(np.logical_and(v1, v2))
230 | union = np.sum(np.logical_or(v1, v2))
231 | return [float(intersection) / union, mesh_pred]
232 | except:
233 | print("error mesh {} / {}".format(mesh_src, mesh_pred))
234 |
235 |
236 | if __name__ == "__main__":
237 |
238 |
239 | ############################################################
240 |
241 | cats_all = {
242 | "watercraft": "04530566",
243 | "rifle": "04090263",
244 | "display": "03211117",
245 | "lamp": "03636649",
246 | "speaker": "03691459",
247 | "chair": "03001627",
248 | "bench": "02828884",
249 | "cabinet": "02933112",
250 | "car": "02958343",
251 | "airplane": "02691156",
252 | "sofa": "04256520",
253 | "table": "04379243",
254 | "phone": "04401088"
255 | }
256 | if FLAGS.category == "all":
257 | cats = cats_all
258 | elif FLAGS.category == "clean":
259 | cats = {"cabinet": "02933112",
260 | "display": "03211117",
261 | "lamp": "03636649",
262 | "speaker": "03691459",
263 | "rifle": "04090263",
264 | "watercraft": "04530566"
265 | }
266 | else:
267 | cats = {FLAGS.category: cats_all[FLAGS.category]}
268 |
269 | iou_all(cats, FLAGS.cal_dir, info["gt_marching_cube"], FLAGS.test_lst_dir, dim=110)
270 |
271 |
--------------------------------------------------------------------------------
/test/test_sdf_acc.py:
--------------------------------------------------------------------------------
1 | import argparse
2 | from datetime import datetime
3 | import tensorflow as tf
4 | import os
5 | import sys
6 | BASE_DIR = os.path.dirname(os.path.abspath(__file__))
7 | sys.path.append(BASE_DIR) # model
8 | sys.path.append(os.path.join(BASE_DIR, 'models'))
9 | sys.path.append(os.path.join(BASE_DIR, 'data'))
10 | sys.path.append(os.path.join(BASE_DIR, 'utils'))
11 | sys.path.append(os.path.join(BASE_DIR, 'preprocessing'))
12 | import model_normalization as model
13 | import data_sdf_h5_queue # as data
14 | import create_file_lst
15 | slim = tf.contrib.slim
16 |
17 | parser = argparse.ArgumentParser()
18 | parser.add_argument('--max_epoch', type=int, default=1, help='Epoch to run [default: 201]')
19 | parser.add_argument('--img_h', type=int, default=137, help='Image Height')
20 | parser.add_argument('--img_w', type=int, default=137, help='Image Width')
21 | parser.add_argument('--learning_rate', type=float, default=1e-4, help='Initial learning rate [default: 0.001]')
22 | parser.add_argument('--decay_step', type=int, default=200000, help='Decay step for lr decay [default: 200000]')
23 | parser.add_argument('--decay_rate', type=float, default=0.9, help='Decay rate for lr decay [default: 0.7]')
24 | parser.add_argument('--num_classes', type=int, default=1024, help='vgg global embedding dimensions')
25 | parser.add_argument('--num_points', type=int, default=1, help='Point Number [default: 2048]')
26 | parser.add_argument('--mask_weight', type=float, default=4.0)
27 | parser.add_argument('--alpha', action='store_true')
28 | parser.add_argument('--rot', action='store_true')
29 | parser.add_argument('--tanh', action='store_true')
30 | parser.add_argument('--cat_limit', type=int, default=168000, help="balance each category, 1500 * 24 = 36000")
31 |
32 | parser.add_argument('--gpu', type=str, default='0', help='GPU to use [default: GPU 0]')
33 | parser.add_argument('--batch_size', type=int, default=1, help='Batch Size during training [default: 32]')
34 | parser.add_argument('--sdf_res', type=int, default=64, help='sdf grid')
35 | parser.add_argument('--log_dir', default='checkpoint/exp_200', help='Log dir [default: log]')
36 | parser.add_argument('--test_lst_dir', default='', help='test mesh data list')
37 | parser.add_argument('--num_sample_points', type=int, default=2048, help='Sample Point Number for each obj to test[default: 2048]')
38 | parser.add_argument('--threedcnn', action='store_true')
39 | parser.add_argument('--img_feat', action='store_true')
40 | parser.add_argument('--img_feat_far', action='store_true')
41 | parser.add_argument('--img_feat_twostream', action='store_true')
42 | parser.add_argument('--category', default="all", help='Which single class to train on [default: None]')
43 | parser.add_argument('--binary', action='store_true')
44 | parser.add_argument('--create_obj', action='store_true', help="create_obj or test accuracy on test set")
45 | parser.add_argument('--store', action='store_true')
46 | parser.add_argument('--multi_view', action='store_true')
47 | parser.add_argument('--cam_est', action='store_true')
48 | parser.add_argument('--backcolorwhite', action='store_true')
49 |
50 | FLAGS = parser.parse_args()
51 | print('pid: %s'%(str(os.getpid())))
52 | print(FLAGS)
53 |
54 | EPOCH_CNT = 0
55 | NUM_POINTS = FLAGS.num_points
56 | BATCH_SIZE = FLAGS.batch_size
57 | NUM_SAMPLE_POINTS = FLAGS.num_sample_points
58 | GPU_INDEX = FLAGS.gpu
59 | PRETRAINED_MODEL_PATH = FLAGS.log_dir
60 | LOG_DIR = FLAGS.log_dir
61 | SDF_WEIGHT = 10.
62 |
63 | os.environ["CUDA_VISIBLE_DEVICES"] = GPU_INDEX
64 |
65 | if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)
66 |
67 | RESULT_PATH = os.path.join(LOG_DIR, 'test_results_allpts')
68 | if not os.path.exists(RESULT_PATH): os.mkdir(RESULT_PATH)
69 |
70 | LOG_FOUT = open(os.path.join(LOG_DIR, 'log_test.txt'), 'w')
71 | LOG_FOUT.write(str(FLAGS)+'\n')
72 |
73 | IMG_SIZE = FLAGS.img_h
74 |
75 |
76 | ########### load test lst info
77 | TEST_LISTINFO = []
78 | lst_dir, cats, all_cats, raw_dirs = create_file_lst.get_all_info()
79 |
80 | cat_ids = []
81 | cats_limit = {}
82 |
83 | if FLAGS.category == "all":
84 | for key, value in cats.items():
85 | cat_ids.append(value)
86 | cats_limit[value] = 0
87 | else:
88 | cat_ids.append(cats[FLAGS.category])
89 | cats_limit[cats[FLAGS.category]] = 0
90 |
91 | for cat_id in cat_ids:
92 | test_lst = os.path.join(FLAGS.test_lst_dir, cat_id+"_test.lst")
93 | with open(test_lst, 'r') as f:
94 | lines = f.read().splitlines()
95 | for line in lines:
96 | render_list = range(24)
97 | for render in render_list:
98 | cats_limit[cat_id]+=1
99 | TEST_LISTINFO += [(cat_id, line.strip(), render)]
100 |
101 | def log_string(out_str):
102 | LOG_FOUT.write(out_str+'\n')
103 | LOG_FOUT.flush()
104 | print(out_str)
105 |
106 |
107 | if FLAGS.threedcnn:
108 | info = {'rendered_dir': '/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v2',
109 | 'sdf_dir': '/ssd1/datasets/ShapeNet/SDF_full/64_expr_1.2'}
110 | elif FLAGS.img_feat or FLAGS.img_feat_far or FLAGS.img_feat_twostream:
111 | info = {'rendered_dir': '/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1',
112 | 'sdf_dir': '/ssd1/datasets/ShapeNet/SDF_v1/256_expr_1.2_bw_0.1'}
113 | if FLAGS.cam_est:
114 | info = {'rendered_dir': '/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v1_pred_3d',
115 | 'sdf_dir': '/ssd1/datasets/ShapeNet/SDF_v1/256_expr_1.2_bw_0.1'}
116 | else:
117 | info = {'rendered_dir': '/ssd1/datasets/ShapeNet/ShapeNetRenderingh5_v2',
118 | 'sdf_dir': '/ssd1/datasets/ShapeNet/SDF_neg/simp_256_expr_1.2_bw_0.1'}
119 | TEST_DATASET = data_sdf_h5_queue.Pt_sdf_img(FLAGS, listinfo=TEST_LISTINFO, info=info, cats_limit=cats_limit)
120 | print(info)
121 |
122 | def test():
123 | log_string(LOG_DIR)
124 |
125 | input_pls = model.placeholder_inputs(BATCH_SIZE, NUM_POINTS, (IMG_SIZE, IMG_SIZE),
126 | num_sample_pc=NUM_SAMPLE_POINTS, scope='inputs_pl', FLAGS=FLAGS)
127 | is_training_pl = tf.placeholder(tf.bool, shape=())
128 | print(is_training_pl)
129 | batch = tf.Variable(0, name='batch')
130 |
131 | print("--- Get model and loss")
132 | # Get model and loss
133 |
134 | end_points = model.get_model(input_pls, NUM_POINTS, is_training_pl, bn=False,FLAGS=FLAGS)
135 |
136 | loss, end_points = model.get_loss(end_points, sdf_weight=SDF_WEIGHT, mask_weight = FLAGS.mask_weight,
137 | num_sample_points=NUM_SAMPLE_POINTS, FLAGS=FLAGS)
138 | # Create a session
139 | gpu_options = tf.GPUOptions()
140 | config = tf.ConfigProto(gpu_options=gpu_options)
141 | config.gpu_options.allow_growth = True
142 | config.allow_soft_placement = True
143 | config.log_device_placement = False
144 | sess = tf.Session(config=config)
145 |
146 | init = tf.global_variables_initializer()
147 | sess.run(init)
148 |
149 | ######### Loading Checkpoint ###############
150 | saver = tf.train.Saver([v for v in tf.get_collection_ref(tf.GraphKeys.GLOBAL_VARIABLES) if
151 | ('lr' not in v.name) and ('batch' not in v.name)])
152 | ckptstate = tf.train.get_checkpoint_state(PRETRAINED_MODEL_PATH)
153 |
154 | if ckptstate is not None:
155 | LOAD_MODEL_FILE = os.path.join(PRETRAINED_MODEL_PATH, os.path.basename(ckptstate.model_checkpoint_path))
156 | try:
157 | with NoStdStreams():
158 | saver.restore(sess, LOAD_MODEL_FILE)
159 | print("Model loaded in file: %s" % LOAD_MODEL_FILE)
160 | except:
161 | print("Fail to load overall modelfile: %s" % PRETRAINED_MODEL_PATH)
162 |
163 | ###########################################
164 |
165 | ops = {'input_pls': input_pls,
166 | 'is_training_pl': is_training_pl,
167 | 'loss': loss,
168 | 'step': batch,
169 | 'end_points': end_points}
170 |
171 | TEST_DATASET.start()
172 | test_one_epoch(sess, ops)
173 | TEST_DATASET.shutdown()
174 |
175 | class NoStdStreams(object):
176 | def __init__(self,stdout = None, stderr = None):
177 | self.devnull = open(os.devnull,'w')
178 | self._stdout = stdout or self.devnull or sys.stdout
179 | self._stderr = stderr or self.devnull or sys.stderr
180 |
181 | def __enter__(self):
182 | self.old_stdout, self.old_stderr = sys.stdout, sys.stderr
183 | self.old_stdout.flush(); self.old_stderr.flush()
184 | sys.stdout, sys.stderr = self._stdout, self._stderr
185 |
186 | def __exit__(self, exc_type, exc_value, traceback):
187 | self._stdout.flush(); self._stderr.flush()
188 | sys.stdout = self.old_stdout
189 | sys.stderr = self.old_stderr
190 | self.devnull.close()
191 |
192 | def test_one_epoch(sess, ops):
193 | is_training = False
194 |
195 | # Shuffle train samples
196 | num_batches = int(len(TEST_DATASET)) // FLAGS.batch_size
197 | print()
198 | print('num_batches', num_batches)
199 | log_string(str(datetime.now()))
200 | losses = {}
201 | for lossname in ops['end_points']['losses'].keys():
202 | losses[lossname] = 0
203 |
204 | for batch_idx in range(num_batches):
205 | batch_data = TEST_DATASET.fetch()
206 |
207 | feed_dict = {ops['is_training_pl']: is_training,
208 | ops['input_pls']['sample_pc']: batch_data['sdf_pt'],
209 | ops['input_pls']['sample_pc_rot']: batch_data['sdf_pt_rot'],
210 | ops['input_pls']['sdf']: batch_data['sdf_val'] - 0.003,
211 | ops['input_pls']['imgs']: batch_data['img'],
212 | ops['input_pls']['trans_mat']: batch_data['trans_mat']}
213 | output_list = [ops['end_points']['pred_sdf'], ops['end_points']['ref_img'],
214 | ops['end_points']['sample_img_points']]
215 | loss_list = []
216 | for il, lossname in enumerate(losses.keys()):
217 | loss_list += [ops['end_points']['losses'][lossname]]
218 | outputs = sess.run(output_list + loss_list, feed_dict=feed_dict)
219 | pred_sdf_val, ref_img_val, sample_img_points_val = outputs[:-len(losses)]
220 | outstr = ' -- %03d / %03d -- ' % (batch_idx + 1, num_batches)
221 | for il, lossname in enumerate(losses.keys()):
222 | losses[lossname] += outputs[len(output_list) + il]
223 | outstr += '%s: %f, ' % (lossname, outputs[len(output_list) + il])
224 | log_string(outstr)
225 | # summary
226 | outstr = "Summary: "
227 | for lossname in losses.keys():
228 | outstr += '%s: %f, ' % (lossname, losses[lossname] / num_batches)
229 | log_string(outstr)
230 |
231 | if __name__ == "__main__":
232 |
233 | # test accuracy
234 | test()
235 |
236 |
--------------------------------------------------------------------------------
/utils/output_utils.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os
3 | import sys
4 | import struct
5 | BASE_DIR = os.path.dirname(os.path.abspath(__file__))
6 | sys.path.append(os.path.dirname(os.path.abspath(__file__))) # model
7 | import numpy as np
8 | import matplotlib as mpl
9 | import matplotlib.pyplot as plt
10 | mpl.use('Agg')
11 |
12 | def save_sdf_bin(bin_fn, output_sdf, res):
13 | f_sdf_bin = open(bin_fn, 'wb')
14 |
15 | f_sdf_bin.write(struct.pack('i', -(res-1))) # write an int
16 | f_sdf_bin.write(struct.pack('i', (res-1))) # write an int
17 | f_sdf_bin.write(struct.pack('i', (res-1))) # write an int
18 |
19 | positions = [-1.,-1.,-1.,1.,1.,1.]
20 | positions = struct.pack('d'*len(positions), *positions)
21 | f_sdf_bin.write(positions)
22 |
23 | sdf = struct.pack('f'*len(output_sdf), *output_sdf)
24 | f_sdf_bin.write(sdf)
25 | f_sdf_bin.close()
26 |
27 | ############################
28 | ## Visualize Results ##
29 | ############################
30 |
31 | color_map = json.load(open(os.path.join(BASE_DIR, 'part_color_mapping.json'), 'r'))
32 |
33 | def output_bounding_box_withcorners(box_corners, seg, out_file):
34 | # ############## 0 1 2 3 4 5 6 7
35 | corner_indexes = [[0, 1, 2], [0, 1, 5], [0, 4, 2], [0, 4, 5], [3, 1, 2], [3, 1, 5], [3, 4, 2], [3, 4, 5]]
36 | line_indexes = [[0, 1], [0, 2], [0, 4], [1, 3], [1, 5], [2, 3], [2, 6], [3, 7], [4, 5], [4, 6], [5, 7], [6, 7]]
37 | with open(out_file, 'w') as f:
38 | l = box_corners.shape[0]
39 | for i in range(l):
40 | box = box_corners[i]
41 | color = color_map[seg[i]]
42 | for line_index in line_indexes:
43 | corner0 = box[line_index[0]]
44 | corner1 = box[line_index[1]]
45 | print(corner0.shape)
46 | dist = np.linalg.norm(corner0 - corner1)
47 | dot_num = int(dist / 0.005)
48 | delta = (corner1 - corner0) / dot_num
49 | for idot in range(dot_num):
50 | plotdot = corner0 + idot * delta
51 | f.write(
52 | 'v %f %f %f %f %f %f\n' % (plotdot[0], plotdot[1], plotdot[2], color[0], color[1], color[2]))
53 |
54 |
55 | def output_bounding_box(boxes, seg, out_file):
56 | # ############## 0 1 2 3 4 5 6 7
57 | #box:nx8x3
58 | corner_indexes = [[0, 1, 2], [0, 1, 5], [0, 4, 2], [0, 4, 5], [3, 1, 2], [3, 1, 5], [3, 4, 2], [3, 4, 5]]
59 | line_indexes = [[0, 1], [0, 2], [0, 4], [1, 3], [1, 5], [2, 3], [2, 6], [3, 7], [4, 5], [4, 6], [5, 7], [6, 7]]
60 | with open(out_file, 'w') as f:
61 | l = boxes.shape[0]
62 | for i in range(l):
63 | box = boxes[i]
64 | color = color_map[seg[i]]
65 | for line_index in line_indexes:
66 | corner0 = box[corner_indexes[line_index[0]]]
67 | corner1 = box[corner_indexes[line_index[1]]]
68 | dist = np.linalg.norm(corner0 - corner1)
69 | dot_num = int(dist / 0.005)
70 | delta = (corner1 - corner0) / dot_num
71 | for idot in range(dot_num):
72 | plotdot = corner0 + idot * delta
73 | f.write(
74 | 'v %f %f %f %f %f %f\n' % (plotdot[0], plotdot[1], plotdot[2], color[0], color[1], color[2]))
75 |
76 |
77 | def output_color_point_cloud(data, seg, out_file):
78 | with open(out_file, 'w') as f:
79 | l = len(seg)
80 | for i in range(l):
81 | color = color_map[seg[i]]
82 | f.write('v %f %f %f %f %f %f\n' % (data[i][0], data[i][1], data[i][2], color[0], color[1], color[2]))
83 |
84 |
85 | def output_point_cloud_rgb(data, rgb, out_file):
86 | with open(out_file, 'w') as f:
87 | l = len(data)
88 | for i in range(l):
89 | f.write('v %f %f %f %f %f %f\n' % (data[i][0], data[i][1], data[i][2], rgb[i][0], rgb[i][1], rgb[i][2]))
90 |
91 |
92 | def output_color_point_cloud_red_blue(data, seg, out_file):
93 | with open(out_file, 'w') as f:
94 | l = len(seg)
95 | for i in range(l):
96 | if seg[i] == 1:
97 | color = [0, 0, 1]
98 | elif seg[i] == 0:
99 | color = [1, 0, 0]
100 | else:
101 | color = [0, 0, 0]
102 | f.write('v %f %f %f %f %f %f\n' % (data[i][0], data[i][1], data[i][2], color[0], color[1], color[2]))
103 |
104 |
105 | ##define color heat map
106 | norm = mpl.colors.Normalize(vmin=0, vmax=255)
107 | magma_cmap = plt.cm.get_cmap('magma')
108 | magma_rgb = []
109 | for i in range(0, 255):
110 | k = mpl.colors.colorConverter.to_rgb(magma_cmap(norm(i)))
111 | magma_rgb.append(k)
112 |
113 |
114 | def output_scale_point_cloud(data, scales, out_file):
115 | with open(out_file, 'w') as f:
116 | l = len(scales)
117 | for i in range(l):
118 | scale = int(scales[i]*254)
119 | if scale > 254:
120 | scale = 254
121 | if scale < 0:
122 | scale = 0
123 | color = magma_rgb[scale]
124 | f.write('v %f %f %f %f %f %f\n' % (data[i][0], data[i][1], data[i][2], color[0], color[1], color[2]))
125 |
--------------------------------------------------------------------------------
/utils/part_color_mapping.json:
--------------------------------------------------------------------------------
1 | [[0.57, 0.15, 0.43], [0.85, 0.57, 0.29], [0.7100000000000001, 0.7100000000000001, 0.01], [0.01, 0.7100000000000001, 0.15], [0.01, 0.57, 0.85], [0.43, 0.01, 0.7100000000000001], [0.43, 0.7100000000000001, 0.57], [0.29, 0.29, 0.29], [0.29, 0.7100000000000001, 0.7100000000000001], [0.57, 0.57, 0.29], [0.57, 0.7100000000000001, 0.7100000000000001], [0.01, 0.01, 0.29], [0.29, 0.57, 0.7100000000000001], [0.29, 0.15, 0.57], [0.29, 0.7100000000000001, 0.43], [0.57, 0.29, 0.01], [0.29, 0.15, 0.15], [0.7100000000000001, 0.29, 0.01], [0.01, 0.85, 0.15], [0.85, 0.01, 0.01], [0.29, 0.15, 0.7100000000000001], [0.7100000000000001, 0.15, 0.43], [0.29, 0.43, 0.7100000000000001], [0.43, 0.43, 0.7100000000000001], [0.29, 0.57, 0.01], [0.57, 0.29, 0.29], [0.57, 0.85, 0.15], [0.15, 0.29, 0.29], [0.15, 0.7100000000000001, 0.15], [0.85, 0.01, 0.29], [0.43, 0.85, 0.29], [0.43, 0.29, 0.85], [0.57, 0.85, 0.85], [0.15, 0.57, 0.01], [0.57, 0.29, 0.15], [0.7100000000000001, 0.85, 0.57], [0.57, 0.01, 0.57], [0.01, 0.85, 0.43], [0.01, 0.01, 0.01], [0.85, 0.01, 0.43], [0.57, 0.43, 0.57], [0.85, 0.01, 0.57], [0.01, 0.43, 0.43], [0.01, 0.29, 0.85], [0.57, 0.57, 0.7100000000000001], [0.7100000000000001, 0.29, 0.57], [0.57, 0.7100000000000001, 0.43], [0.29, 0.15, 0.01], [0.57, 0.15, 0.15], [0.85, 0.57, 0.85], [0.85, 0.29, 0.85], [0.85, 0.15, 0.01], [0.85, 0.7100000000000001, 0.01], [0.01, 0.57, 0.15], [0.43, 0.01, 0.43], [0.57, 0.15, 0.85], [0.01, 0.29, 0.57], [0.29, 0.85, 0.43], [0.57, 0.29, 0.43], [0.43, 0.01, 0.29], [0.15, 0.85, 0.7100000000000001], [0.85, 0.57, 0.43], [0.01, 0.15, 0.57], [0.7100000000000001, 0.7100000000000001, 0.29], [0.7100000000000001, 0.15, 0.57], [0.43, 0.43, 0.29], [0.7100000000000001, 0.43, 0.43], [0.01, 0.43, 0.57], [0.57, 0.01, 0.15], [0.57, 0.57, 0.01], [0.29, 0.01, 0.29], [0.7100000000000001, 0.01, 0.29], [0.85, 0.85, 0.7100000000000001], [0.85, 0.15, 0.29], [0.43, 0.29, 0.57], [0.43, 0.43, 0.85], [0.85, 0.15, 0.85], [0.57, 0.85, 0.29], [0.57, 0.7100000000000001, 0.01], [0.7100000000000001, 0.85, 0.15], [0.85, 0.7100000000000001, 0.43], [0.01, 0.15, 0.01], [0.85, 0.29, 0.43], [0.43, 0.85, 0.15], [0.15, 0.01, 0.15], [0.7100000000000001, 0.7100000000000001, 0.85], [0.43, 0.29, 0.01], [0.15, 0.43, 0.29], [0.7100000000000001, 0.57, 0.15], [0.29, 0.85, 0.29], [0.29, 0.7100000000000001, 0.57], [0.57, 0.85, 0.7100000000000001], [0.15, 0.01, 0.85], [0.43, 0.15, 0.57], [0.57, 0.57, 0.15], [0.01, 0.57, 0.01], [0.15, 0.29, 0.57], [0.29, 0.57, 0.43], [0.15, 0.7100000000000001, 0.01], [0.15, 0.15, 0.15], [0.43, 0.29, 0.15], [0.7100000000000001, 0.29, 0.7100000000000001], [0.7100000000000001, 0.85, 0.43], [0.15, 0.29, 0.7100000000000001], [0.15, 0.43, 0.57], [0.01, 0.7100000000000001, 0.01], [0.85, 0.29, 0.01], [0.15, 0.01, 0.57], [0.29, 0.29, 0.7100000000000001], [0.15, 0.7100000000000001, 0.29], [0.01, 0.15, 0.43], [0.7100000000000001, 0.01, 0.15], [0.57, 0.43, 0.01], [0.85, 0.43, 0.01], [0.43, 0.85, 0.7100000000000001], [0.85, 0.43, 0.43], [0.85, 0.01, 0.15], [0.01, 0.43, 0.85], [0.15, 0.15, 0.7100000000000001], [0.29, 0.57, 0.85], [0.43, 0.15, 0.15], [0.29, 0.85, 0.85], [0.15, 0.57, 0.29], [0.85, 0.85, 0.85], [0.29, 0.43, 0.43], [0.01, 0.43, 0.29], [0.43, 0.15, 0.7100000000000001], [0.7100000000000001, 0.01, 0.57], [0.7100000000000001, 0.43, 0.15], [0.01, 0.85, 0.01], [0.85, 0.01, 0.7100000000000001], [0.57, 0.43, 0.43], [0.57, 0.85, 0.01], [0.01, 0.57, 0.43], [0.15, 0.15, 0.01], [0.85, 0.43, 0.85], [0.57, 0.15, 0.29], [0.7100000000000001, 0.7100000000000001, 0.57], [0.57, 0.01, 0.85], [0.29, 0.43, 0.15], [0.7100000000000001, 0.57, 0.7100000000000001], [0.43, 0.7100000000000001, 0.85], [0.01, 0.15, 0.15], [0.85, 0.85, 0.57], [0.43, 0.85, 0.01], [0.15, 0.15, 0.85], [0.29, 0.29, 0.43], [0.29, 0.43, 0.57], [0.7100000000000001, 0.29, 0.85], [0.15, 0.15, 0.43], [0.85, 0.7100000000000001, 0.85], [0.85, 0.15, 0.43], [0.43, 0.43, 0.15], [0.57, 0.7100000000000001, 0.15], [0.7100000000000001, 0.43, 0.57], [0.7100000000000001, 0.43, 0.01], [0.85, 0.29, 0.29], [0.85, 0.15, 0.15], [0.43, 0.57, 0.85], [0.01, 0.85, 0.29], [0.29, 0.7100000000000001, 0.15], [0.57, 0.85, 0.57], [0.43, 0.43, 0.57], [0.01, 0.7100000000000001, 0.7100000000000001], [0.57, 0.15, 0.57], [0.57, 0.57, 0.43], [0.85, 0.57, 0.57], [0.85, 0.7100000000000001, 0.7100000000000001], [0.57, 0.7100000000000001, 0.85], [0.15, 0.85, 0.85], [0.29, 0.57, 0.57], [0.15, 0.7100000000000001, 0.85], [0.57, 0.01, 0.29], [0.29, 0.7100000000000001, 0.01], [0.7100000000000001, 0.29, 0.15], [0.85, 0.01, 0.85], [0.29, 0.01, 0.57], [0.29, 0.01, 0.7100000000000001], [0.7100000000000001, 0.85, 0.29], [0.85, 0.29, 0.7100000000000001], [0.43, 0.15, 0.43], [0.01, 0.01, 0.15], [0.01, 0.7100000000000001, 0.57], [0.7100000000000001, 0.15, 0.01], [0.7100000000000001, 0.15, 0.15], [0.29, 0.29, 0.85], [0.01, 0.43, 0.7100000000000001], [0.57, 0.15, 0.01], [0.85, 0.15, 0.7100000000000001], [0.43, 0.43, 0.01], [0.29, 0.85, 0.57], [0.01, 0.29, 0.43], [0.57, 0.43, 0.29], [0.43, 0.29, 0.43], [0.85, 0.7100000000000001, 0.29], [0.7100000000000001, 0.85, 0.85], [0.43, 0.43, 0.43], [0.43, 0.29, 0.7100000000000001], [0.7100000000000001, 0.57, 0.57], [0.57, 0.29, 0.85], [0.01, 0.15, 0.7100000000000001], [0.7100000000000001, 0.7100000000000001, 0.15], [0.15, 0.85, 0.01], [0.43, 0.7100000000000001, 0.7100000000000001], [0.43, 0.57, 0.43], [0.7100000000000001, 0.01, 0.85], [0.29, 0.43, 0.29], [0.57, 0.15, 0.7100000000000001], [0.29, 0.57, 0.15], [0.15, 0.29, 0.43], [0.43, 0.85, 0.57], [0.43, 0.57, 0.57], [0.7100000000000001, 0.01, 0.01], [0.85, 0.85, 0.29], [0.15, 0.01, 0.29], [0.85, 0.29, 0.15], [0.15, 0.01, 0.01], [0.01, 0.01, 0.57], [0.15, 0.57, 0.15], [0.15, 0.43, 0.85], [0.01, 0.01, 0.7100000000000001], [0.85, 0.15, 0.57], [0.29, 0.15, 0.29], [0.15, 0.29, 0.15], [0.43, 0.85, 0.43], [0.01, 0.15, 0.29], [0.85, 0.7100000000000001, 0.15], [0.01, 0.01, 0.85], [0.7100000000000001, 0.57, 0.85], [0.01, 0.85, 0.57], [0.29, 0.85, 0.7100000000000001], [0.15, 0.01, 0.7100000000000001], [0.85, 0.57, 0.15], [0.15, 0.57, 0.85], [0.15, 0.43, 0.15], [0.15, 0.85, 0.57], [0.7100000000000001, 0.85, 0.01], [0.7100000000000001, 0.01, 0.7100000000000001], [0.15, 0.43, 0.43], [0.01, 0.57, 0.7100000000000001], [0.43, 0.01, 0.57], [0.01, 0.57, 0.57], [0.57, 0.43, 0.7100000000000001], [0.7100000000000001, 0.29, 0.29], [0.15, 0.43, 0.7100000000000001], [0.57, 0.43, 0.15], [0.01, 0.7100000000000001, 0.29], [0.7100000000000001, 0.57, 0.01], [0.01, 0.29, 0.15], [0.29, 0.85, 0.01], [0.57, 0.29, 0.57], [0.85, 0.43, 0.29], [0.7100000000000001, 0.43, 0.29], [0.29, 0.7100000000000001, 0.85], [0.85, 0.57, 0.01], [0.01, 0.29, 0.7100000000000001], [0.15, 0.57, 0.7100000000000001], [0.85, 0.57, 0.7100000000000001], [0.85, 0.43, 0.7100000000000001], [0.15, 0.57, 0.43], [0.15, 0.85, 0.29], [0.15, 0.29, 0.85], [0.7100000000000001, 0.29, 0.43], [0.15, 0.15, 0.29], [0.43, 0.7100000000000001, 0.01], [0.29, 0.7100000000000001, 0.29], [0.7100000000000001, 0.7100000000000001, 0.43], [0.29, 0.85, 0.15], [0.43, 0.15, 0.29], [0.29, 0.01, 0.15], [0.57, 0.01, 0.01], [0.85, 0.85, 0.15], [0.43, 0.7100000000000001, 0.15], [0.43, 0.7100000000000001, 0.29], [0.7100000000000001, 0.57, 0.43], [0.29, 0.29, 0.57], [0.29, 0.01, 0.43], [0.85, 0.7100000000000001, 0.57], [0.57, 0.29, 0.7100000000000001], [0.43, 0.29, 0.29], [0.7100000000000001, 0.43, 0.7100000000000001], [0.43, 0.57, 0.29], [0.43, 0.01, 0.15], [0.15, 0.7100000000000001, 0.57], [0.01, 0.29, 0.29], [0.29, 0.01, 0.01], [0.7100000000000001, 0.15, 0.85], [0.57, 0.7100000000000001, 0.29], [0.57, 0.7100000000000001, 0.57], [0.15, 0.29, 0.01], [0.29, 0.43, 0.01], [0.7100000000000001, 0.15, 0.7100000000000001], [0.85, 0.85, 0.43], [0.7100000000000001, 0.15, 0.29], [0.7100000000000001, 0.7100000000000001, 0.7100000000000001], [0.29, 0.57, 0.29], [0.85, 0.43, 0.57], [0.01, 0.57, 0.29], [0.57, 0.01, 0.43], [0.01, 0.29, 0.01], [0.29, 0.01, 0.85], [0.43, 0.57, 0.15], [0.85, 0.85, 0.01], [0.29, 0.15, 0.43], [0.29, 0.29, 0.15], [0.01, 0.43, 0.01], [0.43, 0.85, 0.85], [0.15, 0.7100000000000001, 0.7100000000000001], [0.15, 0.85, 0.43], [0.7100000000000001, 0.85, 0.7100000000000001], [0.7100000000000001, 0.01, 0.43], [0.15, 0.43, 0.01], [0.43, 0.57, 0.01], [0.7100000000000001, 0.57, 0.29], [0.01, 0.85, 0.85], [0.01, 0.85, 0.7100000000000001], [0.01, 0.7100000000000001, 0.85], [0.43, 0.7100000000000001, 0.43], [0.43, 0.15, 0.01], [0.57, 0.85, 0.43], [0.85, 0.43, 0.15], [0.01, 0.15, 0.85], [0.85, 0.29, 0.57], [0.01, 0.01, 0.43], [0.57, 0.01, 0.7100000000000001], [0.29, 0.29, 0.01], [0.57, 0.43, 0.85], [0.43, 0.15, 0.85], [0.01, 0.7100000000000001, 0.43], [0.15, 0.57, 0.57], [0.15, 0.15, 0.57], [0.29, 0.43, 0.85], [0.43, 0.01, 0.01], [0.57, 0.57, 0.85], [0.15, 0.7100000000000001, 0.43], [0.43, 0.01, 0.85], [0.15, 0.01, 0.43], [0.43, 0.57, 0.7100000000000001], [0.29, 0.15, 0.85], [0.15, 0.85, 0.15], [0.7100000000000001, 0.43, 0.85], [0.01, 0.43, 0.15], [0.57, 0.57, 0.57]]
2 |
--------------------------------------------------------------------------------