У меня есть общий вопрос, касающийся тонкой настройки и трансферного обучения, который возник, когда я попытался выяснить, как наилучшим образом заставить Йоло обнаруживать мой пользовательский объект (будучи руками).
Я прошу прощения за длинный текст, возможно содержащий много ложной информации. Я был бы рад, если бы у кого-то было терпение прочитать это и помочь мне очистить мою путаницу.
После долгих поисков я узнал, что многие люди считают подстройку подклассом трансферного обучения, в то время как другие считают, что они придерживаются разных подходов к обучению модели. В то же время люди проводят различие между переобучением только последнего слоя классификатора модели в пользовательском наборе данных и переобучением других слоев модели (и, возможно, добавлением совершенно нового классификатора вместо переподготовки?). Оба подхода используют предварительно обученные модели.
Мое последнее замешательство лежит здесь: я следовал этим инструкциям: https://github.com/thtrieu/darkflow, чтобы тренировать крошечное йоло через darkflow, используя команду:
# Initialize yolo-new from yolo-tiny, then train the net on 100% GPU:
flow --model cfg/yolo-new.cfg --load bin/tiny-yolo.weights --train --gpu 1.0
Но что здесь происходит? Я полагаю, что я переобучу классификатор только потому, что в инструкциях сказано изменить количество классов в последнем слое в файле конфигурации. Но опять же, также необходимо изменить количество фильтров во втором последнем слое, сверточном слое.
Наконец, в инструкциях приведен пример альтернативного обучения:
# Completely initialize yolo-new and train it with ADAM optimizer
flow --model cfg/yolo-new.cfg --train --trainer adam
и я совсем не понимаю, как это связано с различными способами трансферного обучения.