Source code for vision_unlearning.benchmarks.I_care.configuration

# Configuration for the specific setup described in the paper
# TODO: all this metadata should be calculated from the files in huggingface
# Or at least some clean json declaring these values...

from __future__ import annotations

from typing import Any, Dict, List, Literal, Optional, Tuple

# Petty formatted values
domain_unlearning_algorithm = ["FADE", "Munba", "UCE"]
domain_task = ["Breeds", "Scenes", "People"]
domain_attribute = {
    "Breeds": [
        #'dataset_n_original',
        'group',
        'section',
        'country',
        #'name_akc',
        #'description',
        'temperament',
        'popularity',
        'min_height',
        'max_height',
        'min_weight',
        'max_weight',
        'min_expectancy',
        'max_expectancy',
        'group_akc',
        'grooming_frequency_value',
        'grooming_frequency_category',
        'shedding_value',
        'shedding_category',
        'energy_level_value',
        'energy_level_category',
        'trainability_value',
        'trainability_category',
        'demeanor_value',
        'demeanor_category',
        #'URL',
        #'Pronunciation',
        #'Other Names',
        #'Nickname',
        'Origin',
        'group_pawsome',
        'Size',
        'Male Height Min (in)',
        'Male Height Max (in)',
        'Male Height Min (cm)',
        'Male Height Max (cm)',
        'Female Height Min (in)',
        'Female Height Max (in)',
        'Female Height Min (cm)',
        'Female Height Max (cm)',
        'Male Weight Min (lbs)',
        'Male Weight Max (lbs)',
        'Male Weight Min (kg)',
        'Male Weight Max (kg)',
        'Female Weight Min (lbs)',
        'Female Weight Max (lbs)',
        'Female Weight Min (kg)',
        'Female Weight Max (kg)',
        'Coat Length',
        'Coat Type',
        'Double Coat',
        'Hypoallergenic',
        'Affection Rating',
        'Playfulness Rating',
        'Protectiveness Rating',
        'Territoriality Rating',
        'Prey Drive Rating',
        'Barking Rating',
        'Good with Children Rating',
        'Good with Adults Rating',
        'Good with Dogs Rating',
        'Good with Pets Rating',
        'Good with Strangers Rating',
        'Sociability Rating',
        'Sensitivity Rating',
        'Separation Anxiety Rating',
        'Energy Rating',
        'Intelligence Rating',
        'Mental Stimulation Rating',
        'Obedience Rating',
        'Trainability Rating',
        'Stubbornness Rating',
        'Attention Span',
        'Shedding Rating',
        'Grooming Rating',
        'Drooling Rating',
        'Lifespan Min',
        'Lifespan Max',
        'Health Rating',
        'Dental Issues Rating',
        'Ear Issues Rating',
        'Eye Issues Rating',
        'Owner Experience Rating',
        'First Time Owner',
        'Apartment Living Rating',
        'grooming_frequency_category_binary',
    ],
    "Scenes": [
        'sailing/ boating',
        'driving',
        'biking',
        'transporting things or people',
        'sunbathing',
        'vacationing/ touring',
        'hiking',
        'climbing',
        'camping',
        'reading',
        'studying/ learning',
        'teaching/ training',
        'research',
        'diving',
        'swimming',
        'bathing',
        'eating',
        'cleaning',
        'socializing',
        'congregating',
        'waiting in line/ queuing',
        'competing',
        'sports',
        'exercise',
        'playing',
        'gaming',
        'spectating/ being in an audience',
        'farming',
        'constructing/ building',
        'shopping',
        'medical activity',
        'working',
        'using tools',
        'digging',
        'conducting business',
        'praying',
        'fencing',
        'railing',
        'wire',
        'railroad',
        'trees',
        'grass',
        'vegetation',
        'shrubbery',
        'foliage',
        'leaves',
        'flowers',
        'asphalt',
        'pavement',
        'shingles',
        'carpet',
        'brick',
        'tiles',
        'concrete',
        'metal',
        'paper',
        'wood (not part of a tree)',
        'vinyl/ linoleum',
        'rubber/ plastic',
        'cloth',
        'sand',
        'rock/stone',
        'dirt/soil',
        'marble',
        'glass',
        'waves/ surf',
        'ocean',
        'running water',
        'still water',
        'ice',
        'snow',
        'clouds',
        'smoke',
        'fire',
        'natural light',
        'direct sun/sunny',
        'electric/indoor lighting',
        'aged/ worn',
        'glossy',
        'matte',
        'sterile',
        'moist/ damp',
        'dry',
        'dirty',
        'rusty',
        'warm',
        'cold',
        'natural',
        'man-made',
        'open area',
        'semi-enclosed area',
        'enclosed area',
        'far-away horizon',
        'no horizon',
        'rugged scene',
        'mostly vertical components',
        'mostly horizontal components',
        'symmetrical',
        'cluttered space',
        'scary',
        'soothing',
        'stressful',
        #'dataset_n_original',
    ],
    "People": [
        #'dataset_n_original',
        'birthyear',
        'gender',
        'occupation',
        'bplace_country',
        'hpi',
        'race',
        'occupation_simplified',
        'hpi_bin',
    ],
}
domain_entity = {
    "Breeds": [
        'dogo argentino',
        'griffon bruxellois dog',
        'griffon belge dog',
        'norwegian elkhound black dog',
        'norwegian elkhound grey dog',
        'tibetan terrier dog',
        'leonberger dog',
        'pekingese dog',
        'flat coated retriever dog',
        'bosnian and herzegovinian - croatian shepherd dog',
        'border terrier dog',
        'basenji dog',
        'american staffordshire terrier dog',
        'bouvier des ardennes dog',
        'bouvier des flandres dog',
        'nova scotia duck tolling retriever dog',
        'coton de tulear dog',
        'staffordshire bull terrier dog',
        'rottweiler dog',
        'chinese crested dog',
        'giant schnauzer dog',
        'chow chow dog',
        'great swiss mountain dog',
        'old english sheepdog',
        'lhasa apso dog',
        'miniature pinscher dog',
        'cairn terrier dog',
        'welsh corgi (cardigan) dog',
        'dogue de bordeaux',
        'shar pei dog',
        'bull terrier dog',
        'airedale terrier dog',
        'samoyed dog',
        'alaskan malamute dog',
        'scottish terrier dog',
        'australian cattle dog',
        'continental toy spaniel dog',
        'irish soft coated wheaten terrier dog',
        'english cocker spaniel dog',
        'bullmastiff dog',
        'portuguese water dog',
        'bulldog',
        'st. bernard dog',
        'akita dog',
        'bichon frise dog',
        'chesapeake bay retriever dog',
        'shiba dog',
        'belgian shepherd dog',
        'west highland white terrier dog',
        'newfoundland dog',
        'french bulldog',
        'maltese dog',
        'border collie dog',
        'miniature american shepherd dog',
        'chihuahua dog',
        'golden retriever dog',
        'pug dog',
        'english springer spaniel dog',
        'shetland sheepdog',
        'canarian warren hound dog',
        'bernese mountain dog',
        'boston terrier dog',
        'german shepherd dog',
        'norwegian lundehund dog',
        'miniature schnauzer dog',
        'berger de beauce dog',
        'cesky terrier dog',
        'finnish spitz dog',
        'finnish lapponian dog',
        "cirneco dell'etna dog",
        'pyrenean sheepdog - smooth faced',
        'sussex spaniel dog',
        'king charles spaniel dog',
        'cavalier king charles spaniel dog',
        'canaan dog',
        'skye terrier dog',
        'dandie dinmont terrier dog',
        'irish glen of imaal terrier dog',
        'komondor dog',
        'polish lowland sheepdog',
        'australian shepherd dog',
        'american water spaniel dog',
        'sealyham terrier dog',
        'kuvasz dog',
        'curly coated retriever dog',
        'puli dog',
        'irish water spaniel dog',
        'spanish water dog',
        'nederlandse kooikerhondje dog',
        'field spaniel dog',
        'affenpinscher dog',
        'lakeland terrier dog',
        'clumber spaniel dog',
        'bedlington terrier dog',
        'australian terrier dog',
        'tibetan mastiff dog',
        'norfolk terrier dog',
        'tibetan spaniel dog',
        'russian black terrier dog',
        'german spitz dog',
    ],
    "Scenes": [
        'abbey',
        'waterfall_cascade',
        'velodrome_outdoor',
        'volleyball_court_outdoor',
        'arena_hockey',
        'arena_basketball',
        'terrace_farm',
        'tree_farm',
        'tundra',
        'valley',
        'stone_circle',
        'volcano',
        'waterfall_cataract',
        'pavilion',
        'waterfall_fan',
        'waterfall_plunge',
        'watering_hole',
        'wave',
        'wheat_field',
        'waterfall_block',
        'bamboo_forest',
        'snowfield',
        'sea_cliff',
        'moor',
        'velodrome_indoor',
        'track_outdoor',
        'track_indoor',
        'tennis_court_outdoor',
        'athletic_field_outdoor',
        'badminton_court_indoor',
        'badminton_court_outdoor',
        'baseball_field',
        'basketball_court_indoor',
        'basketball_court_outdoor',
        'batters_box',
        'batting_cage_indoor',
        'batting_cage_outdoor',
        'boxing_ring',
        'bullpen',
        'football_field',
        'ice_skating_rink_indoor',
        'martial_arts_gym',
        'pitchers_mound',
        'soccer_field',
        'squash_court',
        'stadium_baseball',
        'stadium_football',
        'stadium_soccer',
        'tennis_court_indoor',
        'mountain',
        'mountain_path',
        'mountain_snowy',
        'observatory_indoor',
        'nursing_home',
        'packaging_plant',
        'pagoda',
        'palace',
        'pantry',
        'pier',
        'picnic_area',
        'piano_store',
        'physics_laboratory',
        'phone_booth',
        'pharmacy',
        'pet_shop',
        'jail_indoor',
        'pedestrian_overpass_outdoor',
        'patio',
        'particle_accelerator',
        'parlor',
        'parking_lot',
        'parking_garage_outdoor',
        'parking_garage_indoor',
        'parade_ground',
        'oast_house',
        'observatory_outdoor',
        'oasis',
        'office',
        'ocean',
        'orchard',
        'ski_slope',
        'outcropping',
        'pasture',
        'pond',
        'rainforest',
        'river',
        'rock_arch',
        'sandbar',
        'savanna',
        'park',
        'badlands',
        'ossuary',
        'organ_loft_exterior',
        'optician',
        'operating_room',
        'oilrig',
        'oil_refinery_outdoor',
        'office_cubicles',
        'office_building',
        'wrestling_ring_indoor',
    ],
    "People": [
        'George_W_Bush',
        'Colin_Powell',
        'Tony_Blair',
        'Donald_Rumsfeld',
        'Ariel_Sharon',
        'Junichiro_Koizumi',
        'John_Ashcroft',
        'Jacques_Chirac',
        'Serena_Williams',
        'Vladimir_Putin',
        'Gloria_Macapagal_Arroyo',
        'Arnold_Schwarzenegger',
        'Jennifer_Capriati',
        'Lleyton_Hewitt',
        'Laura_Bush',
        'Alejandro_Toledo',
        'Andre_Agassi',
        'Silvio_Berlusconi',
        'Tom_Ridge',
        'Megawati_Sukarnoputri',
        'Vicente_Fox',
        'Roh_Moo-hyun',
        'David_Beckham',
        'John_Negroponte',
        'Guillermo_Coria',
        'Mahmoud_Abbas',
        'Jack_Straw',
        'Juan_Carlos_Ferrero',
        'Ricardo_Lagos',
        'Gray_Davis',
        'Tom_Daschle',
        'Atal_Bihari_Vajpayee',
        'Winona_Ryder',
        'Tiger_Woods',
        'Lindsay_Davenport',
        'Naomi_Watts',
        'Pete_Sampras',
        'Jennifer_Lopez',
        'Jennifer_Aniston',
        'Carlos_Menem',
        'Angelina_Jolie',
        'Igor_Ivanov',
        'Julianne_Moore',
        'John_Howard',
        'Joschka_Fischer',
        'Nicole_Kidman',
        'Tim_Henman',
        'Lance_Armstrong',
        'Michael_Schumacher',
        'Jean_Charest',
        'Spencer_Abraham',
        'Venus_Williams',
        'Trent_Lott',
        'Halle_Berry',
        'Dominique_de_Villepin',
        'Meryl_Streep',
        'Pierce_Brosnan',
        'Andy_Roddick',
        'Norah_Jones',
        'Kim_Clijsters',
        'David_Nalbandian',
        'Roger_Federer',
        'James_Blake',
        'Britney_Spears',
        'Edmund_Stoiber',
        'Salma_Hayek',
        'Jackie_Chan',
        'Joe_Lieberman',
        'Jennifer_Garner',
        'Michael_Jackson',
        'Jeb_Bush',
        'Harrison_Ford',
        'Adrien_Brody',
        'Howard_Dean',
        'Rubens_Barrichello',
        'Anna_Kournikova',
        'Mike_Weir',
        'Mark_Philippoussis',
        'Ian_Thorpe',
        'Muhammad_Ali',
        'Kate_Hudson',
        'Colin_Farrell',
        'Ray_Romano',
        'Maria_Shriver',
        'Justin_Timberlake',
        'Bob_Hope',
        'Robert_Blake',
        'Amelia_Vega',
        'Clay_Aiken',
        'Zinedine_Zidane',
        'Valentino_Rossi',
        'Boris_Becker',
        'Elsa_Zylberstein',
        'Lance_Bass',
        'Natalie_Maines',
        'Ludivine_Sagnier',
        'George_Lopez',
        'Martina_McBride',
        'Michael_Chiklis',
        'Steffi_Graf'
    ],
}
domain_model = ["Stable Diffusion 1.4"]
domain_mp = ["Delta Clip", "Delta Brisque", "RMSE", "SSIM"]
domain_me = [
    "Emitter worst interfered brisque diff",
    "Emitter worst interfered clip diff",
    "Emitter worst interfered rmse",
    "Emitter worst interfered ssim",
    "Emitter number of interfered worse than target brisque diff",
    "Emitter number of interfered worse than target clip diff",
    "Emitter number of interfered worse than target rmse",
    "Emitter number of interfered worse than target ssim",
    "Emitter number of interfered worse than zero clip diff",
    "Emitter average brisque diff",
    "Emitter average clip diff",
    "Emitter average rmse",
    "Emitter average ssim",
    "Receiver worst interfered brisque diff",
    "Receiver worst interfered clip diff",
    "Receiver worst interfered rmse",
    "Receiver worst interfered ssim",
    "Receiver number of interfered worse than target brisque diff",
    "Receiver number of interfered worse than target clip diff",
    "Receiver number of interfered worse than target rmse",
    "Receiver number of interfered worse than target ssim",
    "Receiver number of interfered worse than zero clip diff",
    "Receiver average brisque diff",
    "Receiver average clip diff",
    "Receiver average rmse",
    "Receiver average ssim",
    "Emitter minus receiver worst interfered brisque diff",
    "Emitter minus receiver worst interfered clip diff",
    "Emitter minus receiver worst interfered rmse",
    "Emitter minus receiver worst interfered ssim",
    "Emitter minus receiver number of interfered worse than target brisque diff",
    "Emitter minus receiver number of interfered worse than target clip diff",
    "Emitter minus receiver number of interfered worse than target rmse",
    "Emitter minus receiver number of interfered worse than target ssim",
    "Emitter minus receiver number of interfered worse than zero clip diff",
    "Emitter minus receiver average brisque diff",
    "Emitter minus receiver average clip diff",
    "Emitter minus receiver average rmse",
    "Emitter minus receiver average ssim",
]
domain_s = [
    "Clip Cosine Similarity",
    "Jacc Similarity",
]
domain_l = [
    "Clip Embedding",
]

