Это 9-й день моего участия в августовском испытании обновлений.Подробности о мероприятии:Испытание августовского обновления
Программно-аппаратная среда
- ubuntu 18.04 64bit
- nvidia 1070Ti
- anaconda with python 3.7
- cuda 10.1
- cudnn 7.6
- paddlepaddle 1.8.4
- paddledetection 0.5
Введение
Цитирование официального введения проекта
Комплект разработки обнаружения целей PaddleDetection предназначен для того, чтобы помочь разработчикам завершить весь процесс разработки, формирования, обучения, оптимизации и развертывания модели обнаружения быстрее и лучше. PaddleDetection модульно реализует множество основных алгоритмов обнаружения целей, предоставляет богатые стратегии улучшения данных, компоненты сетевого модуля (например, магистральную сеть), функции потерь и т. д., а также интегрирует возможности сжатия моделей и кросс-платформенного высокопроизводительного развертывания. После длительного периода промышленной практики и полировки, PaddleDetection имеет плавный и превосходный пользовательский интерфейс и широко используется разработчиками в более чем десяти отраслях, таких как промышленный контроль качества, обнаружение изображений с помощью дистанционного зондирования, беспилотный контроль, новая розничная торговля, Интернет и научное исследование.
Подводя итог в одном предложении, это очень здорово!
Давайте взглянем на обзор структуры пакета
Architectures | Backbones | Components | Data Augmentation |
|
|
|
|
Глаза полны цветов, а поддержка слишком всесторонняя. Помимо функции, давайте посмотрим на производительность
Репрезентативные модели каждой модельной структуры и магистральной сети находятся вCOCO
Точность в наборе данныхmAP
и одна картаTesla V100
верхняя прогнозируемая скорость (FPS
) сравнительная таблица
Модель на рисунке можно получить в библиотеке моделей по адресуGitHub.com/paddle pad DL…
Установить весло
весло (PaddlePaddle
) — это первая в Китае открытая, технологически продвинутая и полнофункциональная платформа глубокого обучения промышленного уровня, разработанная Baidu, объединяющая базовую среду обучения и логического вывода для глубокого обучения, библиотеку базовых моделей и сквозную разработку. набор и множество компонентов инструмента.
Сначала создайтеpython
виртуальную среду, затем установитеpaddlepaddle-gpu
conda create -n ppdetection python=3.7
conda activate ppdetection
pip install paddlepaddle-gpu==1.8.4.post107 -i https://mirror.baidu.com/pypi/simple
Используйте столько, сколько вам нужноgpu
Если да, то также установитеnvidia
изNCCL
Framework, он используется для связи с несколькими картами, адрес загрузкиdeveloper.NVIDIA.com/rural-out/rural-out-of…, выберите совпадениеCUDA
загрузка версии
Проверьте с помощью следующей команды
(ppdetection) xugaoxiang@1070Ti:~/Works/github/PaddleDetection-release-0.5$ ipython
Python 3.7.9 (default, Aug 31 2020, 12:42:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import paddle.fluid as fluid
In [2]: fluid.install_check.run_check()
Running Verify Fluid Program ...
W1208 13:28:59.964426 13251 device_context.cc:252] Please NOTE: device: 0, CUDA Capability: 61, Driver API Version: 11.0, Runtime API Version: 10.0
W1208 13:29:00.090900 13251 device_context.cc:260] device: 0, cuDNN Version: 7.6.
Your Paddle Fluid works well on SINGLE GPU or CPU.
Your Paddle Fluid works well on MUTIPLE GPU or CPU.
Your Paddle Fluid is installed successfully! Let's start deep Learning with Paddle Fluid now
In [3]: import paddle
In [4]: paddle.__version__
Out[4]: '1.8.4'
In [5]:
Установите другие зависимости
pip install pycocotools
Установить обнаружение весла
Последняя версия 0.5.После скачивания войдите в каталог для установки необходимых зависимостей
wget https://github.com/PaddlePaddle/PaddleDetection/archive/release/0.5.zip
unzip PaddleDetection-release-0.5.zip
cd PaddleDetection-release-0.5
pip install -r requirements.txt
Убедитесь, что следующие тесты пройдены
(ppdetection) xugaoxiang@1070Ti:~/Works/github/PaddleDetection-release-0.5$ python ppdet/modeling/tests/test_architectures.py
ss/home/xugaoxiang/Works/github/PaddleDetection-release-0.5/ppdet/core/workspace.py:118: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
isinstance(merge_dct[k], collections.Mapping)):
..........
----------------------------------------------------------------------
Ran 12 tests in 2.866s
OK (skipped=2)
Используйте официальную модель предварительной подготовки, чтобы предсказать картину, быстро ощутите эффект прогнозирования модели.
# 通过use_gpu参数设置是否使用GPU
python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg
После того, как программа закончит работу, онаoutput
Сгенерировать одноименное изображение с результатом предсказания в папке
обучение модели
здесь сpaddledetection
Возьмем в качестве примера включенные наборы данных apple, банана и апельсина, скрипты загрузки и файлы конфигурации предоставлены в официальном коде.
cd dataset/fruit
# 下载数据集,vod格式
python download_fruit.py
Этот набор данных о фруктах взят изVOC
После завершения формата после загрузки структура каталогов такая.
Затем вы можете начать обучение, здесь используйтеYOLOv3
В качестве обучающей моделиbackbone
даmobilenet_v1
python tools/train.py -c configs/yolov3_mobilenet_v1_fruit.yml --eval
в-c
указать профиль обучения,--eval
Указывает на тестирование во время обучения, объяснение параметра в файле конфигурации может относиться кGitHub.com/paddle pad DL…Очень подробно
пройти черезvisualdl
команда для просмотра кривой изменения в реальном времени
# 设置visualdl参数
python tools/train.py -c configs/yolov3_mobilenet_v1_roadsign.yml --eval -o use_gpu=true --use_vdl=True --vdl_log_dir=vdl_dir/scalar
# 打开visualdl
visualdl --logdir vdl_dir/scalar/ --host <host_IP> --port <port_num>
Обученная модель хранится вoutput/yolov3_mobilenet_v1_fruit
Вниз
Используйте обученную модель, чтобы делать прогнозы
# 使用参数--infer_dir来预测图片文件夹
python tools/infer.py -c configs/yolov3_mobilenet_v1_fruit.yml -o weights=output/yolov3_mobilenet_v1_fruit/best_model.pdmodel --infer_img=demo/orange_71.jpg --output_dir=output
развертывать
использоватьPaddleServing
Метод развертывания: сначала установите пакет зависимостейpaddle-serving-client
иpaddle-serving-server-gpu
pip install paddle-serving-client -i https://mirror.baidu.com/pypi/simple
pip install paddle-serving-server-gpu -i https://mirror.baidu.com/pypi/simple
модуль экспорта
python tools/export_serving_model.py -c configs/yolov3_mobilenet_v1_fruit.yml -o use_gpu=true weights=output/yolov3_mobilenet_v1_fruit/best_model.pdmodel --output_dir=./inference_model
Вышеупомянутая команда будет в./inference_model
создать папкуyolov3_mobilenet_v1_fruit
папка, структура каталогов такая
inference_model
│ ├── yolov3_mobilenet_v1_fruit
│ │ ├── infer_cfg.yml
│ │ ├── serving_client
│ │ │ ├── serving_client_conf.prototxt
│ │ │ ├── serving_client_conf.stream.prototxt
│ │ ├── serving_server
│ │ │ ├── conv1_bn_mean
│ │ │ ├── conv1_bn_offset
│ │ │ ├── conv1_bn_scale
│ │ │ ├── ...
serving_client
в папкеserving_client_conf.prototxt
Подробное описание входной и выходной информации модели,serving_client_conf.prototxt
Содержимое файла:
feed_var {
name: "image"
alias_name: "image"
is_lod_tensor: false
feed_type: 1
shape: 3
shape: 608
shape: 608
}
feed_var {
name: "im_size"
alias_name: "im_size"
is_lod_tensor: false
feed_type: 2
shape: 2
}
fetch_var {
name: "multiclass_nms_0.tmp_0"
alias_name: "multiclass_nms_0.tmp_0"
is_lod_tensor: true
fetch_type: 1
shape: -1
}
Следующий стартPaddleServing
сервис, должен быть включен все время
cd inference_model/yolov3_mobilenet_v1_fruit
python -m paddle_serving_server_gpu.serve --model serving_server --port 9393 --gpu_ids 0
Подготовитьlabel_list.txt
документ
cd inference_model/yolov3_mobilenet_v1_fruit
# 将水果数据集对应的label_list.txt文件拷贝到当前文件夹下
cp ../../dataset/fruit/label_list.txt .
начать тестирование
# 进入目录
cd inference_model/yolov3_mobilenet_v1_fruit/
# 测试代码 test_client.py
python ../../deploy/serving/test_client.py ../../demo/orange_71.png