0525 CV2 Image Crop

이나겸·2022년 5월 25일
0
post-thumbnail

1. 학습내용

데이터셋

기본 데이터셋의 뼈대가 된다.

class MyCustomDatasetImage(Dataset):
    def __init__(self, path): # 파라미터 값은 달라질 수 있다.
        # 정의
        pass

    def __getitem__(self, index):
        # 정의 작성된 내용을 구현
        pass

    def __len__(self):
        # 전체 길이를 반환 -> 리스트 [] len()
        pass

path를 여기서 여러개로 접근이 가능했다.

def __init__(self, path): # 파라미터 값은 달라질 수 있다.
    # 정의
    # ./Grapevine_leaves_Image_Dataset/*/*.png
    self.all_data = sorted(glob.glob(os.path.join(path, '*', '*.png')))

glob이 for문 처럼 생각하면된다.
폴더 > 폴더로 들어가는 것을 반복문으로 들어간다 생각하는 것처럼 glob을 쓸 수 있다.
shuffle은 섞겠냐고 묻는 것이다.
test에서는 섞지 않는다.

batch_size : 전체 이미지에서 몇장 빼서 넣을거냐.
32를 했을때 32장씩 밀어넣는다는 것.
1을 했을 때는 한장씩 넣는다는 것이다.

Mac과 Windows에서 파일경로가 나오는 부분이 좀 다르다.
그래서 split을 할 때 windows는 '\'로 split을 진행했고 mac은 '/'로 split이 진행되었다.

라벨링

라벨링 툴에서 많이 사용하는 기능

  • Bounding Box - 라벨링 작업에서 가장 많이 하는 작업,
    자동차의 경우 전부 다 포함되게 박스에 쳐야한다.
  • polygon - 포토샵의 누끼따는 것과 똑같다. 영역에 대한 좌표값이 x,y가 생기는데 그 좌표값으로 이미지만 떼어내거나 붙여넣을 수 있게된다.
  • polyline - 많이 사용되는 것이 자율주행에서 인도와 차선을 구분할 때 많이 사용된다. (라인을 긋는다)
    가운데 좌표점을 찾아서 직진을 하게, 커브를 돌게 할 수 있다.
  • point - 특정 지점을 라벨링 하는 것으로 안면 인식을 통한 감정 분석 사용, 뷰티쪽에서 많이 사용된다.
    눈썹을 찍어서 제거하고 사람에 어울리는 눈썹을 넣는다던가,
    뼈와 뼈 사이를 포인트로 찍어서 각도가 얼마나 틀어져있나? 등.. 그렇게 하려면 3D로 써야한다. 2D는 한계가 있다.

어노테이션 라벨링 양식

  • json 형식으로 되어있다. (yolo는 text 형식으로 되어있다)
    text, json 형식을 읽는걸 잘 해야한다.
  • images에 id가 1인데 annotations에 images_id가 1인게 두개가 있다.
    같은 박스가 두개라는 뜻이다.
  • category_id가 두개 똑같다는 것은 동일한 개체라는 것이다.
    bbox 구성 정의를 확인해봐야한다!

2. 중요내용

dataset을 만들고나서 dataloader에 집어넣어야한다.

dataset: Dataset[T_co]
batch_size: Optional[int]
num_workers: int
pin_memory: bool
drop_last: bool
timeout: float
sampler: Sampler
prefetch_factor: int
_iterator : Optional['_BaseDataLoaderIter']
__initialized = False

3. 학습소감

cv2를 사용해서 bbox를 이용해서 이미지를 크롭하는 게 생각보다 어렵게 느껴진다.
연습을 해야겠다.

0개의 댓글