Недавно я конвертировал модель pytorch, написанную другими, в формат ncnn Путь преобразования:
pytorch-> torchscript->pnnx, в середине есть побочная модель onnx.
Используйте torch.jit.trace_module(model, {"entrypoint", [parameters]}) для записи модели, в большинстве моделей точка входа является прямой и может быть изменена при настройке.
Используйте torch.jit.save для сохранения модели.
Основная проблема, влияющая на успех, заключается в том, что в прямой функции модели нельзя использовать условные операторы, иначе это повлияет на трассировку. Решение на данный момент состоит в том, чтобы удалить условный оператор внутри.
Написание спецификаций:
1. Не используйте условные операторы в форварде
2. Если вы хотите использовать функцию сценария для компиляции модели преобразования, не используйте **args для определения параметров функции, а запишите их все.
Для модели, сохраненной трассировкой или сценарием, pnnx можно использовать для преобразования в модель ncnn, и она будет генерировать модель onnx для решения проблемы преобразования onnx. Конечно, вы также можете напрямую использовать torch.onnx.export для преобразования модели в onnx.