R-YOLOv4
R-YOLOv4 copied to clipboard
請問我該怎麼沿著上次訓練完的麼型接續訓練模型
由於每次在啟動train.py時都會問是否要覆蓋上一個模型,請問我該改哪裡讓他可以接著上一個訓練出的模型繼續訓練?
還有,我的.pth檔中為什麼只會出現last.pth,不會出現best.pth?
由於每次在啟動train.py時都會問是否要覆蓋上一個模型,請問我該改哪裡讓他可以接著上一個訓練出的模型繼續訓練?
目前我們的code沒有這個功能,可能要麻煩你自己implement! 如果要更改的話,建議可以更改load_model這個function
還有,我的.pth檔中為什麼只會出現last.pth,不會出現best.pth?
由於best.pth只有在mAP值大於歷史最好的mAP值時才會存,而存第一個best.pth的條件是mAP至少大於0時才會存,所以有可能是因為你訓練出的model得到的mAP值永遠都是0,導致連第一個都沒有存。不過理論上來說應該也要存這樣子的weight的,不論model的效能有多差,這部分算是小bug已經修改好了,感謝你!
不過最主要的問題應該還是你訓練的model表現不佳,再麻煩你確認一下
不好意思,我想請教在customdata的方面,我使用了自己的data下去跑,這次有best.pth了,但detect出來的東西依然都沒有框框,目前使用的配置都和教學中的相差無幾,但還是沒有結果,只有因為data的樣式長成以下這樣而改了UCASAOD_dataset.py data樣式: 429 938 828 439 931 521 533 1020 MED 0 dataset.py改成: import os import cv2 import numpy as np import torch import glob
from lib.general import xyxyxyxy2xywha from .base_dataset import BaseDataset
class UCASAODDataset(BaseDataset): def init(self, data_dir, class_names, hyp, augment, img_size, csl, normalized_labels=False): super().init(hyp, img_size, augment, csl, normalized_labels) self.img_files = sorted(glob.glob(os.path.join(data_dir, "*.png"))) self.label_files = [path.replace(".png", ".txt") for path in self.img_files] self.category = {} for i, name in enumerate(class_names): self.category[name.replace(" ", "-")] = i
def load_files(self, label_path):
lines = open(label_path, 'r').readlines()
x1, y1, x2, y2, x3, y3, x4, y4, labels = [], [], [], [], [], [], [], [], []
for line in lines:
line = line.split()
x1.append(float(line[0]))
y1.append(float(line[1]))
x2.append(float(line[2]))
y2.append(float(line[3]))
x3.append(float(line[4]))
y3.append(float(line[5]))
x4.append(float(line[6]))
y4.append(float(line[7]))
labels.append(self.category[line[8]])
if len(labels):
x1 = torch.tensor(x1)
y1 = torch.tensor(y1)
x2 = torch.tensor(x2)
y2 = torch.tensor(y2)
x3 = torch.tensor(x3)
y3 = torch.tensor(y3)
x4 = torch.tensor(x4)
y4 = torch.tensor(y4)
labels = torch.tensor(labels)
polys = torch.stack((x1, y1, x2, y2, x3, y3, x4, y4), -1).type(torch.float32)
else:
polys = torch.zeros((0, 8), dtype=torch.float32)
return polys, labels
在display_input.py中的結果看起來有點不太正常,會是這裡出問題了嗎? 還有,目前在範例中的--img_size使用的是608,這個大小是怎麼判定的呢? 希望可以得到您的聯繫方式以方便詢問更多的細節,拜託了!!
--img_size的大小純粹是看你的需求而定,唯一的規定是必須為32的倍數,這是因為FPN的stride分別為8, 16, 32 你可以貼上你display_input.py的結果嗎?並且更詳細的描述一下你是改變了哪些地方,謝謝!
只改了load_files中的這段,讓他符合我的input樣式:429 938 828 439 931 521 533 1020 MED 0 lines = open(label_path, 'r').readlines()
x1, y1, x2, y2, x3, y3, x4, y4, labels = [], [], [], [], [], [], [], [], []
for line in lines:
line = line.split()
x1.append(float(line[0]))
y1.append(float(line[1]))
x2.append(float(line[2]))
y2.append(float(line[3]))
x3.append(float(line[4]))
y3.append(float(line[5]))
x4.append(float(line[6]))
y4.append(float(line[7]))
labels.append(self.category[line[8]])
這是display_input的結果,他每次只會顯示一張程式就會卡在那要我ctrl+z終止才會結束,照片好像都混在一起了,而且還都怪怪的,想請問是我有哪裡做錯了嗎?
整個model中我唯一有修改的部分只有這裡,剩下的都是我自己input的data,有按readme教學中的擺放方法,資料型態就跟上述提到的一樣。
這是customdata的擺放方式class.names中只有MED這個類別。
感謝你的耐心回覆!!
你好 混再一起應該是因為有mosiac9 and mixup data augmentation的關係屬於正常的現象,如果要關掉的話可以去hyp.yaml 把mosaic, mixup 設成0,其他還有很多augmentation parameter也可以隨意調整
Eddie
你好,謝謝你的糾正,更改後確實沒有混再一起了
那請問這種框框不在物品上的情況我該對哪個parameter或者function下手呢?
你好,謝謝你的糾正,更改後確實沒有混再一起了
那請問這種框框不在物品上的情況我該對哪個parameter或者function下手呢?
請問一下你做了哪些改動呢? 看起來上面原本是對的上label的
我並沒有進行特別的更動,框選時是正確的,但display_input時就會產生偏移,相似的情況還有很多且佔了大多數,但還是有對的case,正確:錯誤大約3:7,但使用這樣的data,train出來的模型結果是什麼都沒有detect到 感謝你的耐心回覆!!
你的意思是你原圖片單純只做scale rotation translation data augmentation 有時候label準有時候不準嗎?還是你還有在原圖去做更動? 因為我剛才試了關掉mixup and mosaic並不會這樣
我並沒有進行特別的更動,框選時是正確的,但display_input時就會產生偏移,相似的情況還有很多且佔了大多數,但還是有對的case,正確:錯誤大約3:7,但使用這樣的data,train出來的模型結果是什麼都沒有detect到 感謝你的耐心回覆!!
也許是圖片尺寸大小在縮放的時候不一致,請確保圖片跟label的尺度是一樣的
我並沒有進行特別的更動,框選時是正確的,但display_input時就會產生偏移,相似的情況還有很多且佔了大多數,但還是有對的case,正確:錯誤大約3:7,但使用這樣的data,train出來的模型結果是什麼都沒有detect到 感謝你的耐心回覆!!
也許是圖片尺寸大小在縮放的時候不一致,請確保圖片跟label的尺度是一樣的
請問是要在哪確認呢?
你的意思是你原圖片單純只做scale rotation translation data augmentation 有時候label準有時候不準嗎?還是你還有在原圖去做更動? 因為我剛才試了關掉mixup and mosaic並不會這樣
我把所有的augmentation都設為0還是會有問題。我的data在匡時沒問題,但放入後display出來的inputs就會偏移
以上是display_inputs的一些結果,全部的陣列中第一和第二個都為0是正常的嗎?
你的意思是你原圖片單純只做scale rotation translation data augmentation 有時候label準有時候不準嗎?還是你還有在原圖去做更動? 因為我剛才試了關掉mixup and mosaic並不會這樣
我把所有的augmentation都設為0還是會有問題。我的data在匡時沒問題,但放入後display出來的inputs就會偏移
以上是display_inputs的一些結果,全部的陣列中第一和第二個都為0是正常的嗎?
第一列是batch_number, 第二列是object class, 取決於你的label有幾個class. 如果只有一個class那就是正常的。如果還是有bug的話,你可以試著create pull request我會盡量幫你看是哪裡出了問題。