diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..ee602e56d403d0a8f9f476529a40ddea730693bf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,53 @@ +# This is example dockerfile for Food Recognition Benchmark @ AIcrowd + +FROM nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04 + +ENV DEBIAN_FRONTEND=noninteractive + +# Install needed apt packages +COPY apt.txt apt.txt +RUN apt -qq update && xargs -a apt.txt apt -qq install -y --no-install-recommends \ + && rm -rf /var/cache/* + +# Create user home directory +ENV USER aicrowd +ENV HOME_DIR /home/$USER + +# Replace HOST_UID/HOST_GUID with your user / group id +ENV HOST_UID 1001 +ENV HOST_GID 1001 + +# Use bash as default shell, rather than sh +ENV SHELL /bin/bash + +# Set up user +RUN adduser --disabled-password \ + --gecos "Default user" \ + --uid ${HOST_UID} \ + ${USER} +USER ${USER} +WORKDIR ${HOME_DIR} +ENV CONDA_DIR ${HOME_DIR}/.conda +ENV PATH ${CONDA_DIR}/bin:${PATH} + +# Download miniconda for python +RUN wget -nv -O miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.2-Linux-x86_64.sh \ + && bash miniconda.sh -b -p ${CONDA_DIR} \ + && . ${CONDA_DIR}/etc/profile.d/conda.sh \ + && rm -rf miniconda.sh \ + && conda install pytorch==1.5.1 torchvision==0.6.1 cudatoolkit=10.1 -c pytorch \ + && conda clean -a -y +ENV FORCE_CUDA="1" + +# Install needed pypi packages +USER ${USER} +RUN pip install numpy cython --no-cache-dir +COPY --chown=1001:1001 requirements.txt requirements.txt +RUN pip install --no-cache-dir -r requirements.txt + +# (optional) +# (either add below as dependency in requirements.txt or uncomment below line) +# RUN pip install -U git+https://github.com/open-mmlab/mmdetection.git@v2.3.0 + +# Copy user files +COPY --chown=1001:1001 . ${HOME_DIR} diff --git a/aicrowd.json b/aicrowd.json index a3d14ca14ef6180ee644ffc00db836b0297db5f8..87d9d22ad76d371b576348c3762fd90f3a2f3fa5 100644 --- a/aicrowd.json +++ b/aicrowd.json @@ -3,5 +3,6 @@ "authors" : ["aicrowd-bot"], "description" : "Food Recognition Benchmark Submission", "license" : "MIT", - "gpu": false -} \ No newline at end of file + "gpu": true, + "debug": true +} diff --git a/configs/solo.py b/configs/solo.py new file mode 100644 index 0000000000000000000000000000000000000000..b7ebafeee5ba18f8c995218be24d2643cbc7ed54 --- /dev/null +++ b/configs/solo.py @@ -0,0 +1,820 @@ +dataset_type = 'CocoDataset' +data_root = 'data/coco/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='Resize', + img_scale=[(1333, 800), (1333, 768), (1333, 736), (1333, 704), + (1333, 672), (1333, 640)], + multiscale_mode='value', + keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']) +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']) + ]) +] +data = dict( + samples_per_gpu=8, + workers_per_gpu=1, + train=dict( + type='CocoDataset', + ann_file='/home/nick/iggotsul/mmdetection/data/train/annotations.json', + img_prefix='/home/nick/iggotsul/mmdetection/data/train/images', + pipeline=[ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='Resize', + img_scale=[(1333, 800), (1333, 768), (1333, 736), (1333, 704), + (1333, 672), (1333, 640)], + multiscale_mode='value', + keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict( + type='Collect', + keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']) + ], + seg_prefix='/home/nick/iggotsul/mmdetection/data/train/images', + classes= + ('bread-wholemeal', 'jam', 'water', 'bread-sourdough', 'banana', + 'soft-cheese', 'ham-raw', 'hard-cheese', 'cottage-cheese', + 'bread-half-white', 'coffee-with-caffeine', 'fruit-salad', 'pancakes', + 'tea', 'salmon-smoked', 'avocado', 'spring-onion-scallion', + 'ristretto-with-caffeine', 'ham', 'egg', 'bacon-frying', + 'chips-french-fries', 'juice-apple', 'chicken', 'tomato-raw', + 'broccoli', 'shrimp-boiled', + 'beetroot-steamed-without-addition-of-salt', 'carrot-raw', + 'chickpeas', 'french-salad-dressing', 'pasta-hornli', 'sauce-cream', + 'meat-balls', 'pasta', 'tomato-sauce', 'cheese', 'pear', 'cashew-nut', + 'almonds', 'lentils', 'mixed-vegetables', 'peanut-butter', 'apple', + 'blueberries', 'cucumber', 'cocoa-powder', + 'greek-yaourt-yahourt-yogourt-ou-yoghourt', 'maple-syrup-concentrate', + 'buckwheat-grain-peeled', 'butter', 'herbal-tea', 'mayonnaise', + 'soup-vegetable', 'wine-red', 'wine-white', + 'green-bean-steamed-without-addition-of-salt', 'sausage', + 'pizza-margherita-baked', 'salami', 'mushroom', + 'bread-meat-substitute-lettuce-sauce', 'tart', 'tea-verveine', 'rice', + 'white-coffee-with-caffeine', 'linseeds', 'sunflower-seeds', + 'ham-cooked', 'bell-pepper-red-raw', 'zucchini', 'green-asparagus', + 'tartar-sauce', 'lye-pretzel-soft', 'cucumber-pickled', + 'curry-vegetarian', 'yaourt-yahourt-yogourt-ou-yoghourt-natural', + 'soup-of-lentils-dahl-dhal', 'soup-cream-of-vegetables', + 'balsamic-vinegar', 'salmon', 'salt-cake-vegetables-filled', 'bacon', + 'orange', 'pasta-noodles', 'cream', 'cake-chocolate', + 'pasta-spaghetti', 'black-olives', 'parmesan', 'spaetzle', + 'salad-lambs-ear', 'salad-leaf-salad-green', 'potatoes-steamed', + 'white-cabbage', 'halloumi', 'beetroot-raw', 'bread-grain', + 'applesauce-unsweetened-canned', 'cheese-for-raclette', 'mushrooms', + 'bread-white', 'curds-natural-with-at-most-10-fidm', + 'bagel-without-filling', 'quiche-with-cheese-baked-with-puff-pastry', + 'soup-potato', 'bouillon-vegetable', 'beef-sirloin-steak', + 'taboule-prepared-with-couscous', 'eggplant', 'bread', + 'turnover-with-meat-small-meat-pie-empanadas', 'mungbean-sprouts', + 'mozzarella', 'pasta-penne', 'lasagne-vegetable-prepared', + 'mandarine', 'kiwi', 'french-beans', 'tartar-meat', + 'spring-roll-fried', 'pork-chop', 'caprese-salad-tomato-mozzarella', + 'leaf-spinach', 'roll-of-half-white-or-white-flour-with-large-void', + 'pasta-ravioli-stuffing', 'omelette-plain', 'tuna', 'dark-chocolate', + 'sauce-savoury', 'dried-raisins', 'ice-tea', 'kaki', 'macaroon', + 'smoothie', 'crepe-plain', 'chicken-nuggets', + 'chili-con-carne-prepared', 'veggie-burger', 'cream-spinach', 'cod', + 'chinese-cabbage', 'hamburger-bread-meat-ketchup', 'soup-pumpkin', + 'sushi', 'chestnuts', 'coffee-decaffeinated', 'sauce-soya', + 'balsamic-salad-dressing', 'pasta-twist', 'bolognaise-sauce', 'leek', + 'fajita-bread-only', 'potato-gnocchi', + 'beef-cut-into-stripes-only-meat', 'rice-noodles-vermicelli', + 'tea-ginger', 'tea-green', 'bread-whole-wheat', 'onion', 'garlic', + 'hummus', 'pizza-with-vegetables-baked', 'beer', 'glucose-drink-50g', + 'chicken-wing', 'ratatouille', 'peanut', + 'high-protein-pasta-made-of-lentils-peas', 'cauliflower', + 'quiche-with-spinach-baked-with-cake-dough', 'green-olives', + 'brazil-nut', 'eggplant-caviar', 'bread-pita', 'pasta-wholemeal', + 'sauce-pesto', 'oil', 'couscous', 'sauce-roast', 'prosecco', + 'crackers', 'bread-toast', 'shrimp-prawn-small', 'panna-cotta', + 'romanesco', 'water-with-lemon-juice', 'espresso-with-caffeine', + 'egg-scrambled-prepared', 'juice-orange', 'ice-cubes', + 'braided-white-loaf', 'emmental-cheese', 'croissant-wholegrain', + 'hazelnut-chocolate-spread-nutella-ovomaltine-caotina', 'tomme', + 'water-mineral', 'hazelnut', 'bacon-raw', 'bread-nut', + 'black-forest-tart', 'soup-miso', 'peach', 'figs', 'beef-filet', + 'mustard-dijon', 'rice-basmati', + 'mashed-potatoes-prepared-with-full-fat-milk-with-butter', + 'dumplings', 'pumpkin', 'swiss-chard', 'red-cabbage', 'spinach-raw', + 'naan-indien-bread', + 'chicken-curry-cream-coconut-milk-curry-spices-paste', + 'crunch-muesli', 'biscuits', 'bread-french-white-flour', 'meatloaf', + 'fresh-cheese', 'honey', 'vegetable-mix-peas-and-carrots', 'parsley', + 'brownie', 'dairy-ice-cream', 'tea-black', 'carrot-cake', + 'fish-fingers-breaded', 'salad-dressing', 'dried-meat', + 'chicken-breast', 'mixed-salad-chopped-without-sauce', 'feta', + 'praline', 'tea-peppermint', 'walnut', + 'potato-salad-with-mayonnaise-yogurt-dressing', 'kebab-in-pita-bread', + 'kolhrabi', 'alfa-sprouts', 'brussel-sprouts', 'bacon-cooking', + 'gruyere', 'bulgur', 'grapes', 'pork-escalope', 'chocolate-egg-small', + 'cappuccino', + 'zucchini-stewed-without-addition-of-fat-without-addition-of-salt', + 'crisp-bread-wasa', 'bread-black', 'perch-fillets-lake', 'rosti', + 'mango', 'sandwich-ham-cheese-and-butter', 'muesli', + 'spinach-steamed-without-addition-of-salt', 'fish', + 'risotto-without-cheese-cooked', 'milk-chocolate-with-hazelnuts', + 'cake-oblong', 'crisps', 'pork', 'pomegranate', 'sweet-corn-canned', + 'flakes-oat', 'greek-salad', 'cantonese-fried-rice', 'sesame-seeds', + 'bouillon', 'baked-potato', 'fennel', 'meat', 'bread-olive', + 'croutons', 'philadelphia', + 'mushroom-average-stewed-without-addition-of-fat-without-addition-of-salt', + 'bell-pepper-red-stewed-without-addition-of-fat-without-addition-of-salt', + 'white-chocolate', 'mixed-nuts', 'breadcrumbs-unspiced', 'fondue', + 'sauce-mushroom', 'tea-spice', 'strawberries', 'tea-rooibos', + 'pie-plum-baked-with-cake-dough', + 'potatoes-au-gratin-dauphinois-prepared', 'capers', 'vegetables', + 'bread-wholemeal-toast', 'red-radish', 'fruit-tart', 'beans-kidney', + 'sauerkraut', 'mustard', 'country-fries', 'ketchup', + 'pasta-linguini-parpadelle-tagliatelle', + 'chicken-cut-into-stripes-only-meat', 'cookies', 'sun-dried-tomatoe', + 'bread-ticino', 'semi-hard-cheese', 'margarine', + 'porridge-prepared-with-partially-skimmed-milk', + 'soya-drink-soy-milk', 'juice-multifruit', 'popcorn-salted', + 'chocolate-filled', 'milk-chocolate', 'bread-fruit', + 'mix-of-dried-fruits-and-nuts', 'corn', 'tete-de-moine', 'dates', + 'pistachio', 'celery', 'white-radish', 'oat-milk', 'cream-cheese', + 'bread-rye', 'witloof-chicory', 'apple-crumble', 'goat-cheese-soft', + 'grapefruit-pomelo', 'risotto-with-mushrooms-cooked', + 'blue-mould-cheese', 'biscuit-with-butter', 'guacamole', 'pecan-nut', + 'tofu', 'cordon-bleu-from-pork-schnitzel-fried', 'paprika-chips', + 'quinoa', 'kefir-drink', 'm-m-s', 'salad-rocket', 'bread-spelt', + 'pizza-with-ham-with-mushrooms-baked', 'fruit-coulis', 'plums', + 'beef-minced-only-meat', 'pizza-with-ham-baked', 'pineapple', + 'soup-tomato', 'cheddar', 'tea-fruit', 'rice-jasmin', 'seeds', + 'focaccia', 'milk', 'coleslaw-chopped-without-sauce', 'pastry-flaky', + 'curd', 'savoury-puff-pastry-stick', 'sweet-potato', 'chicken-leg', + 'croissant', 'sour-cream', 'ham-turkey', 'processed-cheese', + 'fruit-compotes', 'cheesecake', 'pasta-tortelloni-stuffing', + 'sauce-cocktail', 'croissant-with-chocolate-filling', 'pumpkin-seeds', + 'artichoke', 'champagne', 'grissini', 'sweets-candies', 'brie', + 'wienerli-swiss-sausage', 'syrup-diluted-ready-to-drink', 'apple-pie', + 'white-bread-with-butter-eggs-and-milk', 'savoury-puff-pastry', + 'anchovies', 'tuna-in-oil-drained', 'lemon-pie', 'meat-terrine-pate', + 'coriander', 'falafel-balls', 'berries', + 'latte-macchiato-with-caffeine', 'faux-mage-cashew-vegan-chers', + 'beans-white', 'sugar-melon', 'mixed-seeds', 'hamburger', + 'hamburger-bun', 'oil-vinegar-salad-dressing', + 'soya-yaourt-yahourt-yogourt-ou-yoghourt', + 'chocolate-milk-chocolate-drink', 'celeriac', 'chocolate-mousse', + 'cenovis-yeast-spread', 'thickened-cream-35', 'meringue', 'lamb-chop', + 'shrimp-prawn-large', 'beef', 'lemon', 'croque-monsieur', 'chives', + 'chocolate-cookies', 'birchermuesli-prepared-no-sugar-added', + 'fish-crunchies-battered', 'muffin', + 'savoy-cabbage-steamed-without-addition-of-salt', 'pine-nuts', + 'chorizo', 'chia-grains', 'frying-sausage', + 'french-pizza-from-alsace-baked', 'chocolate', 'cooked-sausage', + 'grits-polenta-maize-flour', + 'gummi-bears-fruit-jellies-jelly-babies-with-fruit-essence', + 'wine-rose', 'coca-cola', 'raspberries', + 'roll-with-pieces-of-chocolate', 'goat-average-raw', 'lemon-cake', + 'coconut-milk', 'rice-wild', 'gluten-free-bread', 'pearl-onions', + 'buckwheat-pancake', 'bread-5-grain', 'light-beer', 'sugar-glazing', + 'tzatziki', 'butter-herb', 'ham-croissant', 'corn-crisps', + 'lentils-green-du-puy-du-berry', 'cocktail', 'rice-whole-grain', + 'veal-sausage', 'cervelat', 'sorbet', + 'aperitif-with-alcohol-aperol-spritz', 'dips', 'corn-flakes', 'peas', + 'tiramisu', 'apricots', 'cake-marble', 'lamb', + 'lasagne-meat-prepared', 'coca-cola-zero', 'cake-salted', + 'dough-puff-pastry-shortcrust-bread-pizza-dough', 'rice-waffels', + 'sekt', 'brioche', 'vegetable-au-gratin-baked', 'mango-dried', + 'processed-meat-charcuterie', 'mousse', 'sauce-sweet-sour', 'basil', + 'butter-spread-puree-almond', 'pie-apricot-baked-with-cake-dough', + 'rusk-wholemeal', 'beef-roast', + 'vanille-cream-cooked-custard-creme-dessert', 'pasta-in-conch-form', + 'nuts', 'sauce-carbonara', 'fig-dried', + 'pasta-in-butterfly-form-farfalle', 'minced-meat', + 'carrot-steamed-without-addition-of-salt', 'ebly', 'damson-plum', + 'shoots', 'bouquet-garni', 'coconut', 'banana-cake', 'waffle', + 'apricot-dried', 'sauce-curry', 'watermelon-fresh', + 'sauce-sweet-salted-asian', 'pork-roast', 'blackberry', + 'smoked-cooked-sausage-of-pork-and-beef-meat-sausag', 'bean-seeds', + 'italian-salad-dressing', 'white-asparagus', + 'pie-rhubarb-baked-with-cake-dough', + 'tomato-stewed-without-addition-of-fat-without-addition-of-salt', + 'cherries', 'nectarine')), + val=dict( + type='CocoDataset', + ann_file='/home/nick/iggotsul/mmdetection/data/val/annotations.json', + img_prefix='/home/nick/iggotsul/mmdetection/data/val/images', + pipeline=[ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']) + ]) + ], + classes= + ('bread-wholemeal', 'jam', 'water', 'bread-sourdough', 'banana', + 'soft-cheese', 'ham-raw', 'hard-cheese', 'cottage-cheese', + 'bread-half-white', 'coffee-with-caffeine', 'fruit-salad', 'pancakes', + 'tea', 'salmon-smoked', 'avocado', 'spring-onion-scallion', + 'ristretto-with-caffeine', 'ham', 'egg', 'bacon-frying', + 'chips-french-fries', 'juice-apple', 'chicken', 'tomato-raw', + 'broccoli', 'shrimp-boiled', + 'beetroot-steamed-without-addition-of-salt', 'carrot-raw', + 'chickpeas', 'french-salad-dressing', 'pasta-hornli', 'sauce-cream', + 'meat-balls', 'pasta', 'tomato-sauce', 'cheese', 'pear', 'cashew-nut', + 'almonds', 'lentils', 'mixed-vegetables', 'peanut-butter', 'apple', + 'blueberries', 'cucumber', 'cocoa-powder', + 'greek-yaourt-yahourt-yogourt-ou-yoghourt', 'maple-syrup-concentrate', + 'buckwheat-grain-peeled', 'butter', 'herbal-tea', 'mayonnaise', + 'soup-vegetable', 'wine-red', 'wine-white', + 'green-bean-steamed-without-addition-of-salt', 'sausage', + 'pizza-margherita-baked', 'salami', 'mushroom', + 'bread-meat-substitute-lettuce-sauce', 'tart', 'tea-verveine', 'rice', + 'white-coffee-with-caffeine', 'linseeds', 'sunflower-seeds', + 'ham-cooked', 'bell-pepper-red-raw', 'zucchini', 'green-asparagus', + 'tartar-sauce', 'lye-pretzel-soft', 'cucumber-pickled', + 'curry-vegetarian', 'yaourt-yahourt-yogourt-ou-yoghourt-natural', + 'soup-of-lentils-dahl-dhal', 'soup-cream-of-vegetables', + 'balsamic-vinegar', 'salmon', 'salt-cake-vegetables-filled', 'bacon', + 'orange', 'pasta-noodles', 'cream', 'cake-chocolate', + 'pasta-spaghetti', 'black-olives', 'parmesan', 'spaetzle', + 'salad-lambs-ear', 'salad-leaf-salad-green', 'potatoes-steamed', + 'white-cabbage', 'halloumi', 'beetroot-raw', 'bread-grain', + 'applesauce-unsweetened-canned', 'cheese-for-raclette', 'mushrooms', + 'bread-white', 'curds-natural-with-at-most-10-fidm', + 'bagel-without-filling', 'quiche-with-cheese-baked-with-puff-pastry', + 'soup-potato', 'bouillon-vegetable', 'beef-sirloin-steak', + 'taboule-prepared-with-couscous', 'eggplant', 'bread', + 'turnover-with-meat-small-meat-pie-empanadas', 'mungbean-sprouts', + 'mozzarella', 'pasta-penne', 'lasagne-vegetable-prepared', + 'mandarine', 'kiwi', 'french-beans', 'tartar-meat', + 'spring-roll-fried', 'pork-chop', 'caprese-salad-tomato-mozzarella', + 'leaf-spinach', 'roll-of-half-white-or-white-flour-with-large-void', + 'pasta-ravioli-stuffing', 'omelette-plain', 'tuna', 'dark-chocolate', + 'sauce-savoury', 'dried-raisins', 'ice-tea', 'kaki', 'macaroon', + 'smoothie', 'crepe-plain', 'chicken-nuggets', + 'chili-con-carne-prepared', 'veggie-burger', 'cream-spinach', 'cod', + 'chinese-cabbage', 'hamburger-bread-meat-ketchup', 'soup-pumpkin', + 'sushi', 'chestnuts', 'coffee-decaffeinated', 'sauce-soya', + 'balsamic-salad-dressing', 'pasta-twist', 'bolognaise-sauce', 'leek', + 'fajita-bread-only', 'potato-gnocchi', + 'beef-cut-into-stripes-only-meat', 'rice-noodles-vermicelli', + 'tea-ginger', 'tea-green', 'bread-whole-wheat', 'onion', 'garlic', + 'hummus', 'pizza-with-vegetables-baked', 'beer', 'glucose-drink-50g', + 'chicken-wing', 'ratatouille', 'peanut', + 'high-protein-pasta-made-of-lentils-peas', 'cauliflower', + 'quiche-with-spinach-baked-with-cake-dough', 'green-olives', + 'brazil-nut', 'eggplant-caviar', 'bread-pita', 'pasta-wholemeal', + 'sauce-pesto', 'oil', 'couscous', 'sauce-roast', 'prosecco', + 'crackers', 'bread-toast', 'shrimp-prawn-small', 'panna-cotta', + 'romanesco', 'water-with-lemon-juice', 'espresso-with-caffeine', + 'egg-scrambled-prepared', 'juice-orange', 'ice-cubes', + 'braided-white-loaf', 'emmental-cheese', 'croissant-wholegrain', + 'hazelnut-chocolate-spread-nutella-ovomaltine-caotina', 'tomme', + 'water-mineral', 'hazelnut', 'bacon-raw', 'bread-nut', + 'black-forest-tart', 'soup-miso', 'peach', 'figs', 'beef-filet', + 'mustard-dijon', 'rice-basmati', + 'mashed-potatoes-prepared-with-full-fat-milk-with-butter', + 'dumplings', 'pumpkin', 'swiss-chard', 'red-cabbage', 'spinach-raw', + 'naan-indien-bread', + 'chicken-curry-cream-coconut-milk-curry-spices-paste', + 'crunch-muesli', 'biscuits', 'bread-french-white-flour', 'meatloaf', + 'fresh-cheese', 'honey', 'vegetable-mix-peas-and-carrots', 'parsley', + 'brownie', 'dairy-ice-cream', 'tea-black', 'carrot-cake', + 'fish-fingers-breaded', 'salad-dressing', 'dried-meat', + 'chicken-breast', 'mixed-salad-chopped-without-sauce', 'feta', + 'praline', 'tea-peppermint', 'walnut', + 'potato-salad-with-mayonnaise-yogurt-dressing', 'kebab-in-pita-bread', + 'kolhrabi', 'alfa-sprouts', 'brussel-sprouts', 'bacon-cooking', + 'gruyere', 'bulgur', 'grapes', 'pork-escalope', 'chocolate-egg-small', + 'cappuccino', + 'zucchini-stewed-without-addition-of-fat-without-addition-of-salt', + 'crisp-bread-wasa', 'bread-black', 'perch-fillets-lake', 'rosti', + 'mango', 'sandwich-ham-cheese-and-butter', 'muesli', + 'spinach-steamed-without-addition-of-salt', 'fish', + 'risotto-without-cheese-cooked', 'milk-chocolate-with-hazelnuts', + 'cake-oblong', 'crisps', 'pork', 'pomegranate', 'sweet-corn-canned', + 'flakes-oat', 'greek-salad', 'cantonese-fried-rice', 'sesame-seeds', + 'bouillon', 'baked-potato', 'fennel', 'meat', 'bread-olive', + 'croutons', 'philadelphia', + 'mushroom-average-stewed-without-addition-of-fat-without-addition-of-salt', + 'bell-pepper-red-stewed-without-addition-of-fat-without-addition-of-salt', + 'white-chocolate', 'mixed-nuts', 'breadcrumbs-unspiced', 'fondue', + 'sauce-mushroom', 'tea-spice', 'strawberries', 'tea-rooibos', + 'pie-plum-baked-with-cake-dough', + 'potatoes-au-gratin-dauphinois-prepared', 'capers', 'vegetables', + 'bread-wholemeal-toast', 'red-radish', 'fruit-tart', 'beans-kidney', + 'sauerkraut', 'mustard', 'country-fries', 'ketchup', + 'pasta-linguini-parpadelle-tagliatelle', + 'chicken-cut-into-stripes-only-meat', 'cookies', 'sun-dried-tomatoe', + 'bread-ticino', 'semi-hard-cheese', 'margarine', + 'porridge-prepared-with-partially-skimmed-milk', + 'soya-drink-soy-milk', 'juice-multifruit', 'popcorn-salted', + 'chocolate-filled', 'milk-chocolate', 'bread-fruit', + 'mix-of-dried-fruits-and-nuts', 'corn', 'tete-de-moine', 'dates', + 'pistachio', 'celery', 'white-radish', 'oat-milk', 'cream-cheese', + 'bread-rye', 'witloof-chicory', 'apple-crumble', 'goat-cheese-soft', + 'grapefruit-pomelo', 'risotto-with-mushrooms-cooked', + 'blue-mould-cheese', 'biscuit-with-butter', 'guacamole', 'pecan-nut', + 'tofu', 'cordon-bleu-from-pork-schnitzel-fried', 'paprika-chips', + 'quinoa', 'kefir-drink', 'm-m-s', 'salad-rocket', 'bread-spelt', + 'pizza-with-ham-with-mushrooms-baked', 'fruit-coulis', 'plums', + 'beef-minced-only-meat', 'pizza-with-ham-baked', 'pineapple', + 'soup-tomato', 'cheddar', 'tea-fruit', 'rice-jasmin', 'seeds', + 'focaccia', 'milk', 'coleslaw-chopped-without-sauce', 'pastry-flaky', + 'curd', 'savoury-puff-pastry-stick', 'sweet-potato', 'chicken-leg', + 'croissant', 'sour-cream', 'ham-turkey', 'processed-cheese', + 'fruit-compotes', 'cheesecake', 'pasta-tortelloni-stuffing', + 'sauce-cocktail', 'croissant-with-chocolate-filling', 'pumpkin-seeds', + 'artichoke', 'champagne', 'grissini', 'sweets-candies', 'brie', + 'wienerli-swiss-sausage', 'syrup-diluted-ready-to-drink', 'apple-pie', + 'white-bread-with-butter-eggs-and-milk', 'savoury-puff-pastry', + 'anchovies', 'tuna-in-oil-drained', 'lemon-pie', 'meat-terrine-pate', + 'coriander', 'falafel-balls', 'berries', + 'latte-macchiato-with-caffeine', 'faux-mage-cashew-vegan-chers', + 'beans-white', 'sugar-melon', 'mixed-seeds', 'hamburger', + 'hamburger-bun', 'oil-vinegar-salad-dressing', + 'soya-yaourt-yahourt-yogourt-ou-yoghourt', + 'chocolate-milk-chocolate-drink', 'celeriac', 'chocolate-mousse', + 'cenovis-yeast-spread', 'thickened-cream-35', 'meringue', 'lamb-chop', + 'shrimp-prawn-large', 'beef', 'lemon', 'croque-monsieur', 'chives', + 'chocolate-cookies', 'birchermuesli-prepared-no-sugar-added', + 'fish-crunchies-battered', 'muffin', + 'savoy-cabbage-steamed-without-addition-of-salt', 'pine-nuts', + 'chorizo', 'chia-grains', 'frying-sausage', + 'french-pizza-from-alsace-baked', 'chocolate', 'cooked-sausage', + 'grits-polenta-maize-flour', + 'gummi-bears-fruit-jellies-jelly-babies-with-fruit-essence', + 'wine-rose', 'coca-cola', 'raspberries', + 'roll-with-pieces-of-chocolate', 'goat-average-raw', 'lemon-cake', + 'coconut-milk', 'rice-wild', 'gluten-free-bread', 'pearl-onions', + 'buckwheat-pancake', 'bread-5-grain', 'light-beer', 'sugar-glazing', + 'tzatziki', 'butter-herb', 'ham-croissant', 'corn-crisps', + 'lentils-green-du-puy-du-berry', 'cocktail', 'rice-whole-grain', + 'veal-sausage', 'cervelat', 'sorbet', + 'aperitif-with-alcohol-aperol-spritz', 'dips', 'corn-flakes', 'peas', + 'tiramisu', 'apricots', 'cake-marble', 'lamb', + 'lasagne-meat-prepared', 'coca-cola-zero', 'cake-salted', + 'dough-puff-pastry-shortcrust-bread-pizza-dough', 'rice-waffels', + 'sekt', 'brioche', 'vegetable-au-gratin-baked', 'mango-dried', + 'processed-meat-charcuterie', 'mousse', 'sauce-sweet-sour', 'basil', + 'butter-spread-puree-almond', 'pie-apricot-baked-with-cake-dough', + 'rusk-wholemeal', 'beef-roast', + 'vanille-cream-cooked-custard-creme-dessert', 'pasta-in-conch-form', + 'nuts', 'sauce-carbonara', 'fig-dried', + 'pasta-in-butterfly-form-farfalle', 'minced-meat', + 'carrot-steamed-without-addition-of-salt', 'ebly', 'damson-plum', + 'shoots', 'bouquet-garni', 'coconut', 'banana-cake', 'waffle', + 'apricot-dried', 'sauce-curry', 'watermelon-fresh', + 'sauce-sweet-salted-asian', 'pork-roast', 'blackberry', + 'smoked-cooked-sausage-of-pork-and-beef-meat-sausag', 'bean-seeds', + 'italian-salad-dressing', 'white-asparagus', + 'pie-rhubarb-baked-with-cake-dough', + 'tomato-stewed-without-addition-of-fat-without-addition-of-salt', + 'cherries', 'nectarine')), + test=dict( + type='CocoDataset', + ann_file='/home/nick/iggotsul/mmdetection/data/test/annotations.json', + img_prefix='/home/nick/iggotsul/mmdetection/data/test/images', + pipeline=[ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']) + ]) + ], + classes= + ('bread-wholemeal', 'jam', 'water', 'bread-sourdough', 'banana', + 'soft-cheese', 'ham-raw', 'hard-cheese', 'cottage-cheese', + 'bread-half-white', 'coffee-with-caffeine', 'fruit-salad', 'pancakes', + 'tea', 'salmon-smoked', 'avocado', 'spring-onion-scallion', + 'ristretto-with-caffeine', 'ham', 'egg', 'bacon-frying', + 'chips-french-fries', 'juice-apple', 'chicken', 'tomato-raw', + 'broccoli', 'shrimp-boiled', + 'beetroot-steamed-without-addition-of-salt', 'carrot-raw', + 'chickpeas', 'french-salad-dressing', 'pasta-hornli', 'sauce-cream', + 'meat-balls', 'pasta', 'tomato-sauce', 'cheese', 'pear', 'cashew-nut', + 'almonds', 'lentils', 'mixed-vegetables', 'peanut-butter', 'apple', + 'blueberries', 'cucumber', 'cocoa-powder', + 'greek-yaourt-yahourt-yogourt-ou-yoghourt', 'maple-syrup-concentrate', + 'buckwheat-grain-peeled', 'butter', 'herbal-tea', 'mayonnaise', + 'soup-vegetable', 'wine-red', 'wine-white', + 'green-bean-steamed-without-addition-of-salt', 'sausage', + 'pizza-margherita-baked', 'salami', 'mushroom', + 'bread-meat-substitute-lettuce-sauce', 'tart', 'tea-verveine', 'rice', + 'white-coffee-with-caffeine', 'linseeds', 'sunflower-seeds', + 'ham-cooked', 'bell-pepper-red-raw', 'zucchini', 'green-asparagus', + 'tartar-sauce', 'lye-pretzel-soft', 'cucumber-pickled', + 'curry-vegetarian', 'yaourt-yahourt-yogourt-ou-yoghourt-natural', + 'soup-of-lentils-dahl-dhal', 'soup-cream-of-vegetables', + 'balsamic-vinegar', 'salmon', 'salt-cake-vegetables-filled', 'bacon', + 'orange', 'pasta-noodles', 'cream', 'cake-chocolate', + 'pasta-spaghetti', 'black-olives', 'parmesan', 'spaetzle', + 'salad-lambs-ear', 'salad-leaf-salad-green', 'potatoes-steamed', + 'white-cabbage', 'halloumi', 'beetroot-raw', 'bread-grain', + 'applesauce-unsweetened-canned', 'cheese-for-raclette', 'mushrooms', + 'bread-white', 'curds-natural-with-at-most-10-fidm', + 'bagel-without-filling', 'quiche-with-cheese-baked-with-puff-pastry', + 'soup-potato', 'bouillon-vegetable', 'beef-sirloin-steak', + 'taboule-prepared-with-couscous', 'eggplant', 'bread', + 'turnover-with-meat-small-meat-pie-empanadas', 'mungbean-sprouts', + 'mozzarella', 'pasta-penne', 'lasagne-vegetable-prepared', + 'mandarine', 'kiwi', 'french-beans', 'tartar-meat', + 'spring-roll-fried', 'pork-chop', 'caprese-salad-tomato-mozzarella', + 'leaf-spinach', 'roll-of-half-white-or-white-flour-with-large-void', + 'pasta-ravioli-stuffing', 'omelette-plain', 'tuna', 'dark-chocolate', + 'sauce-savoury', 'dried-raisins', 'ice-tea', 'kaki', 'macaroon', + 'smoothie', 'crepe-plain', 'chicken-nuggets', + 'chili-con-carne-prepared', 'veggie-burger', 'cream-spinach', 'cod', + 'chinese-cabbage', 'hamburger-bread-meat-ketchup', 'soup-pumpkin', + 'sushi', 'chestnuts', 'coffee-decaffeinated', 'sauce-soya', + 'balsamic-salad-dressing', 'pasta-twist', 'bolognaise-sauce', 'leek', + 'fajita-bread-only', 'potato-gnocchi', + 'beef-cut-into-stripes-only-meat', 'rice-noodles-vermicelli', + 'tea-ginger', 'tea-green', 'bread-whole-wheat', 'onion', 'garlic', + 'hummus', 'pizza-with-vegetables-baked', 'beer', 'glucose-drink-50g', + 'chicken-wing', 'ratatouille', 'peanut', + 'high-protein-pasta-made-of-lentils-peas', 'cauliflower', + 'quiche-with-spinach-baked-with-cake-dough', 'green-olives', + 'brazil-nut', 'eggplant-caviar', 'bread-pita', 'pasta-wholemeal', + 'sauce-pesto', 'oil', 'couscous', 'sauce-roast', 'prosecco', + 'crackers', 'bread-toast', 'shrimp-prawn-small', 'panna-cotta', + 'romanesco', 'water-with-lemon-juice', 'espresso-with-caffeine', + 'egg-scrambled-prepared', 'juice-orange', 'ice-cubes', + 'braided-white-loaf', 'emmental-cheese', 'croissant-wholegrain', + 'hazelnut-chocolate-spread-nutella-ovomaltine-caotina', 'tomme', + 'water-mineral', 'hazelnut', 'bacon-raw', 'bread-nut', + 'black-forest-tart', 'soup-miso', 'peach', 'figs', 'beef-filet', + 'mustard-dijon', 'rice-basmati', + 'mashed-potatoes-prepared-with-full-fat-milk-with-butter', + 'dumplings', 'pumpkin', 'swiss-chard', 'red-cabbage', 'spinach-raw', + 'naan-indien-bread', + 'chicken-curry-cream-coconut-milk-curry-spices-paste', + 'crunch-muesli', 'biscuits', 'bread-french-white-flour', 'meatloaf', + 'fresh-cheese', 'honey', 'vegetable-mix-peas-and-carrots', 'parsley', + 'brownie', 'dairy-ice-cream', 'tea-black', 'carrot-cake', + 'fish-fingers-breaded', 'salad-dressing', 'dried-meat', + 'chicken-breast', 'mixed-salad-chopped-without-sauce', 'feta', + 'praline', 'tea-peppermint', 'walnut', + 'potato-salad-with-mayonnaise-yogurt-dressing', 'kebab-in-pita-bread', + 'kolhrabi', 'alfa-sprouts', 'brussel-sprouts', 'bacon-cooking', + 'gruyere', 'bulgur', 'grapes', 'pork-escalope', 'chocolate-egg-small', + 'cappuccino', + 'zucchini-stewed-without-addition-of-fat-without-addition-of-salt', + 'crisp-bread-wasa', 'bread-black', 'perch-fillets-lake', 'rosti', + 'mango', 'sandwich-ham-cheese-and-butter', 'muesli', + 'spinach-steamed-without-addition-of-salt', 'fish', + 'risotto-without-cheese-cooked', 'milk-chocolate-with-hazelnuts', + 'cake-oblong', 'crisps', 'pork', 'pomegranate', 'sweet-corn-canned', + 'flakes-oat', 'greek-salad', 'cantonese-fried-rice', 'sesame-seeds', + 'bouillon', 'baked-potato', 'fennel', 'meat', 'bread-olive', + 'croutons', 'philadelphia', + 'mushroom-average-stewed-without-addition-of-fat-without-addition-of-salt', + 'bell-pepper-red-stewed-without-addition-of-fat-without-addition-of-salt', + 'white-chocolate', 'mixed-nuts', 'breadcrumbs-unspiced', 'fondue', + 'sauce-mushroom', 'tea-spice', 'strawberries', 'tea-rooibos', + 'pie-plum-baked-with-cake-dough', + 'potatoes-au-gratin-dauphinois-prepared', 'capers', 'vegetables', + 'bread-wholemeal-toast', 'red-radish', 'fruit-tart', 'beans-kidney', + 'sauerkraut', 'mustard', 'country-fries', 'ketchup', + 'pasta-linguini-parpadelle-tagliatelle', + 'chicken-cut-into-stripes-only-meat', 'cookies', 'sun-dried-tomatoe', + 'bread-ticino', 'semi-hard-cheese', 'margarine', + 'porridge-prepared-with-partially-skimmed-milk', + 'soya-drink-soy-milk', 'juice-multifruit', 'popcorn-salted', + 'chocolate-filled', 'milk-chocolate', 'bread-fruit', + 'mix-of-dried-fruits-and-nuts', 'corn', 'tete-de-moine', 'dates', + 'pistachio', 'celery', 'white-radish', 'oat-milk', 'cream-cheese', + 'bread-rye', 'witloof-chicory', 'apple-crumble', 'goat-cheese-soft', + 'grapefruit-pomelo', 'risotto-with-mushrooms-cooked', + 'blue-mould-cheese', 'biscuit-with-butter', 'guacamole', 'pecan-nut', + 'tofu', 'cordon-bleu-from-pork-schnitzel-fried', 'paprika-chips', + 'quinoa', 'kefir-drink', 'm-m-s', 'salad-rocket', 'bread-spelt', + 'pizza-with-ham-with-mushrooms-baked', 'fruit-coulis', 'plums', + 'beef-minced-only-meat', 'pizza-with-ham-baked', 'pineapple', + 'soup-tomato', 'cheddar', 'tea-fruit', 'rice-jasmin', 'seeds', + 'focaccia', 'milk', 'coleslaw-chopped-without-sauce', 'pastry-flaky', + 'curd', 'savoury-puff-pastry-stick', 'sweet-potato', 'chicken-leg', + 'croissant', 'sour-cream', 'ham-turkey', 'processed-cheese', + 'fruit-compotes', 'cheesecake', 'pasta-tortelloni-stuffing', + 'sauce-cocktail', 'croissant-with-chocolate-filling', 'pumpkin-seeds', + 'artichoke', 'champagne', 'grissini', 'sweets-candies', 'brie', + 'wienerli-swiss-sausage', 'syrup-diluted-ready-to-drink', 'apple-pie', + 'white-bread-with-butter-eggs-and-milk', 'savoury-puff-pastry', + 'anchovies', 'tuna-in-oil-drained', 'lemon-pie', 'meat-terrine-pate', + 'coriander', 'falafel-balls', 'berries', + 'latte-macchiato-with-caffeine', 'faux-mage-cashew-vegan-chers', + 'beans-white', 'sugar-melon', 'mixed-seeds', 'hamburger', + 'hamburger-bun', 'oil-vinegar-salad-dressing', + 'soya-yaourt-yahourt-yogourt-ou-yoghourt', + 'chocolate-milk-chocolate-drink', 'celeriac', 'chocolate-mousse', + 'cenovis-yeast-spread', 'thickened-cream-35', 'meringue', 'lamb-chop', + 'shrimp-prawn-large', 'beef', 'lemon', 'croque-monsieur', 'chives', + 'chocolate-cookies', 'birchermuesli-prepared-no-sugar-added', + 'fish-crunchies-battered', 'muffin', + 'savoy-cabbage-steamed-without-addition-of-salt', 'pine-nuts', + 'chorizo', 'chia-grains', 'frying-sausage', + 'french-pizza-from-alsace-baked', 'chocolate', 'cooked-sausage', + 'grits-polenta-maize-flour', + 'gummi-bears-fruit-jellies-jelly-babies-with-fruit-essence', + 'wine-rose', 'coca-cola', 'raspberries', + 'roll-with-pieces-of-chocolate', 'goat-average-raw', 'lemon-cake', + 'coconut-milk', 'rice-wild', 'gluten-free-bread', 'pearl-onions', + 'buckwheat-pancake', 'bread-5-grain', 'light-beer', 'sugar-glazing', + 'tzatziki', 'butter-herb', 'ham-croissant', 'corn-crisps', + 'lentils-green-du-puy-du-berry', 'cocktail', 'rice-whole-grain', + 'veal-sausage', 'cervelat', 'sorbet', + 'aperitif-with-alcohol-aperol-spritz', 'dips', 'corn-flakes', 'peas', + 'tiramisu', 'apricots', 'cake-marble', 'lamb', + 'lasagne-meat-prepared', 'coca-cola-zero', 'cake-salted', + 'dough-puff-pastry-shortcrust-bread-pizza-dough', 'rice-waffels', + 'sekt', 'brioche', 'vegetable-au-gratin-baked', 'mango-dried', + 'processed-meat-charcuterie', 'mousse', 'sauce-sweet-sour', 'basil', + 'butter-spread-puree-almond', 'pie-apricot-baked-with-cake-dough', + 'rusk-wholemeal', 'beef-roast', + 'vanille-cream-cooked-custard-creme-dessert', 'pasta-in-conch-form', + 'nuts', 'sauce-carbonara', 'fig-dried', + 'pasta-in-butterfly-form-farfalle', 'minced-meat', + 'carrot-steamed-without-addition-of-salt', 'ebly', 'damson-plum', + 'shoots', 'bouquet-garni', 'coconut', 'banana-cake', 'waffle', + 'apricot-dried', 'sauce-curry', 'watermelon-fresh', + 'sauce-sweet-salted-asian', 'pork-roast', 'blackberry', + 'smoked-cooked-sausage-of-pork-and-beef-meat-sausag', 'bean-seeds', + 'italian-salad-dressing', 'white-asparagus', + 'pie-rhubarb-baked-with-cake-dough', + 'tomato-stewed-without-addition-of-fat-without-addition-of-salt', + 'cherries', 'nectarine'))) +evaluation = dict(interval=1, metric=['segm']) +optimizer = dict(type='SGD', lr=0.001, momentum=0.9, weight_decay=0.0001) +optimizer_config = dict(grad_clip=None) +lr_config = dict( + policy='CosineAnnealing', + by_epoch=False, + warmup='linear', + warmup_iters=2000, + warmup_ratio=0.001, + min_lr=1e-07) +runner = dict(type='EpochBasedRunner', max_epochs=20) +checkpoint_config = dict(interval=1) +log_config = dict( + interval=1, + hooks=[dict(type='TextLoggerHook'), + dict(type='TensorboardLoggerHook')]) +custom_hooks = [dict(type='NumClassCheckHook')] +dist_params = dict(backend='nccl') +log_level = 'INFO' +load_from = '/home/nick/iggotsul/mmdetection/checkpoints/decoupled_solo_r50_fpn_3x_coco.pth' +resume_from = None +workflow = [('train', 1)] +model = dict( + type='SOLO', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + start_level=0, + num_outs=5), + mask_head=dict( + type='DecoupledSOLOHead', + num_classes=498, + in_channels=256, + stacked_convs=7, + feat_channels=256, + strides=[8, 8, 16, 32, 32], + scale_ranges=((1, 96), (48, 192), (96, 384), (192, 768), (384, 2048)), + pos_scale=0.2, + num_grids=[40, 36, 24, 16, 12], + cls_down_index=0, + loss_mask=dict( + type='DiceLoss', use_sigmoid=True, loss_weight=3.0, + activate=False), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + norm_cfg=dict(type='GN', num_groups=32, requires_grad=True)), + test_cfg=dict( + nms_pre=500, + score_thr=0.1, + mask_thr=0.5, + filter_thr=0.05, + kernel='gaussian', + sigma=2.0, + max_per_img=100)) +work_dir = './training_files/solo' +seed = 666 +total_epochs = 20 +classes = ( + 'bread-wholemeal', 'jam', 'water', 'bread-sourdough', 'banana', + 'soft-cheese', 'ham-raw', 'hard-cheese', 'cottage-cheese', + 'bread-half-white', 'coffee-with-caffeine', 'fruit-salad', 'pancakes', + 'tea', 'salmon-smoked', 'avocado', 'spring-onion-scallion', + 'ristretto-with-caffeine', 'ham', 'egg', 'bacon-frying', + 'chips-french-fries', 'juice-apple', 'chicken', 'tomato-raw', 'broccoli', + 'shrimp-boiled', 'beetroot-steamed-without-addition-of-salt', 'carrot-raw', + 'chickpeas', 'french-salad-dressing', 'pasta-hornli', 'sauce-cream', + 'meat-balls', 'pasta', 'tomato-sauce', 'cheese', 'pear', 'cashew-nut', + 'almonds', 'lentils', 'mixed-vegetables', 'peanut-butter', 'apple', + 'blueberries', 'cucumber', 'cocoa-powder', + 'greek-yaourt-yahourt-yogourt-ou-yoghourt', 'maple-syrup-concentrate', + 'buckwheat-grain-peeled', 'butter', 'herbal-tea', 'mayonnaise', + 'soup-vegetable', 'wine-red', 'wine-white', + 'green-bean-steamed-without-addition-of-salt', 'sausage', + 'pizza-margherita-baked', 'salami', 'mushroom', + 'bread-meat-substitute-lettuce-sauce', 'tart', 'tea-verveine', 'rice', + 'white-coffee-with-caffeine', 'linseeds', 'sunflower-seeds', 'ham-cooked', + 'bell-pepper-red-raw', 'zucchini', 'green-asparagus', 'tartar-sauce', + 'lye-pretzel-soft', 'cucumber-pickled', 'curry-vegetarian', + 'yaourt-yahourt-yogourt-ou-yoghourt-natural', 'soup-of-lentils-dahl-dhal', + 'soup-cream-of-vegetables', 'balsamic-vinegar', 'salmon', + 'salt-cake-vegetables-filled', 'bacon', 'orange', 'pasta-noodles', 'cream', + 'cake-chocolate', 'pasta-spaghetti', 'black-olives', 'parmesan', + 'spaetzle', 'salad-lambs-ear', 'salad-leaf-salad-green', + 'potatoes-steamed', 'white-cabbage', 'halloumi', 'beetroot-raw', + 'bread-grain', 'applesauce-unsweetened-canned', 'cheese-for-raclette', + 'mushrooms', 'bread-white', 'curds-natural-with-at-most-10-fidm', + 'bagel-without-filling', 'quiche-with-cheese-baked-with-puff-pastry', + 'soup-potato', 'bouillon-vegetable', 'beef-sirloin-steak', + 'taboule-prepared-with-couscous', 'eggplant', 'bread', + 'turnover-with-meat-small-meat-pie-empanadas', 'mungbean-sprouts', + 'mozzarella', 'pasta-penne', 'lasagne-vegetable-prepared', 'mandarine', + 'kiwi', 'french-beans', 'tartar-meat', 'spring-roll-fried', 'pork-chop', + 'caprese-salad-tomato-mozzarella', 'leaf-spinach', + 'roll-of-half-white-or-white-flour-with-large-void', + 'pasta-ravioli-stuffing', 'omelette-plain', 'tuna', 'dark-chocolate', + 'sauce-savoury', 'dried-raisins', 'ice-tea', 'kaki', 'macaroon', + 'smoothie', 'crepe-plain', 'chicken-nuggets', 'chili-con-carne-prepared', + 'veggie-burger', 'cream-spinach', 'cod', 'chinese-cabbage', + 'hamburger-bread-meat-ketchup', 'soup-pumpkin', 'sushi', 'chestnuts', + 'coffee-decaffeinated', 'sauce-soya', 'balsamic-salad-dressing', + 'pasta-twist', 'bolognaise-sauce', 'leek', 'fajita-bread-only', + 'potato-gnocchi', 'beef-cut-into-stripes-only-meat', + 'rice-noodles-vermicelli', 'tea-ginger', 'tea-green', 'bread-whole-wheat', + 'onion', 'garlic', 'hummus', 'pizza-with-vegetables-baked', 'beer', + 'glucose-drink-50g', 'chicken-wing', 'ratatouille', 'peanut', + 'high-protein-pasta-made-of-lentils-peas', 'cauliflower', + 'quiche-with-spinach-baked-with-cake-dough', 'green-olives', 'brazil-nut', + 'eggplant-caviar', 'bread-pita', 'pasta-wholemeal', 'sauce-pesto', 'oil', + 'couscous', 'sauce-roast', 'prosecco', 'crackers', 'bread-toast', + 'shrimp-prawn-small', 'panna-cotta', 'romanesco', 'water-with-lemon-juice', + 'espresso-with-caffeine', 'egg-scrambled-prepared', 'juice-orange', + 'ice-cubes', 'braided-white-loaf', 'emmental-cheese', + 'croissant-wholegrain', + 'hazelnut-chocolate-spread-nutella-ovomaltine-caotina', 'tomme', + 'water-mineral', 'hazelnut', 'bacon-raw', 'bread-nut', 'black-forest-tart', + 'soup-miso', 'peach', 'figs', 'beef-filet', 'mustard-dijon', + 'rice-basmati', 'mashed-potatoes-prepared-with-full-fat-milk-with-butter', + 'dumplings', 'pumpkin', 'swiss-chard', 'red-cabbage', 'spinach-raw', + 'naan-indien-bread', 'chicken-curry-cream-coconut-milk-curry-spices-paste', + 'crunch-muesli', 'biscuits', 'bread-french-white-flour', 'meatloaf', + 'fresh-cheese', 'honey', 'vegetable-mix-peas-and-carrots', 'parsley', + 'brownie', 'dairy-ice-cream', 'tea-black', 'carrot-cake', + 'fish-fingers-breaded', 'salad-dressing', 'dried-meat', 'chicken-breast', + 'mixed-salad-chopped-without-sauce', 'feta', 'praline', 'tea-peppermint', + 'walnut', 'potato-salad-with-mayonnaise-yogurt-dressing', + 'kebab-in-pita-bread', 'kolhrabi', 'alfa-sprouts', 'brussel-sprouts', + 'bacon-cooking', 'gruyere', 'bulgur', 'grapes', 'pork-escalope', + 'chocolate-egg-small', 'cappuccino', + 'zucchini-stewed-without-addition-of-fat-without-addition-of-salt', + 'crisp-bread-wasa', 'bread-black', 'perch-fillets-lake', 'rosti', 'mango', + 'sandwich-ham-cheese-and-butter', 'muesli', + 'spinach-steamed-without-addition-of-salt', 'fish', + 'risotto-without-cheese-cooked', 'milk-chocolate-with-hazelnuts', + 'cake-oblong', 'crisps', 'pork', 'pomegranate', 'sweet-corn-canned', + 'flakes-oat', 'greek-salad', 'cantonese-fried-rice', 'sesame-seeds', + 'bouillon', 'baked-potato', 'fennel', 'meat', 'bread-olive', 'croutons', + 'philadelphia', + 'mushroom-average-stewed-without-addition-of-fat-without-addition-of-salt', + 'bell-pepper-red-stewed-without-addition-of-fat-without-addition-of-salt', + 'white-chocolate', 'mixed-nuts', 'breadcrumbs-unspiced', 'fondue', + 'sauce-mushroom', 'tea-spice', 'strawberries', 'tea-rooibos', + 'pie-plum-baked-with-cake-dough', 'potatoes-au-gratin-dauphinois-prepared', + 'capers', 'vegetables', 'bread-wholemeal-toast', 'red-radish', + 'fruit-tart', 'beans-kidney', 'sauerkraut', 'mustard', 'country-fries', + 'ketchup', 'pasta-linguini-parpadelle-tagliatelle', + 'chicken-cut-into-stripes-only-meat', 'cookies', 'sun-dried-tomatoe', + 'bread-ticino', 'semi-hard-cheese', 'margarine', + 'porridge-prepared-with-partially-skimmed-milk', 'soya-drink-soy-milk', + 'juice-multifruit', 'popcorn-salted', 'chocolate-filled', 'milk-chocolate', + 'bread-fruit', 'mix-of-dried-fruits-and-nuts', 'corn', 'tete-de-moine', + 'dates', 'pistachio', 'celery', 'white-radish', 'oat-milk', 'cream-cheese', + 'bread-rye', 'witloof-chicory', 'apple-crumble', 'goat-cheese-soft', + 'grapefruit-pomelo', 'risotto-with-mushrooms-cooked', 'blue-mould-cheese', + 'biscuit-with-butter', 'guacamole', 'pecan-nut', 'tofu', + 'cordon-bleu-from-pork-schnitzel-fried', 'paprika-chips', 'quinoa', + 'kefir-drink', 'm-m-s', 'salad-rocket', 'bread-spelt', + 'pizza-with-ham-with-mushrooms-baked', 'fruit-coulis', 'plums', + 'beef-minced-only-meat', 'pizza-with-ham-baked', 'pineapple', + 'soup-tomato', 'cheddar', 'tea-fruit', 'rice-jasmin', 'seeds', 'focaccia', + 'milk', 'coleslaw-chopped-without-sauce', 'pastry-flaky', 'curd', + 'savoury-puff-pastry-stick', 'sweet-potato', 'chicken-leg', 'croissant', + 'sour-cream', 'ham-turkey', 'processed-cheese', 'fruit-compotes', + 'cheesecake', 'pasta-tortelloni-stuffing', 'sauce-cocktail', + 'croissant-with-chocolate-filling', 'pumpkin-seeds', 'artichoke', + 'champagne', 'grissini', 'sweets-candies', 'brie', + 'wienerli-swiss-sausage', 'syrup-diluted-ready-to-drink', 'apple-pie', + 'white-bread-with-butter-eggs-and-milk', 'savoury-puff-pastry', + 'anchovies', 'tuna-in-oil-drained', 'lemon-pie', 'meat-terrine-pate', + 'coriander', 'falafel-balls', 'berries', 'latte-macchiato-with-caffeine', + 'faux-mage-cashew-vegan-chers', 'beans-white', 'sugar-melon', + 'mixed-seeds', 'hamburger', 'hamburger-bun', 'oil-vinegar-salad-dressing', + 'soya-yaourt-yahourt-yogourt-ou-yoghourt', + 'chocolate-milk-chocolate-drink', 'celeriac', 'chocolate-mousse', + 'cenovis-yeast-spread', 'thickened-cream-35', 'meringue', 'lamb-chop', + 'shrimp-prawn-large', 'beef', 'lemon', 'croque-monsieur', 'chives', + 'chocolate-cookies', 'birchermuesli-prepared-no-sugar-added', + 'fish-crunchies-battered', 'muffin', + 'savoy-cabbage-steamed-without-addition-of-salt', 'pine-nuts', 'chorizo', + 'chia-grains', 'frying-sausage', 'french-pizza-from-alsace-baked', + 'chocolate', 'cooked-sausage', 'grits-polenta-maize-flour', + 'gummi-bears-fruit-jellies-jelly-babies-with-fruit-essence', 'wine-rose', + 'coca-cola', 'raspberries', 'roll-with-pieces-of-chocolate', + 'goat-average-raw', 'lemon-cake', 'coconut-milk', 'rice-wild', + 'gluten-free-bread', 'pearl-onions', 'buckwheat-pancake', 'bread-5-grain', + 'light-beer', 'sugar-glazing', 'tzatziki', 'butter-herb', 'ham-croissant', + 'corn-crisps', 'lentils-green-du-puy-du-berry', 'cocktail', + 'rice-whole-grain', 'veal-sausage', 'cervelat', 'sorbet', + 'aperitif-with-alcohol-aperol-spritz', 'dips', 'corn-flakes', 'peas', + 'tiramisu', 'apricots', 'cake-marble', 'lamb', 'lasagne-meat-prepared', + 'coca-cola-zero', 'cake-salted', + 'dough-puff-pastry-shortcrust-bread-pizza-dough', 'rice-waffels', 'sekt', + 'brioche', 'vegetable-au-gratin-baked', 'mango-dried', + 'processed-meat-charcuterie', 'mousse', 'sauce-sweet-sour', 'basil', + 'butter-spread-puree-almond', 'pie-apricot-baked-with-cake-dough', + 'rusk-wholemeal', 'beef-roast', + 'vanille-cream-cooked-custard-creme-dessert', 'pasta-in-conch-form', + 'nuts', 'sauce-carbonara', 'fig-dried', 'pasta-in-butterfly-form-farfalle', + 'minced-meat', 'carrot-steamed-without-addition-of-salt', 'ebly', + 'damson-plum', 'shoots', 'bouquet-garni', 'coconut', 'banana-cake', + 'waffle', 'apricot-dried', 'sauce-curry', 'watermelon-fresh', + 'sauce-sweet-salted-asian', 'pork-roast', 'blackberry', + 'smoked-cooked-sausage-of-pork-and-beef-meat-sausag', 'bean-seeds', + 'italian-salad-dressing', 'white-asparagus', + 'pie-rhubarb-baked-with-cake-dough', + 'tomato-stewed-without-addition-of-fat-without-addition-of-salt', + 'cherries', 'nectarine') +gpu_ids = [2] diff --git a/run.sh b/run.sh index 23778bbcf62fdc6ec52aedc8087fcd89a69e054b..ec73fca1931ab042ae68d67d030f0df67b1a45dc 100755 --- a/run.sh +++ b/run.sh @@ -1,2 +1,3 @@ #!/bin/bash -python predict.py +python test.py ./configs/solo.py ./models/epoch_20.pth --json_out $AICROWD_PREDICTIONS_OUTPUT_PATH + diff --git a/test.py b/test.py new file mode 100644 index 0000000000000000000000000000000000000000..f16ac635cd518c15874d63e0d0d2239dc2913a09 --- /dev/null +++ b/test.py @@ -0,0 +1,238 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import argparse +import os +import os.path as osp +import time +import warnings + +import mmcv +import torch +from mmcv import Config, DictAction +from mmcv.cnn import fuse_conv_bn +from mmcv.parallel import MMDataParallel, MMDistributedDataParallel +from mmcv.runner import (get_dist_info, init_dist, load_checkpoint, + wrap_fp16_model) + +from mmdet.apis import multi_gpu_test, single_gpu_test +from mmdet.datasets import (build_dataloader, build_dataset, + replace_ImageToTensor) +from mmdet.models import build_detector + + +def parse_args(): + parser = argparse.ArgumentParser( + description='MMDet test (and eval) a model') + parser.add_argument('config', help='test config file path') + parser.add_argument('checkpoint', help='checkpoint file') + parser.add_argument( + '--work-dir', + help='the directory to save the file containing evaluation metrics') + parser.add_argument('--out', help='output result file in pickle format') + parser.add_argument( + '--fuse-conv-bn', + action='store_true', + help='Whether to fuse conv and bn, this will slightly increase' + 'the inference speed') + parser.add_argument( + '--format-only', + action='store_true', + help='Format the output results without perform evaluation. It is' + 'useful when you want to format the result to a specific format and ' + 'submit it to the test server') + parser.add_argument( + '--eval', + type=str, + nargs='+', + help='evaluation metrics, which depends on the dataset, e.g., "bbox",' + ' "segm", "proposal" for COCO, and "mAP", "recall" for PASCAL VOC') + parser.add_argument('--show', action='store_true', help='show results') + parser.add_argument( + '--show-dir', help='directory where painted images will be saved') + parser.add_argument( + '--show-score-thr', + type=float, + default=0.3, + help='score threshold (default: 0.3)') + parser.add_argument( + '--gpu-collect', + action='store_true', + help='whether to use gpu to collect results.') + parser.add_argument( + '--tmpdir', + help='tmp directory used for collecting results from multiple ' + 'workers, available when gpu-collect is not specified') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. If the value to ' + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + 'Note that the quotation marks are necessary and that no white space ' + 'is allowed.') + parser.add_argument( + '--options', + nargs='+', + action=DictAction, + help='custom options for evaluation, the key-value pair in xxx=yyy ' + 'format will be kwargs for dataset.evaluate() function (deprecate), ' + 'change to --eval-options instead.') + parser.add_argument( + '--eval-options', + nargs='+', + action=DictAction, + help='custom options for evaluation, the key-value pair in xxx=yyy ' + 'format will be kwargs for dataset.evaluate() function') + parser.add_argument( + '--launcher', + choices=['none', 'pytorch', 'slurm', 'mpi'], + default='none', + help='job launcher') + parser.add_argument('--local_rank', type=int, default=0) + args = parser.parse_args() + if 'LOCAL_RANK' not in os.environ: + os.environ['LOCAL_RANK'] = str(args.local_rank) + + if args.options and args.eval_options: + raise ValueError( + '--options and --eval-options cannot be both ' + 'specified, --options is deprecated in favor of --eval-options') + if args.options: + warnings.warn('--options is deprecated in favor of --eval-options') + args.eval_options = args.options + return args + + +def main(): + args = parse_args() + + assert args.out or args.eval or args.format_only or args.show \ + or args.show_dir, \ + ('Please specify at least one operation (save/eval/format/show the ' + 'results / save the results) with the argument "--out", "--eval"' + ', "--format-only", "--show" or "--show-dir"') + + if args.eval and args.format_only: + raise ValueError('--eval and --format_only cannot be both specified') + + if args.out is not None and not args.out.endswith(('.pkl', '.pickle')): + raise ValueError('The output file must be a pkl file.') + + cfg = Config.fromfile(args.config) + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + + cfg.model.pretrained = None + if cfg.model.get('neck'): + if isinstance(cfg.model.neck, list): + for neck_cfg in cfg.model.neck: + if neck_cfg.get('rfp_backbone'): + if neck_cfg.rfp_backbone.get('pretrained'): + neck_cfg.rfp_backbone.pretrained = None + elif cfg.model.neck.get('rfp_backbone'): + if cfg.model.neck.rfp_backbone.get('pretrained'): + cfg.model.neck.rfp_backbone.pretrained = None + + # in case the test dataset is concatenated + samples_per_gpu = 1 + if isinstance(cfg.data.test, dict): + cfg.data.test.test_mode = True + samples_per_gpu = cfg.data.test.pop('samples_per_gpu', 1) + if samples_per_gpu > 1: + # Replace 'ImageToTensor' to 'DefaultFormatBundle' + cfg.data.test.pipeline = replace_ImageToTensor( + cfg.data.test.pipeline) + elif isinstance(cfg.data.test, list): + for ds_cfg in cfg.data.test: + ds_cfg.test_mode = True + samples_per_gpu = max( + [ds_cfg.pop('samples_per_gpu', 1) for ds_cfg in cfg.data.test]) + if samples_per_gpu > 1: + for ds_cfg in cfg.data.test: + ds_cfg.pipeline = replace_ImageToTensor(ds_cfg.pipeline) + + # init distributed env first, since logger depends on the dist info. + if args.launcher == 'none': + distributed = False + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + + rank, _ = get_dist_info() + # allows not to create + if args.work_dir is not None and rank == 0: + mmcv.mkdir_or_exist(osp.abspath(args.work_dir)) + timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime()) + json_file = osp.join(args.work_dir, f'eval_{timestamp}.json') + + # build the dataloader + dataset = build_dataset(cfg.data.test) + data_loader = build_dataloader( + dataset, + samples_per_gpu=samples_per_gpu, + workers_per_gpu=cfg.data.workers_per_gpu, + dist=distributed, + shuffle=False) + + # build the model and load checkpoint + cfg.model.train_cfg = None + model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg')) + fp16_cfg = cfg.get('fp16', None) + if fp16_cfg is not None: + wrap_fp16_model(model) + checkpoint = load_checkpoint(model, args.checkpoint, map_location='cpu') + if args.fuse_conv_bn: + model = fuse_conv_bn(model) + # old versions did not save class info in checkpoints, this walkaround is + # for backward compatibility + if 'CLASSES' in checkpoint.get('meta', {}): + model.CLASSES = checkpoint['meta']['CLASSES'] + else: + model.CLASSES = dataset.CLASSES + + if not distributed: + model = MMDataParallel(model, device_ids=[0]) + outputs = single_gpu_test(model, data_loader, args.show, args.show_dir, + args.show_score_thr) + else: + model = MMDistributedDataParallel( + model.cuda(), + device_ids=[torch.cuda.current_device()], + broadcast_buffers=False) + outputs = multi_gpu_test(model, data_loader, args.tmpdir, + args.gpu_collect) + + rank, _ = get_dist_info() + if rank == 0: + if args.out: + print(f'\nwriting results to {args.out}') + mmcv.dump(outputs, args.out) + kwargs = {} if args.eval_options is None else args.eval_options + if args.format_only: + dataset.format_results(outputs, **kwargs) + if args.eval: + eval_kwargs = cfg.get('evaluation', {}).copy() + # hard-code way to remove EvalHook args + for key in [ + 'interval', 'tmpdir', 'start', 'gpu_collect', 'save_best', + 'rule' + ]: + eval_kwargs.pop(key, None) + eval_kwargs.update(dict(metric=args.eval, **kwargs)) + metric = dataset.evaluate(outputs, **eval_kwargs) + print(metric) + metric_dict = dict(config=args.config, metric=metric) + if args.work_dir is not None and rank == 0: + mmcv.dump(metric_dict, json_file) + + +if __name__ == '__main__': + main()