-
yolov5 train custom data인공지능/yolov5 (crack detection) 2021. 11. 3. 15:21
crack detection에 대한 과제로 defectnet에 대한 논문을 봤지만 데이터셋도 비공개이고 github에 있는 코드도 잘 안돌아가서(?) yolov5로 crack detection 하는 걸로 정해졌다.
yolov5 train custom data
dataset은 Kaggle에 있는 concreteCrackSegmentationDataset + crack_segmentation_dataset 으로 했다.
공개 dataset의 양이 적어 augmentation data를 추가하기로 했다.
기존의 dataset(Kaggle data)에 이미지블렌딩을 해서 dataset의 양을 키웠다. (20만장정도 dataset에 추가했다.)
image augmentation train 진행
1. Train : Ag Data(20만장) + Real Data (7000장)
Test : Real Data (4000장)2. Train : Ag Data(9000장) + Real Data (7000장)
Test : Real Data (4000장)3. Train : Real Data (7000장)
Test : Real Data (4000장)(ag data= augmentation image data / Real data = kaggle data)
1번은 생성한 augmentation data 모두 train
2번은 augmentation data 와 real data => 1대1
3번은 real data로만
예상하길 2번의 mAP가 가장 좋게 나올줄 알았는데 3번의 mAP가 가장 좋았다.
2번째 방법 mAP 3번째 방법 mAP augmentation data의 효과를 보기 위해 2번의 방법에서 train의 real data의 수를 극단적으로 줄여보고
test의 real data를 키우도록 하는 방법으로 다시 train을 돌려보겠다.
추가로 augmentation data에서 9000장을 선택하는 code
12345678910111213141516171819202122232425262728293031323334353637383940414243444546import argparseimport osimport numpy as npimport jsonfrom torch.utils.data import Datasetimport picklefrom tqdm import tqdmimport shutilimport copyimport randomif __name__ == '__main__':data_path = './dataset/ag/train' # 이미지가 있는 폴더data_out_path = './dataset/ran1' # 이미지 복사할 폴더# load file listdata = os.listdir(data_path)data_img = []for i in data:if(i.split(".")[1] == "jpg"): # jpg이미지들만data_img.append(i)choiceList = random.sample(data_img,9500) # 랜덤 사이즈 9500print(choiceList)for i in tqdm(choiceList):data_label = i.split(".")[0] + ".txt" # 이미지 라벨shutil.copy2(data_path + '/' + i, data_out_path + '/' + i) #이미지 복사shutil.copy2(data_path + '/' + data_label, data_out_path + '/' + data_label) #이미지라벨복사print("Done")cs