Набор обучающих данных mmdetection и конфигурация виртуальной среды

машинное обучение

скачать mmdetection

mmdetection - это инструмент, программы установки нет, просто нужно клонировать ее на сервер на git.

Ссылка на сайт:https://github.com/open-mmlab/mmdetection

виртуальная среда

Чтобы обучить набор данных с помощью mmdetection, сначала создайте виртуальную среду на сервере.

pyenv virtualenv <python版本> <环境name>    创建虚拟环境

pyenv deactivate    退出虚拟环境

pyenv uninstall <环境name>  删除虚拟环境

pyenv activate <环境name>  进入虚拟环境

пакет конфигурации

После входа в виртуальную среду приступайте к настройке необходимых пакетов

pip install torch==1.6.0

pip install torchvision==0.7.0

pip install -r requirements/build.txt

pip install -v -e .

pip install ninja 

# 这里由于下载的是mmdetection-master,所以必须要下载mmcv-full
# 这里的cu101/torch1.6.0改为自己的cuda和torch的版本号
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html

Версии нативных cuda, torch, torchvision и mmcv соответствуют друг другу

Ссылка на таблицу соответствия:https://blog.csdn.net/zhaosuyuan/article/details/115942293?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_aggregation-1-115942293.pc_agg_rank_aggregation&utm_term=torch%E5%92%8Ccuda%E7%89%88%E6%9C%AC%E5%AF%B9%E5%BA%94&spm=1000.2123.3001.4430

Ссылка на таблицу соответствия:https://github.com/open-mmlab/mmcv#install-with-pip

Подготовьте набор данных

  1. Создайте папку данных в папке
data
|---coco
    |---annotations
        |---instances_train2017.json
        |---instances_val2017.json
    |---val2017
    |---train2017


Среди них val2017 и train2017 — папки с изображениями проверочного набора и тестового набора, а instances_train2017.json и instances_val2017.json — файлы аннотаций обучающего набора и проверочного набора (конечно, здесь и далее можно использовать собственное имя перейти к коду, чтобы изменить его, но что нужно изменить Подробнее)

Конфигурация модели

Далее заполним файл конфигурации модели

Первый взглядconfigs/_base_/models/Справочник, вот параметры соответствующие каждой модели, сначала пытаемся изменить более fastRCNN, открываем fast_rcnn_r50_fpn.py

Найдите num_classes, измените количество классов на количество классов в вашем собственном наборе данных, вам не нужно +1 из-за фона, потому что mmdetection обработает его автоматически.


# num_classes=80,
num_classes=1,

существуетmmdet/datasets/coco.pyСоответствующие изменения также должны быть внесены в

def coco_classes():
    return [
        '''
        'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train',
        'truck', 'boat', 'traffic_light', 'fire_hydrant', 'stop_sign',
        'parking_meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep',
        'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella',
        'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard',
        'sports_ball', 'kite', 'baseball_bat', 'baseball_glove', 'skateboard',
        'surfboard', 'tennis_racket', 'bottle', 'wine_glass', 'cup', 'fork',
        'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
        'broccoli', 'carrot', 'hot_dog', 'pizza', 'donut', 'cake', 'chair',
        'couch', 'potted_plant', 'bed', 'dining_table', 'toilet', 'tv',
        'laptop', 'mouse', 'remote', 'keyboard', 'cell_phone', 'microwave',
        'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase',
        'scissors', 'teddy_bear', 'hair_drier', 'toothbrush'
        '''
        'tree',
    ]

Затем измените класс, соответствующий набору данных кокоса, вmmdet/core/evaluation/class_names.py, найдите набор данных кокоса и измените его

'''
CLASSES = ('person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus',
          'train', 'truck', 'boat', 'traffic light', 'fire hydrant',
            'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog',
            'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe',
            'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
            'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat',
            'baseball glove', 'skateboard', 'surfboard', 'tennis racket',
            'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
            'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot',
            'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
            'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop',
            'mouse', 'remote', 'keyboard', 'cell phone', 'microwave',
            'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock',
            'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush')
'''
CLASSES = ('tree',)

сделано, то мы используемtool/train.pyдля создания соответствующего файла конфигурации

python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py --work-dir record


--work-dir означает указать рабочий каталог, и здесь через некоторое время будет сгенерирован файл конфигурации.После того, как файл конфигурации будет сгенерирован, мы можем прервать его, затем найти файл конфигурации в рабочем каталоге и внести изменения ( различные тонкие настройки, такие как скорость обучения, время обучения, продолжение последнего файла обучения и т. д.), а затем запустите этот файл конфигурации

python tools/train.py record/faster_rcnn_r50_fpn_1x_coco.py

Debug

Вот список проблем, с которыми я столкнулся при настройке

проблема с версией

Версия torch cuda mmcv-full должна соответствовать, а версия cuda не может быть слишком низкой

файл ошибки не найден

Он может отсутствовать в процессе pip, или процесс изменения файла неверен. Вы можете повторить pip еще раз, чтобы увидеть, является ли это требованием.

