|
16 | 16 |
|
17 | 17 | Видео-демонстрация работы - [youtube](https://youtu.be/qfuOcrQkL3o). |
18 | 18 |
|
| 19 | +## Adversarial loss ([commit](https://github.com/GreenWizard2015/feeding-robot/tree/8351aa58ee9fe39e845e50393654861032b813b3)) |
| 20 | + |
| 21 | +Входными данными для дискриминатора стала предсказанная карта для каждой из меток (без "не метка"), что позволило существенно упростить задачу и добиться адекватной точности дискриминатора. |
| 22 | + |
| 23 | +Основная сеть могла подстраиваться под дискриминатор, поэтому была введена история сэмплов. С достаточно низким шансом, примеры предсказаний основной отправлялись в историю или же заменялись более старыми, из истории. Таким образом, дискриминатор постепенно обучался всё более новым деталям, которые отличают желаемые результаты (идеальные точечные гауссовые пятна) от предсказанных. |
| 24 | + |
| 25 | +Обычно GAN-ы обучаются самостоятельно, не имея какого-либо чёткого loss-a описывающего задачу (что влечёт за собой массу проблем). В данном же случае, у нас уже есть два основных loss-a (dice и расположение центра масс), поэтому дискриминатор должен был, как минимум, не ухудшать процесс обучения (особенно при переобучении, с чем часто возникают проблемы в GAN-ах). Чтоб избежать всех этих проблем, использовались следующие приёмы: |
| 26 | + |
| 27 | +- дискриминатор обучался только по необходимости, а не параллельно с основной сетью. Основная сеть обучалась либо N эпох, количество которых постепенно увеличивалось, либо пока дискриминатор не переставал выдавать чёткий сигнал улучшения сети (генерируемые ответы должны становиться всё более похожими на настоящие... если этого не происходит более 10 эпох, то дискриминатор, возможно, перестал их чётко различать). Это снижает риск переобучения дискриминатора и мы меньше тратим вычислительных ресурсов. |
| 28 | + |
| 29 | +- оценка дискриминатора масштабируется таким образом, чтоб вносить не более 40% в значение loss-a. Большую часть времени, по сути, сеть оптимизирует целевой loss, но получая доп. обратную связь от дискриминатора. Так же, на силу этой обратной связи косвенно влияет точность дискриминатора во время обучения. Хоть такого не было замечено, но дискриминатор может перестать различать настоящие сэмплы и сгенерированные, поэтому значимость его оценки снизится. |
| 30 | + |
| 31 | +- если дискриминатор начинает выдавать одно значение (переобучившись, например), то это не ухудшает обучение т. к. основной loss начинает давать более стабильный сигнал (сложнее отличить 0.123+0.01 от 0.113+0.02, чем 0.123+1 от 0.113+1). |
| 32 | + |
| 33 | +Так же, пришлось отказаться от тестового прогона основной сети. Это, конечно, помогало отловить более удачные модели, но потребовалось бы отключать дискриминатор, а толк от этого сомнительный. Кроме того, дискриминатор обучается именно на тестовой выборки, поэтому она уже включена в дискриминатор, а значит основная сеть обучается и на тестовой выборке. |
| 34 | + |
19 | 35 | ## Планы и идеи |
20 | 36 |
|
21 | 37 | - Автоматически разметить больше данных, используя текущую версию сети. В `CAnchorsDetector.combinedDetections` реализован прототип данного функционала, но необходимо корректно реализовать процесс обучения на сгенерированных данных. Например, учесть возможность наличия ошибок. |
22 | 38 |
|
23 | | -- Использовать дискриминатор, как в GAN, чтоб получить adversarial loss. Такой loss возможно даст дополнительный отклик на изменения в сети. |
24 | | - |
25 | 39 | - Робот является жёсткой конструкцией и возможные конфигурации расположения меток ограничены ею, поэтому можно обучить модель, например, определять является ли валидным заданное расположение меток. Подобная модель сможет пригодиться не только для распознавания, как доп. loss, но и, например, при планировании движений манипулятора. |
0 commit comments