컴퓨터 비전 작업 대회에 일반적으로 사용 가능한 프레임워크 구축
2020년 겨울
Qishen Ha
머신러닝 엔지니어
2023년부터 마켓에 출시되는 제품의 경우, 로고와 로고 위치 변경이 예정되어 있습니다. 이에 실제 제품은 사진 및 영상 속 이미지와 다를 수 있습니다.
Z by HP 데이터 사이언스 글로벌 앰배서더인 Qishen Ha의 콘텐츠는 HP 제품 지원을 통해 제작되었습니다.
안녕하세요, Qishen Ha입니다. 저는 현재 LINE Corp에서 머신러닝 엔지니어로 일하고 있으며, 전 세계 Kaggle 그랜드 마스터 랭킹 5위에 올랐습니다. 이미지 분류나 시멘틱 세그멘테이션, 개체 감지와 같은 컴퓨터 비전 문제를 중점적으로 다루고 있습니다.
Z by HP 데이터 사이언스 글로벌 앰배서더로 선정되어 무척 영광입니다. 이런 기회를 주시고 HP Z8 G4 워크스테이션과 ZBook Studio를 지원해 주신 Z by HP에 감사할 따름이에요. 덕분에 Kaggle 경진 대회에서 훨씬 더 나은 경쟁을 펼칠 수 있었습니다.
오늘은 제가 경진 대회, 특히 컴퓨터 비전 대회에서 사용했던 코드 프레임워크를 소개해 드리려고 해요.
모두와 공유하는 기록
지난 몇 년간 저는 기본 모델 또는 상위 솔루션의 최소 버전으로 훈련한 CNN 훈련 기록을 공개해 왔습니다. 이렇게 한 이유는 정규 버전이 코드 및 훈련 측면에서 너무 규모가 크기 때문이었어요.
이 기록을 보신 분이 있다면 다른 데이터를 사용하고 다른 작업을 위해 훈련한 경우에도 모두 같은 프레임워크를 사용했다는 점을 눈치채셨을 텐데, 이를 일반 프레임워크라고 합니다. 이러한 프레임워크를 사용하면 새로운 대회에 참가할 때 최대한 빠르게 새 기준 모델을 훈련할 수 있고, 이후 개선하거나 유지 관리하기도 아주 쉬워집니다.
이제 기록에 나와 있는 프레임워크를 간략히 설명하고 각 모듈을 소개하겠습니다. 제가 자주 사용해 온 프레임워크인데, 작업하기 무척 쉽습니다. 이미 편하게 사용하고 있는 프레임워크가 있다면 굳이 제 프레임워크를 따라 하실 필요는 없습니다. 그냥 영감을 얻는 용도로만 참고해 주세요.
프레임워크 소개
제 프레임워크의 토대인 일반 모듈은 다음과 같습니다.
- 데이터 세트
- 증강
- 모델
- 손실 함수
이제 하나씩 소개해 드리겠습니다.
데이터 세트는 데이터를 읽는 방법, 데이터를 사전 처리하는 방법, 레이블을 읽는 방법 및 처리하는 방법을 정의합니다. 이 그림은 데이터 세트의 가장 기본적인 코드 구조 중 하나를 보여 줍니다
간단한 이미지 분류 작업인데, cv2를 사용해서 이미지를 메모리로 읽은 후 증강을 거쳐 사전 처리한 다음 최종적으로 처리된 이미지와 레이블을 반환합니다.
무척 일반적인 코드 스타일이어서 약간만 수정하면 이미지 분할 작업에 응용할 수 있습니다. 다음 그림에는 가장 중요한 수정 사항이 나와 있습니다.
마지막으로, 마스크의 데이터 유형과 치수를 조정하고 row.label을 교체하여 반환합니다.
이렇게 하면 데이터 세트를 쉽게 수정하고, 원하는 데이터를 읽고, 필요한 대로 사전 처리할 수 있습니다.
데이터 세트에 사용하려는 증강 메서드를 포함하는 'transforms'라는 매개 변수가 있는데, 이 메서드는 증강 섹션에서 정의하겠습니다.
다음 그림을 통해 증강이 무엇인지 간단하게 확인할 수 있습니다. 훈련 시 좌우 및 크기 조정을 사용하며, 검증 시에는 크기 조정만 사용합니다.
증강
아래 그림과 같이 필요한 경우 증강 방법을 간단히 추가할 수 있습니다.
증강
여기에서는 훈련 과정에 무작위 회전과 블러를 추가했습니다.
이 하위 섹션에서는 모델의 구조를 정의해야 합니다. 가장 간단한 예로 이미지 분류 작업용 모델 구조를 참고해 보겠습니다.
이 그림에 나와 있는 대로 보통 이미지 분류 작업에서는 EfficientNet과 같은 ImageNet 사전 훈련 모델을 백본으로 삼고, 클래스 1,000개의 자체 선형 레이어(ImageNet 데이터 세트는 클래스 1,000개의 데이터 세트)를 삭제하고, n 클래스의 자체 선형 레이어를 추가합니다.
FC의 마지막 레이어 앞에 드롭아웃을 추가하고 싶다면 다음과 같이 간단히 작성할 수 있습니다.
또 다른 일반적인 시나리오는 입력 이미지가 RGB 3채널이 아니라 4채널 이상일 수 있다는 것입니다. 이 경우, 아래의 이미지처럼 백본의 첫 번째 합성곱 레이어의 입력을 원하는 대로 변경하면 됩니다.
여기서 n_ch는 입력으로 사용하는 채널 수입니다. 이렇게 작성하면 입력 채널의 수를 원하는 대로 변경할 수 있고, 첫 번째 합성곱 레이어에 ImageNet의 사전 훈련된 가중치를 계속 사용할 수 있습니다.
손실 함수를 정의하는 가장 쉽고, 제일 일반적인 방법은 다음과 같습니다.
그러나 다음과 같이 복잡한 구조로 변경하기도 아주 간단합니다.
이 손실 함수에서는 처음 4개의 출력에 교차 엔트로피 손실을 적용하고, 나머지 출력에는 BCE 손실을 적용하며, 두 손실의 균형을 맞추려 손실 가중치를 추가합니다. 논리는 복잡해지지만, 코드를 많이 변경할 필요가 없어집니다. 이 손실을 활용하여 RANZCR 대회에서 우승을 차지했습니다.
결론
지금까지 제 프레임워크의 4가지 기본 모듈을 살펴보았습니다. 모두 확장하기가 정말 쉽도록 설계되었고, 이 4가지가 합쳐져 제가 사용하는 프레임워크를 형성합니다. 이 프레임워크를 실험에 사용할 때는 매번 과정을 공책에 기록하는데, 이렇게 하면 결과를 분석하고 재현하는 데 유용합니다.
제 Kaggle 홈페이지에서 공유한 기록을 통해 자세한 내용을 확인해 보세요. 여기에서 한층 유용한 정보를 찾으실 수 있습니다.
질문이 있으신가요?
세일즈 서포트에 문의하세요.
소셜 미디어에서 Z by HP 팔로우
제품 선택에 도움이 필요하신가요?
제품에 대한 지원이 필요하신가요?
고지 사항
제품은 표시된 이미지와 다를 수 있습니다.
제품 이미지는 단지 설명을 위한 것으로 나라별로 제품 가용성과 색상이 다를 수 있습니다.
본 문서에 포함된 정보는 예고 없이 변경될 수 있습니다. HP 제품 및 서비스에 대한 유일한 보증 사항은 해당 제품 및 서비스와 함께 제공되는 보증서에 명시되어 있습니다. 여기에 설명된 내용 중 어느 것도 추가적인 보증을 제공하지 않습니다. HP는 여기에 포함된 기술적, 편집상 오류나 누락에 대해 책임을 지지 않습니다.