Утечка между train и validation: найти копии по имени
У аугментированных копий одного снимка разные имена файлов, поэтому простая проверка одинаковых имён не замечает пересечение выборок. Напишите функцию поиска файлов val и test, связанных с обучающими снимками; правила извлечения идентификатора источника заданы в условии.
Откройте программу платного курса Computer Vision Engineer, чтобы продолжить практику с данными, моделями и CV-сервисом.
Кадры валидации, которые модель уже видела
Задание
Экспорт Roboflow раскладывает аугментированные копии одного снимка отдельными файлами, и при делении на сплиты копии разъезжаются по разным папкам. Проверка на пересечение имён такого не находит: имена у копий разные. Найдём эти файлы по происхождению.
Напишите функцию leaked_files(records), которая принимает список пар (имя файла, сплит) и возвращает имена файлов из сплитов val и test, у которых копия того же исходного снимка есть в train.
Имя файла устроено так: <набор>_<снимок>_jpg.rf.<хеш>.jpg. Имя набора — всё до первого знака _, и внутри самого имени этот знак не встречается. Идентификатор снимка — всё между этим первым _ и _jpg.rf.; здесь знак встречаться может. Само имя набора при сравнении не учитывается: два набора одной серии нумеруют снимки одинаково, поэтому файлы с совпавшим идентификатором — копии одного снимка, из какого бы набора они ни пришли.
Сплит — одна из строк train, val, test. Файлы из train в ответ не попадают никогда, даже если у них есть копии в других сплитах. Результат отсортируйте по имени файла по возрастанию; пустому входу соответствует пустой список.
Пример
records = [
("shelfA_test2020_7_jpg.rf.aaa.jpg", "train"),
("shelfB_test2020_7_jpg.rf.bbb.jpg", "val"),
("shelfA_test2020_9_jpg.rf.ccc.jpg", "val"),
("shelfA_test2020_9_jpg.rf.ddd.jpg", "test"),
]
leaked_files(records) # ['shelfB_test2020_7_jpg.rf.bbb.jpg']
Снимок test2020_7 попал и в обучение, и в валидацию — пусть и под разными именами наборов, — поэтому файл из val в ответе. Снимок test2020_9 размножен между val и test, но в обучении его нет: делить эти два сплита между собой тоже плохо, однако утечкой в обучение это не является, и в ответ такие файлы не идут.
Примечание
Все имена во входе соответствуют описанному формату, разбирать что-то ещё не нужно. Одно и то же имя файла во входе дважды не встречается. Вызывать функцию и печатать что-либо не требуется, это сделают тесты.
Что проверяется
Код проверок скрыт, так что вот полный список того, что в них разбирается:
- формат ответа: список имён файлов;
- пример из условия;
- копий ни у одного снимка нет;
- все копии снимка остались в обучении;
- пустой вход;
- подчёркивания внутри идентификатора снимка;
- имя набора при сравнении не учитывается — копии из разных наборов считаются одним снимком;
- порядок ответа по имени файла на наборе из нескольких снимков сразу;
- снимок делят между собой
valиtest, но в обучении его нет — в ответ такие файлы не идут.
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
