ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    import argparse
    import os
    import numpy as np
    import json
    from torch.utils.data import Dataset
    import pickle
    from tqdm import tqdm
    import shutil
    import copy
    import random
     
    if __name__ == '__main__':
        
        
     
        data_path = './dataset/ag/train' # 이미지가 있는 폴더
        data_out_path = './dataset/ran1'  # 이미지 복사할 폴더
     
     
        # load file list
        data = 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# 랜덤 사이즈 9500 
     
        print(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
Designed by Tistory.