# Types (as they appear in the code/files)
type_unlearning_algorithm = Literal["distil", "munba", "uce"]
type_task = Literal["breeds", "scenes", "people"]
type_model = Literal["sd1.4"]
type_mp = Literal["brisque_diff", "clip_diff", "rmse", "ssim"]
type_me = Literal[
    "Emitter worst interfered brisque diff",
    "Emitter worst interfered clip diff",
    "Emitter worst interfered rmse",
    "Emitter worst interfered ssim",
    "Emitter number of interfered worse than target brisque diff",
    "Emitter number of interfered worse than target clip diff",
    "Emitter number of interfered worse than target rmse",
    "Emitter number of interfered worse than target ssim",
    "Emitter number of interfered worse than zero clip diff",
    "Emitter average brisque diff",
    "Emitter average clip diff",
    "Emitter average rmse",
    "Emitter average ssim",
    "Receiver worst interfered brisque diff",
    "Receiver worst interfered clip diff",
    "Receiver worst interfered rmse",
    "Receiver worst interfered ssim",
    "Receiver number of interfered worse than target brisque diff",
    "Receiver number of interfered worse than target clip diff",
    "Receiver number of interfered worse than target rmse",
    "Receiver number of interfered worse than target ssim",
    "Receiver number of interfered worse than zero clip diff",
    "Receiver average brisque diff",
    "Receiver average clip diff",
    "Receiver average rmse",
    "Receiver average ssim",
    "Emitter minus receiver worst interfered brisque diff",
    "Emitter minus receiver worst interfered clip diff",
    "Emitter minus receiver worst interfered rmse",
    "Emitter minus receiver worst interfered ssim",
    "Emitter minus receiver number of interfered worse than target brisque diff",
    "Emitter minus receiver number of interfered worse than target clip diff",
    "Emitter minus receiver number of interfered worse than target rmse",
    "Emitter minus receiver number of interfered worse than target ssim",
    "Emitter minus receiver number of interfered worse than zero clip diff",
    "Emitter minus receiver average brisque diff",
    "Emitter minus receiver average clip diff",
    "Emitter minus receiver average rmse",
    "Emitter minus receiver average ssim",
    "Embedding specificity ratio",
]
type_s = Literal[
    "clip",
    "jacc",
    "dino",
]

