1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/duping812-jetson-inference

Клонировать/Скачать
pytorch-plants.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.06.2025 15:38 5e07e18

Назад | Вперед | Содержание
Переносное обучение - классификация

# Перетренировка на наборе данных PlantCLEF Далее мы обучим модель, способную классифицировать 20 различных видов растений и деревьев из набора данных PlantCLEF. Ниже приведен 1,5 ГБ поднабор, который включает 10 475 изображений для обучения, 1 155 изображений для проверки и 30 изображений для тестирования по 20 классам растений и деревьев. Классы были выбраны из PlantCLEF 2017 из категорий, которые имели не менее 500 изображений для обучения в исходном наборе данных: ``` • дуб • бук • камыш • кедр • клевер • кипарис • василек • пырей • клен • тополь • папоротник • фиг • ель • можжевельник • тополь • ядовитая ива • гинкго • клена • ландыш • тюльпанное дерево ``` Чтобы начать, сначала убедитесь, что у вас установлен [PyTorch](pytorch-transfer-learning.md#установка-pytorch) на вашем Jetson, затем загрузите набор данных ниже и запустите скрипт обучения. После этого мы протестируем перетренированную модель в TensorRT на статических изображениях и прямом потоке камеры. ## Загрузка данныхВыполните следующие команды для загрузки и извлечения подготовленного набора данных PlantCLEF: ```bash $ cd jetson-inference/python/training/classification/data $ wget https://nvidia.box.com/shared/static/vbsywpw5iqy7r38j78xs0ctalg7jrg79.gz -O PlantCLEF_Subset.tar.gz $ tar xvzf PlantCLEF_Subset.tar.gz ``` Зеркала набора данных доступны по следующим ссылкам: * https://drive.google.com/file/d/14pUv-ZLHtRR-zCYjznr78mytFcnuR_1D/view?usp=sharing * https://nvidia.box.com/s/vbsywpw5iqy7r38j78xs0ctalg7jrg79 ## Перетренировка модели ResNet-18 Мы будем использовать тот же скрипт обучения, который использовали в предыдущем примере, расположенный по адресу Переход к разделу [python/training/classification/](https://github.com/dusty-nv/jetson-inference/tree/master/python/training/classification). По умолчанию он настроен для обучения модели ResNet-18, но вы можете изменить это с помощью флага `--arch`.Чтобы запустить обучение, выполните следующие команды: ```bash $ cd jetson-inference/python/training/classification $ python3 train.py --model-dir=models/plants data/PlantCLEF_Subset ``` > **Примечание:** Если вы столкнулись с нехваткой памяти или процесс был "убит" во время обучения, попробуйте [Монтирование SWAP](pytorch-transfer-learning.md#mounting-swap) и [Отключение графического интерфейса](pytorch-transfer-learning.md#disabling-the-desktop-gui).
>           Чтобы сэкономить память, вы также можете уменьшить `--batch-size` (по умолчанию 8) и `--workers` (по умолчанию 2).При запуске обучения вы должны увидеть текст с консоли, подобный следующему: ```bash Use GPU: 0 for training => dataset classes: 20 ['ash', 'beech', 'cattail', 'cedar', 'clover', 'cyprus', 'daisy', 'dandelion', 'dogwood', 'elm', 'fern', 'fig', 'fir', 'juniper', 'maple', 'poison_ivy', 'sweetgum', 'sycamore', 'trout_lily', 'tulip_tree'] => using pre-trained model 'resnet18' => reshaped ResNet fully-connected layer with: Linear(in_features=512, out_features=20, bias=True) Epoch: [0][ 0/1307] Time 49. 345 (49. 345) Data 0. 561 ( 0. 561) Loss 3. 2172e+00 (3. 2172e+00) Acc@1 0. 00 ( 0. 00) Acc@5 25. 00 ( 25. 00) Epoch: [0][ 10/1307] Time 0. 779 ( 5. 211) Data 0. 000 ( 0. 060) Loss 2. 3915e+01 (1. 5221e+01) Acc@1 0. 00 ( 5. 68) Acc@5 12. 50 ( 27. 27) Epoch: [0][ 20/1307] Time 0. 765 ( 3. 096) Data 0. 000 ( 0. 053) Loss 3. 6293e+01 (2. 1256e+01) Acc@1 0. 00 ( 5. 95) Acc@5 37. 50 ( 27. 38) Epoch: [0][ 30/1307] Time 0. 773 ( 2. 346) Data 0. 000 ( 0. 051) Loss 2. 8803e+00 (1. 9256e+01) Acc@1 37. 50 ( 6. 85) Acc@5 62. 50 ( 27. 42) Epoch: [0][ 40/1307] Time 0. 774 ( 1. 962) Data 0. 000 ( 0. 050) Loss 3. 7734e+00 (1. 5865e+01) Acc@1 12. 50 ( 8. 84) Acc@5 37. 50 ( 29. 88) Epoch: [0][ 50/1307] Time 0. 772 ( 1. 731) Data 0. 000 ( 0. 049) Loss 3. 0311e+00 (1. 3756e+01) Acc@1 25. 00 ( 10. 29) Acc@5 37. 50 ( 32. 35) Epoch: [0][ 60/1307] Time 0. 773 ( 1. 574) Data 0. 000 ( 0. 048) Loss 3. 2433e+00 (1. 2093e+01) Acc@1 0. 00 ( 9. 84) Acc@5 25. 00 ( 32. 79) Epoch: [0][ 70/1307] Time 0. 806 ( 1. 462) Data 0. 000 ( 0. 048) Loss 2. 9213e+00 (1. 0843e+01) Acc@1 12. 50 ( 8. 98) Acc@5 37. 50 ( 33. 27) ``` Эпоха: [0][ 80/1307] Время 0. 792 ( 1. 379) Данные 0. 000 ( 0. 048) Потеря 3. 2370e+00 (9. 8715e+00) Acc@1 0. 00 ( 9. 26) Acc@5 25. 00 ( 34. 41) Эпоха: [0][ 90/1307] Время 0. 770 ( 1. 314) Данные 0. 000 ( 0. 048) Потеря 2. 4494e+00 (9. 0905e+00) Acc@1 25. 00 ( 9. 75) Acc@5 75. 00 ( 36. 26) Эпоха: [0][ 100/1307] Время 0. 801 ( 1. 261) Данные 0. 001 ( 0. 048) Потеря 2. 6449e+00 (8. 4769e+00) Acc@1 25. 00 ( 10. 40) Acc@5 62. 50 ( 37. 00) См. [Метрики обучения](pytorch-cat-dog).md#training-metrics) на предыдущей странице для описания статистики в выводе выше. ### Точность модели На набор данных PlantCLEF из 10 475 изображений обучение ResNet-18 занимает примерно ~15 минут на эпоху на Jetson Nano, или около 8 часов для обучения модели на 35 эпох. Ниже приведен график для анализа прогресса обучения эпох против точности модели:

