• paddleDetection训练自己的模型


    配置环境

    参考:https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/docs/tutorials/INSTALL_cn.md
    我的配置是:3090 cuda驱动版本11.3 runtime版本11.0 CUDNN 8.0
    先有个虚拟环境:

    conda create --name paddledetection python=3.7
    
    • 1

    paddledetection是paddlepaddle下的一个子模块。所以必须要先安装paddlepaddle才能运行paddledetection,因此先在官网https://www.paddlepaddle.org.cn/ 找到自己配置相关的paddlepaddle命令,安装paddlepaddle:

    python -m pip install paddlepaddle-gpu==2.3.1.post111 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
    
    • 1

    然后测一下:

    python -c "import paddle; print(paddle.__version__)"
    
    
    • 1
    • 2

    然后安装paddleDetection:

    pip install -r requirements.txt #安装依赖
    python setup.py install #编译安装paddledet
    
    • 1
    • 2

    再测试一下:

    python ppdet/modeling/tests/test_architectures.py
    
    • 1
    整个过程其实很快。

    测试推理:

    # 在GPU上预测一张图片
    export CUDA_VISIBLE_DEVICES=0
    python tools/infer.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml -o use_gpu=true weights=https://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_1x_coco.pdparams --infer_img=demo/000000014439.jpg
    
    • 1
    • 2
    • 3

    会先给下载一个模型:

    结果:
    看起来是显存不足,因为我其他程序占用着显存,清理后再执行推理:
    推理成功。

    准备数据集

    参考官方文档:

    https://paddledetection.readthedocs.io/tutorials/Custom_DataSet.html

    一般我打标注用labelimg,我手头有一些VOC格式的数据,如何准备的可以先参照这个文章:

    https://raychiu.blog.csdn.net/article/details/119342153

    我需要根据PaddleDetection的VOC格式要求整理一下数据:
    到Annotations同级目录下:
    第一步创建label文件:

    echo -e "invalid\npositive\nnegative" > label_list.txt
    
    • 1

    第二步把所有图片路径组织到一个文件里:

    ls JPEGImages/*.jpg | shuf > all_image_list.txt
    
    • 1

    第三步按照图片路径在前标注文件在后的格式组织一个文件:

    awk -F"/" '{print $2}' all_image_list.txt | awk -F".jpg" '{print $1}'  | awk -F"\t" '{print "JPEGImages/"$1".jpg Annotations/"$1".xml"}' > all_list.txt
    
    • 1

    第四步自己按照8:2的比例计算一下训练集和验证集的数目划分数据集:

    head -n 1820 all_list.txt > test.txt
    tail -n 7281 all_list.txt > trainval.txt
    
    • 1
    • 2

    如果要训练、验证、测试都要划分,假如是8:1:1那么:

    head -n 910 all_list.txt > test.txt
    head -n 1820 all_list.txt | tail -n 910 > val.txt
    tail -n 7281 all_list.txt > train.txt
    
    • 1
    • 2
    • 3

    数据集也划分好了,删了不用的文件:

    rm -rf all_image_list.txt all_list.txt
    
    • 1

    是这样的目录:

    ## 开始训练 用yolov3训练: 先找到和是的yml文件:
    注意修改voc.yml中的数据路径。
    python tools/train.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml --eval --use_vdl=true --vdl_log_dir=vdl_dir/scalar -o use_gpu=true
    
    • 1

    参数解释:

    –eval #边训练边验证 吃GPU
    –use_vdl #类似于tensorboard,true开启,训练完loss可视化
    –vdl_log_dir #log文件保存路径,和上面一句一起使用
    -o use_gpu #是否使用gpu训练

    会先自动下载一个预训练模型,然后开始训练了:

    怎么用VisualDL工具看日志呢,因为服务器没有显示功能,只能远程服务器看,步骤如下: 第一步,服务器先启动VisualDL服务:
    visualdl --logdir vdl_dir/scalar/
    
    • 1
    可以看到自动起了一个8040的服务 第二步,windows远程服务器,并做一个端口转发:
    ssh -L 10086:127.0.0.1:8040 xiaoling@192.168.6.55
    
    • 1

    第三步浏览器访问地址:http://localhost:10086/ 即可看到日志页面了:

    训练完成:

    ## 模型部署 测试推理:
    python -u tools/infer.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml    --infer_img=demo/3.bmp
    
    • 1
    导出模型:
    python -u tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml  --output_dir=./inference_model
    
    • 1
    使用python端进行预测:
    python deploy/python/infer.py --model_dir=./inference_model/yolov3_darknet53_270e_voc --image_file=demo/3.bmp  --device=GPU
    
    • 1
  • 相关阅读:
    尚硅谷设计模式(十九)中介者模式
    浏览器插件开发爬虫记录
    数据迁移工具(数据库之间进行数据库迁移所使用的工具及迁移流程。)
    调研280+篇文献!CVPR最佳论文得主清华黄高团队提出首篇动态网络综述,全面回顾动态网络的发展!
    Docker的常用命令
    原创|一个统计查询模块基于设计模式的抽象设计
    警惕.360勒索病毒,您需要知道的预防和恢复方法。
    jpa面试题解析,java面试题
    间隔分区表导出指定的分区数据
    【浅谈网络舆情自动评判】
  • 原文地址:https://blog.csdn.net/RayChiu757374816/article/details/126389073