type_l = Literal[
    "clip_embedding",
]

type_regression_algorithm = Literal[
    "linear_regression",
    "random_forest",
]

# And converting between them
GUI_TO_BACKEND = {
    "unlearning_algorithm": {
        "FADE": "distil",
        "Munba": "munba",
        "UCE": "uce",
    },
    "task": {
        "Breeds": "breeds",
        "Scenes": "scenes",
        "People": "people",
    },
    "model": {
        "Stable Diffusion 1.4": "sd1.4",
    },
    "interference_pair": {
        "Delta Clip": "clip_diff",
        "Delta Brisque": "brisque_diff",
        "RMSE": "rmse",
        "SSIM": "ssim",
    },
    "similarity_metric": {
        "Clip Cosine Similarity": "clip",
        "Jacc Similarity": "jacc",
        "DINOv2 Cosine Similarity": "dino",
    },
    "latent_embedding": {
        "Clip Embedding": "clip_embedding",
    },
}


type_direction = Literal["↑", "↓"]

mp_to_direction: Dict[type_mp, type_direction] = {  # Higher =  more interference
    "brisque_diff": "↓",
    "clip_diff": "↑",  # zero = no change. Negative = generation actually got better
    "rmse": "↓",
    "ssim": "↑",
}
s_to_direction: Dict[type_s, type_direction] = {
    "clip": "↑",
    "jacc": "↑",
    "dino": "↑",
}
# me_to_direction can... be infered?


