r"""Tool to validate submission for adversarial competition. Usage: python validate_submission.py \ --submission_filename=FILENAME \ --submission_type=TYPE \ [--use_gpu] Where: FILENAME - filename of the submission TYPE - type of the submission, one of the following without quotes: "attack", "targeted_attack" or "defense" --use_gpu - if argument specified then submission will be run on GPU using nvidia-docker, otherwise will be run on CPU. """ from __future__ import absolute_import from __future__ import division from __future__ import print_function import argparse import logging import random import subprocess import tempfile import validate_submission_lib def print_in_box(text): print('') print('*' * (len(text) + 6)) print('** ' + text + ' **') print('*' * (len(text) + 6)) print('') def main(args): print_in_box('Validating submission ' + args.submission_filename) random.seed() temp_dir = args.temp_dir delete_temp_dir = False if not temp_dir: temp_dir = tempfile.mkdtemp() logging.info('Created temporary directory: %s', temp_dir) delete_temp_dir = True validator = validate_submission_lib.SubmissionValidator(temp_dir, args.use_gpu) if validator.validate_submission(args.submission_filename, args.submission_type): print_in_box('Submission is VALID!') else: print_in_box('Submission is INVALID, see log messages for details') if delete_temp_dir: logging.info('Deleting temporary directory: %s', temp_dir) subprocess.call(['rm', '-rf', temp_dir]) if __name__ == '__main__': parser = argparse.ArgumentParser( description='Submission validation script.') parser.add_argument('--submission_filename', required=True, help='Filename of the submission.') parser.add_argument('--submission_type', required=True, help='Type of the submission, ' 'one of "attack", "targeted_attack" or "defense"') parser.add_argument('--temp_dir', required=False, default='', help='Temporary directory to extract and run submission. ' 'If empty then temporary directory will be created ' 'by the script and then deleted in the end.') parser.add_argument('--use_gpu', dest='use_gpu', action='store_true') parser.add_argument('--nouse_gpu', dest='use_gpu', action='store_false') parser.set_defaults(use_gpu=False) loggint_format = ('%(asctime)s - %(filename)s:%(lineno)d - %(levelname)s -- ' '%(message)s') logging.basicConfig(format=loggint_format, level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S') main(parser.parse_args())