На примерно эпохе 30 модель ResNet-18 достигает 75% точности Top-5, а на эпохе 65 она сходится на 85% точности Top-5. Интересно, что эти точки стабильности и сходимости модели происходят в схожие моменты для ResNet-18, как и для предыдущей модели Cat/Dog. Точность Top-1 модели составляет 55%, что мы обнаружим достаточно эффективной на практике, учитывая разнообразие и сложность содержания набора данных PlantCLEF (т. е. несколько перекрывающихся видов растений на одном изображении и множество фотографий листьев и стволов деревьев, которые практически невозможно различить друг от друга). По умолчанию скрипт обучения настроен на выполнение на 35 эпох, но если вы не хотите ждать столько времени для тестирования своей модели, вы можете завершить обучение раньше и перейти к следующему шагу (по желанию перезапустив обучение позже с того места, где остановились). Вы также можете скачать эту завершенную модель, обученную на полных 100 эпох, сюда: * https://nvidia.box.com/s/dslt9b0hqq7u71o6mzvy07w0onn0tw66 Обратите внимание, что модели сохраняются в `jetson-inference/python/training/classification/data/plants/`, включая checkpoint последней эпохи и лучшую модель с самой высокой точностью классификации. Вы можете изменить директорию, в которую сохраняются модели, изменяя флаг `--model-dir`. ## Преобразование модели в ONNX Точно так же, как в примере с кошками/собаками, нам нужно будет конвертировать наш обученный модель из PyTorch в ONNX, чтобы мы могли загрузить его с помощью TensorRT: ```bash python3 onnx_export.py --model-dir=models/plants ``` Это создаст модель под названием `resnet18.onnx` в директории `jetson-inference/python/training/classification/models/plants/` ## Обработка изображений с помощью TensorRT Для классификации некоторых статических тестовых изображений, как и раньше, мы будем использовать расширенные параметры командной строки для `imagenet` для загрузки нашего кастомизированного модели ResNet-18, которую мы переобучили выше. Для выполнения этих команд рабочая директория терминала должна оставаться в директории: `jetson-inference/python/training/classification/` ```bash NET=models/plants DATASET=data/PlantCLEF_Subset # C++ imagenet --model=$NET/resnet18.onnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt $DATASET/test/cattail.jpg cattail.jpg # Python imagenet.py --model=$NET/resnet18.onnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt $DATASET/test/cattail.jpg cattail.jpg ``` ```bash # C++ imagenet --model=$NET/resnet18.onnxonnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt $DATASET/test/elm.jpg elm.jpg # Python imagenet.py --model=$NET/resnet18.onnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt $DATASET/test/elm.jpg elm.jpg ``` ```bash # C++ imagenet --model=$NET/resnet18.onnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt $DATASET/test/juniper.jpg juniper.jpg # Python imagenet.py --model=$NET/resnet18.onnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt $DATASET/test/juniper.jpg juniper.jpg ``` В наборе данных включены несколько тестовых изображений, или вы можете загрузить свои собственные изображения для тестирования. ### Обработка всех тестовых изображений Если вы хотите классифицировать все тестовые изображения за один раз, вы можете запустить программу на всей директории: ``` bash mkdir $DATASET/test_output imagenet --model=$NET/resnet18.onnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt \\ $DATASET/test $DATASET/test_output ``` В этом случае все изображения будут считываться из директории `test/` датасета и сохраняться в директорию `test_output/`.Для получения дополнительной информации о загрузке/сохранении последовательностей изображений, см. страницу [Camera Streaming and Multimedia](aux-streaming.md#sequences).

Запуск программы для работы с потоковым видео с камеры

Вы также можете попробовать запустить перетренированную модель растений на потоковом видео с камеры, как показано ниже:

# C++ (MIPI CSI)
imagenet --model=$NET/resnet18.onnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt csi://0
# Python (MIPI CSI)
imagenet.py --model=$NET/resnet18.onnx --input_blob=input_0 --output_blob=output_0 --labels=$DATASET/labels.txt csi://0
Похоже, мне следует быть начеку относительно ядовитой ивы!

Далее мы рассмотрим инструмент на основе камеры для сбора и маркировки собственных датасетов, захваченных из потокового видео.

Далее | Сбор собственных датасетов классификации
Назад | Перетренировка на датасете кошек/собак

© 2016-2019 NVIDIA | Содержание

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/duping812-jetson-inference.git
git@api.gitlife.ru:oschina-mirror/duping812-jetson-inference.git
oschina-mirror
duping812-jetson-inference
duping812-jetson-inference
master