task_to_attributes_of_interest = {
    "breeds": [
        "grooming_frequency_category_binary",  # (a continuous attribute describing how often brushing is required; discretized into two bins based on quartiles)
        "supergroup",  # (categorical, with values such as retrievers and terriers)
    ],
    "scenes": [
        "sports",
        "natural",
    ],
    "people": [
        "hpi_bin",
        "occupation_simplified",
    ]
}


# The method's hyperparameter is specially problematic to map/find, because i initially thought it should
# be configurable and then I chagned my mind. Sometimes it can be infered (like in `choose_metric_column_interference_per_entity`),
# Also, in the actual slurm scripts they are hardcoded all over
# But sometimes I use this hardcoded mapping:
unlearning_algorithm_to_epochs = {
    'breeds': {
        'distil': 100,
        'munba': 100,
        'uce': 0,
    },
    'scenes': {
        'distil': 100,
        'munba': 100,
        'uce': 0,
    },
    'people': {
        'distil': 400,
        'munba': 200,
        'uce': 0,
    },
}



[docs] def convert_params_from_gui_to_backend(params: Dict[str, Any]) -> Dict[str, Any]: """ Convert GUI values to backend literal values. Unknown keys are passed through unchanged. None stays None. """ converted_params: Dict[str, Any] = {} for key, value in params.items(): if value is None: converted_params[key] = None continue mapping = GUI_TO_BACKEND.get(key) if mapping is not None: converted_params[key] = mapping.get(value, value) else: converted_params[key] = value return converted_params