ImportError: libcudart.so.10.1: cannot open shared object file: No such file or directory

Это самая сложная проблема, с которой я сталкивался, и я потерял много пропажи.Вот основная причина этой ошибки:Текущая версия cuda не 10.1 и нужные файлы отсутствуют

Я пробовал много способов:

  1. Причина вышеуказанной ошибки в том, что файл libcudart.so.10.1 не найден, а выполнение завершено.sudo ln -s /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/lib/libcudart.so.10.1После команды libcudart.so.10.1 фактически уже находится под usr/lib, который можно пропустить черезcd /usr/libПросмотрите файл, но этот файл на самом деле является поддельным файлом, который нельзя ни скачать, ни открыть. Нажмите, чтобы сообщить об ошибке. Говорят, что два файла libcudart.so.10.1 и libcudart.so.10.1.243 скопированы из других местах и ​​можно решить. , но я так и не дождался, пока автор той статьи пришлет мне эти два файла

  2. Я подозреваю, что загрузка cudatoolkit не завершена, но я обнаружил, что мой cudatoolkit доступен и завершен с помощью следующих инструкций.

默认目录为:local,进入local:cd /usr/local

输入命令:ls,查看该目录下的文件,可以看到安装的cuda在此处

进入cuda文件:cd cuda-7.5(我的是7.5),此处为安装的东西

查找安装的工具,在bin目录下,进入cuda文件所在目录,然后进入bin目录:cd bin

输入命令:ls,就可以看到cuda toolkit自带的工具了,这些工具可以直接使用。
  1. Наконец я подозреваю, что попал в нужное место:Есть проблема с софтлинком системы и cuda

Но найдя это, я все же потратил несколько часов на решение проблемы, потому что способов переключения версий cuda и конвертации софтлинков cuda в интернете много.Пробовал на сервере.

Ниже приведена еще одна категория, в которой записаны различные инструкции, которые я использую.

3.1 Сначала поговорим о последней успешной команде

введите команду:

export PATH=/usr/local/cuda-7.5/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH

(здесь я использую cuda7.5, вам нужно проиграть по своей версии)

Таким образом, путь добавляется.Введите команду: nvcc -V, чтобы проверить, успешно ли добавлен путь.Если результат nvcc, добавление выполнено успешно. Таким образом, инструменты, входящие в комплект, можно использовать непосредственно в терминале.

3.2

Проверьте, на какую версию cuda указывает текущая программная ссылка cuda.

cd /usr/local
ls
stat cuda
  1. удалить программную ссылку
cd /usr/local/
sudo rm -rf cuda
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda
  1. Измените комментарии .bashrc в разделе home/, то есть переменные среды.

Команда открытия файла .bashrc:gedit ~/.bashrc

# 将8.0的注释掉,10.0版本的export前面的#去掉即可
export PATH="/usr/local/cuda-10.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME=/usr/local/cuda
  1. Посмотреть версии CUDA и CUDNN

cat /usr/local/cuda/version.txt

4. Но когдаnvcc -V, он по-прежнему отображаетсяcuda10.0(оригинальная версия) Итак, мы смотрим на путь переменной окружения, команду:echo $PATH

5. Найдите причину: это потому, что/usr/bin/cuda-10.0(1) по сравнению с PATH/usr/local/cuda-10.1(2) находится впереди, поэтому команда nvcc –V будет следовать порядку PATH, сначала перейдите к ①, чтобы найти его, он должен быть найден в nvcc в этой папке версии 10.0 cuda, поэтому я не буду идти в другое место, чтобы найти, мы не нашли нужную версию cuda в ②;

Чтобы изменить порядок ① и ② в PATH, используется метод, который заключается в изменении позиции переменной среды ②:export PATH=/usr/local/cuda/bin:$PATH

6. Опятьnvcc -V

3.3 Использование альтернативных обновлений для достижения многоверсионного переключения CUDA

# 为cuda配置优先级,数字越大优先级越高:
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.0/ 10
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.2/ 20

Затем используйте оператор команды: sudo update-alternatives --config cudaвыберите версию cuda

nvcc-vПроверьте, прошла ли замена успешно

ошибка неверный синтаксис

Эта ошибка означает ошибку символа. Вы можете перейти к соответствующему файлу, чтобы узнать, есть ли какие-либо пропущенные знаки препинания вокруг количества строк с ошибкой в ​​соответствующем файле.

Наиболее вероятные сценарии:Вы вообще не вошли в свою виртуальную среду., все еще в базовой среде, версия python2 в базовой среде слишком низкая для запуска некоторого кода python3, поэтому в несовместимых местах сообщается об ошибке

виртуальная среда

Убедитесь, что каждый раз, когда вы запускаете файл train.py,Должен войти в самостоятельную среду, а не в базовой среде, версия python в базовой среде — это старая версия python2, она сообщит, что версия python слишком низкая, создавая у людей иллюзию установки нового python.

Обратите внимание на то, что имеет виртуальная среда в текущей среде.pyenv versions