我的AI之路(46)--在Xavier上的自制dock镜像内安装支持部署EfficientDet和CenterNet模型以及mmdetection序列模型的环境
按照制作支持GPU的用于部署AI模型的ARM64版docker镜像一文中的步骤制作出基础镜像并创建容器后,连到这个容器,执行下列步骤,进行支持部署EfficientDet和CenterNet模型以及mmdetection序列模型的环境的安装:
1) EfficientDet
apt-get update
sudo apt-get install apt-file
apt-file update
apt-file search libgthread-2.0.so.0
apt-get install libglib2.0-dev
apt-get install libsm6
apt-get install libxrender1
apt-get install libxext6
pip3 install -i http://mirrors.aliyun.com/pypi/simple/ tensorboardX --trusted-host mirrors.aliyun.com
下载efficientdet源码并根据自己的数据集的分类情况对代码做出相应的修改,具体办法会在后续文章中给出,并将标注好了的验证测试数据在data/coco/val2017下面,将训练出的模型放到test_dataset.py/mAP_evaluation.py脚本里指定的地方,然后即可执行下面的测试以检查GPU是否使用正常,并可在test_dataset.py中增加时间的打印检查识别每张图片所花费的时间:
cd efficientdet
python test_dataset.py
python mAP_evaluation.py
对于为单张图片调用模型进行识别的情况,efficientdet的项目里没有这样的代码,需要自己写。
2) CenterNet
pip install -i http://mirrors.aliyun.com/pypi/simple/ llvmlite==0.25 --trusted-host mirrors.aliyun.com
pip install -i http://mirrors.aliyun.com/pypi/simple/ numba==0.39 --trusted-host mirrors.aliyun.com
pip install -i http://mirrors.aliyun.com/pypi/simple/ progress progress matplotlib easydict scipy --trusted-host mirrors.aliyun.com
下载CenterNet的源码到本地,并按照 使用自己的数据集训练CenterNet 一文中所述的步骤对代码进行修改。
然后针对CUDA10.0,使用不同版本的DCN代码进行编译(Xingyi Zhou的项目里的DCN代码只能用于CUDA9或以下版本)
cd CenterNet
cd src/lib/models/networks
rm -rf DCNv2
git clone https://github.com/CharlesShang/DCNv2
cd DCNv2
vi src/cuda/dcn_v2_cuda.cu
检查下面这句话确保没有被注释掉:
THCState *state = at::globalContext().lazyInitCUDA();
然后执行
python setup.py build develop
然后
cd src/lib/external
vi setup.py
把extra_compile_args=["-Wno-cpp", "-Wno-unused-function"] 注释掉:
#extra_compile_args=["-Wno-cpp", "-Wno-unused-function"]
再执行:
python setup.py build_ext --inplace
python setup.py install
OK,可以使用了,将测试数据和训练出的模型放到指定的相应的地方,然后执行下面的命令测试:
python -u test.py ctdet --exp_id coco_hg --arch hourglass --keep_res --debug 3 --load_model ../exp/ctdet/fire_coco_hg/model_best.pth --gpus 0
python -u demo.py ctdet --arch hourglass --demo ../data/coco/test/ --load_model ../exp/ctdet/fire_coco_hg/model_best.pth
3) mmdetection tool env
安装支持包:
pip install -i http://mirrors.aliyun.com/pypi/simple/ asynctest codecov flake8 isort kwarray pytest pytest-cov pytest-runner ubelt yapf --trusted-host mirrors.aliyun.com
pip install -i http://mirrors.aliyun.com/pypi/simple/ addict terminaltables cityscapesscripts --trusted-host mirrors.aliyun.com
xdoctest没有现成的arm64版本的包,所需要从源码安装:
git clone https://github.com/Erotemic/xdoctest.git
cd xdoctest
python setup.py install
安装下面两个依赖于opencv-python的包,如果找不到opencv-python,下面这两个包会报错(对于执行从源码编译安装opencv或者执行apt-get install python-opencv和apt-get install python3-opencv从Ubuntu的repository安装opencv后opencv可以在python中使用,但是安装一些包时仍然报错说找不到opencv-python这个问题极其解决,我会另外写一篇文章,因为这个问题有点复杂),另外这两个包的顺序不能颠倒,否则安装albumentations时会报找不到opencv-python-headless的错误,注意opencv-python-headless是和opencv-python冲突的版本,不能同时安装,如果先安装imagecorruptions可以成功,再安装albumentations>=0.3.2时就不报错了:
pip install -i http://mirrors.aliyun.com/pypi/simple/ imagecorruptions --trusted-host mirrors.aliyun.com
pip install -i http://mirrors.aliyun.com/pypi/simple/ albumentations>=0.3.2 --trusted-host mirrors.aliyun.com
安装依赖于opencv-python的mmcv:
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
pip install -e .
下载mmdetection工具的源码:
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
把测试数据和训练出的模型放到对应的位置,对要测试的模型对应的config文件做相应的修改,然后对模型进行测试,例如:
python -u tools/test.py /home/mmdetection/fire-mmdetection/configs-us/cascade_rcnn_hrnetv2p_w32_20e.py \
/home/mmdetection/fire-mmdetection/mm_model/cascade_rcnn_hrnetv2p_w32/epoch_50.pth \
--show
python -u tools/test.py /home/mmdetection/fire-mmdetection/configs-us/cascade_rcnn_hrnetv2p_w32_20e.py \
/home/mmdetection/fire-mmdetection/mm_model/cascade_rcnn_hrnetv2p_w32/epoch_50.pth \
--eval mAP