Python影像辨識筆記(二十三):NanoDet,可能是目前最輕量化的Object Detection模型

[0]建議使用PyTorch > 1.6版本進行訓練[1]實際以320x320的size去訓練後發現,在70個epochs,同樣採用COCO2017 dataset的情況下,mAP有明顯的差距我所訓練出來的mAP: 18.4
官方宣稱的mAP: 20.6
[2]Model Size也差了將近1倍(7.55對上3.86)新舊版PyTorch Model說明實際訓練出來的Model,Size為7.55MB(*.pth)
官方提供訓練好的Model,size為3.86MB(*.pth)(PyTorch>=1.6)
官方提供訓練好的Model,size為3.79MB(*.pth)(PyTorch<1.6)
[3]將PyTorch Model轉成NCNN格式[4]無法Reproduce出官方宣稱的resultsgd存在一定的随机性,20.6的mAP是多次调参后得到的,如果想要复现效果,可以加长第一次lr decay前的epoch数,取mAP最佳的模型进行lr decay。训练过程中保存的模型是附带优化器的check point,可以在save model时不保存优化器来获得3MB的模型。初始化是加载imagenet预训练模型的,调参都是在sgd上调的,具体方式就是另一个评论里说的,用初始的大lr训练比较多的epoch,当大lr情况下的mAP不再上升之后,选取最高mAP的checkpoint进行lr decay继续训练。多卡大batch训练的话总step数变少,确实是会导致mAP略微下降,但是我在总共70epoch下是能训练到19多mAP。目前给出的20.6是在125epoch第一次decay,总共训练150epoch得到的。收敛需要保证足够的step数,coco是11万张,如果在1万张上训练,至少需要10倍epoch数,尝试调大epoch加载预训练模型,从头来训练,最终保存的模型是否把预训练的参数也保存进去,这样3+7=10,也就是模型最终的大小为10M,PC端1G多的内存占用,20%的CPU占用。
官方釋出的對照表
pip install Cython termcolor numpy tensorboard pycocotools matplotlib pyaml opencv-python tqdmgit clone https://github.com/RangiLyu/nanodet.git
cd nanodet
python setup.py develop
#!/bin/bash
# Zip coco folder
# zip -r coco.zip coco
# tar -czvf coco.tar.gz coco
# Download labels from Google Drive, accepting presented query
filename="coco2017labels.zip"
fileid="1cXZR_ckHki6nddOmcysCuuJFM--T-Q6L"
curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" >/dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=$(awk '/download/ {print $NF}' ./cookie)&id=${fileid}" -o ${filename}
rm ./cookie
# Unzip labels
unzip -q ${filename} # for coco.zip
# tar -xzf ${filename} # for coco.tar.gz
rm ${filename}
# Download and unzip images
cd coco/images
f="train2017.zip" && curl http://images.cocodataset.org/zips/$f -o $f && unzip -q $f && rm $f
f="val2017.zip" && curl http://images.cocodataset.org/zips/$f -o $f && unzip -q $f && rm $f
# cd out
cd ../..
修改save_path路徑到您所指令的位置
修改num_classes到目標class的數量
修改image path and annotation path的路徑到上一個步驟所取得的COCO圖片路徑位置
修改第69行的device,指定第幾顆GPU以及batch size等相關參數
可自己修改total_epochs、lr和lr_schedule來符合自己的需求
更多詳情,請參考config_file_detail.md
#單顆GPU
python tools/train.py config/nanodet-m.yml
#多顆GPU(目前Windows在1.7版以前的PyTorch,尚不支援多GPU訓練)
python -m torch.distributed.launch --nproc_per_node=GPU_NUM --master_port 29501 tools/train.py CONFIG_PATH

--

--

Machine Learning | Deep Learning | https://linktr.ee/yanwei

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store