@@ -35,13 +35,13 @@ void test(po::variables_map &vm, torch::Device &device, GAN_Generator &gen, GAN_
3535 size_t search_epoch;
3636 float ave_anomaly_score, ave_res_loss, ave_dis_loss;
3737 double seconds, ave_time;
38- std::string path, result_dir, fname;
38+ std::string path, result_dir, output_dir, heatmap_dir, fname;
3939 std::string dataroot;
4040 std::ofstream ofs, ofs_score;
4141 std::chrono::system_clock::time_point start, end;
4242 std::tuple<torch::Tensor, std::vector<std::string>> data;
4343 std::tuple<torch::Tensor, torch::Tensor, torch::Tensor> anomaly_score_with_alpha;
44- torch::Tensor image, z, output;
44+ torch::Tensor image, z, output, heatmap ;
4545 torch::Tensor loss, anomaly_score, res_loss, dis_loss;
4646 datasets::ImageFolderWithPaths dataset;
4747 DataLoader::ImageFolderWithPaths dataloader;
@@ -73,6 +73,8 @@ void test(po::variables_map &vm, torch::Device &device, GAN_Generator &gen, GAN_
7373 gen->eval ();
7474 dis->eval ();
7575 result_dir = vm[" test_result_dir" ].as <std::string>(); fs::create_directories (result_dir);
76+ output_dir = result_dir + " /output" ; fs::create_directories (output_dir);
77+ heatmap_dir = result_dir + " /heatmap" ; fs::create_directories (heatmap_dir);
7678 ofs.open (result_dir + " /loss.txt" , std::ios::out);
7779 ofs_score.open (result_dir + " /anomaly_score.txt" , std::ios::out);
7880 while (dataloader (data)){
@@ -113,9 +115,13 @@ void test(po::variables_map &vm, torch::Device &device, GAN_Generator &gen, GAN_
113115 ofs << ' <' << std::get<1 >(data).at (0 ) << " > anomaly_score:" << anomaly_score.item <float >() << " res:" << res_loss.item <float >() << " dis:" << dis_loss.item <float >() << " (time:" << ave_time << ' )' << std::endl;
114116 ofs_score << anomaly_score.item <float >() << std::endl;
115117
116- fname = result_dir + ' /' + std::get<1 >(data).at (0 );
118+ fname = output_dir + ' /' + std::get<1 >(data).at (0 );
117119 visualizer::save_image (output.detach (), fname, /* range=*/ output_range, /* cols=*/ 1 , /* padding=*/ 0 );
118120
121+ fname = heatmap_dir + ' /' + std::get<1 >(data).at (0 );
122+ heatmap = visualizer::create_heatmap (torch::abs (image - output).mean (/* dim=*/ 1 , /* keepdim=*/ true ), /* range=*/ {0 , (output_range.second - output_range.first ) * vm[" heatmap_max" ].as <float >()});
123+ visualizer::save_image (heatmap.detach (), fname, /* range=*/ {0.0 , 1.0 }, /* cols=*/ 1 , /* padding=*/ 0 );
124+
119125 }
120126
121127 // (6) Calculate Average
0 commit comments