【yolo】yolov3的pytorch版本保存自定义数据集训练好的权重,并载入自己的模型
多次試驗(yàn)終于測出來了!!很高興,結(jié)果截圖:
數(shù)據(jù)集是來自網(wǎng)上的,代碼原型是github一個大概五千多star的pytorch-yolov3,但原代碼并沒有載入自己的模型進(jìn)行訓(xùn)測試階段,然后parser參數(shù)一直不明白,導(dǎo)致試了多次。
其中的要點(diǎn):
1.初始化權(quán)重的修改
2。載入保存好的權(quán)重。(模式選擇要正確)
3。格式要正確(比如什么地方加-- 什么地方加/)
4。保存訓(xùn)練的模型
傳入?yún)?shù)部分:
parser = argparse.ArgumentParser()parser.add_argument("--image_folder", type=str, default="data/samples", help="path to dataset")parser.add_argument("--model_def", type=str, default="config/yolov3.cfg", help="path to model definition file")parser.add_argument("--weights_path", type=str, default="weights/yolov3.weights", help="path to weights file")parser.add_argument("--class_path", type=str, default="data/coco.names", help="path to class label file")parser.add_argument("--conf_thres", type=float, default=0.8, help="object confidence threshold")parser.add_argument("--nms_thres", type=float, default=0.4, help="iou thresshold for non-maximum suppression")parser.add_argument("--batch_size", type=int, default=1, help="size of the batches")parser.add_argument("--n_cpu", type=int, default=0, help="number of cpu threads to use during batch generation")parser.add_argument("--img_size", type=int, default=416, help="size of each image dimension")parser.add_argument("--checkpoint_model", type=str, help="path to checkpoint model")opt = parser.parse_args()print(opt)其中("–weights_path"才是載入自己的模型部分,一開始以為是"–checkpoint_model",導(dǎo)致怎么都不對。
記錄如圖:
可以看到根本沒有輸出標(biāo)簽,即并沒有傳自己的模型,而用的默認(rèn)模型,默認(rèn)模型不是自己訓(xùn)練的數(shù)據(jù)當(dāng)然不可能識別出來。
正確傳參的代碼:
python3 detect.py --image_folder data/custom/dd --model_def config/yolov3-custom.cfg --class_path data/custom/classes.names --checkpoint_model checkpoints/yolov3_ckpt_99.pth --weights_path checkpoints/yolov3_ckpt_99.pth
此時標(biāo)簽已經(jīng)輸出。
其中detect.py中載入模型的語句:
# Set up modelmodel = Darknet(opt.model_def, img_size=opt.img_size).to(device)if opt.weights_path.endswith(".weights"):# Load darknet weightsmodel.load_darknet_weights(opt.weights_path)else:# Load checkpoint weightsmodel.load_state_dict(torch.load(opt.weights_path))model.eval() # Set in evaluation modeif opt.weights_path.endswith(".weights"):
決定了是weights_path
train.py中保存模型:
if epoch % opt.checkpoint_interval == 0:
torch.save(model.state_dict(), f"checkpoints/yolov3_ckpt_%d.pth" % epoch)
之前用resnet18訓(xùn)練過一個模型,但是從參數(shù)看感覺yolov3網(wǎng)絡(luò)結(jié)構(gòu)比它復(fù)雜
下一步的學(xué)習(xí):
1。如何輸出目標(biāo)中心坐標(biāo)點(diǎn)(如果有多個坐標(biāo)點(diǎn)如何迭代)
2。調(diào)整哪些參數(shù)可以得到更精確的測試結(jié)果
3。上面的代碼每輪epoch都保存了模型,結(jié)果一共保存了99個,但實(shí)際運(yùn)用的話需要保存map最好的那個,所以這個代碼需要優(yōu)化
4。怎么從攝像頭讀取圖片讓yolov3檢測
5。可不可以預(yù)處理圖片后增加圖片數(shù)量。
總結(jié)
以上是生活随笔為你收集整理的【yolo】yolov3的pytorch版本保存自定义数据集训练好的权重,并载入自己的模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu上训练yolov3: Cau
- 下一篇: 【问题记录】raise IndexErr