벌써 Yolo에 관한 5번째 포스팅이네요.
이번엔 저희 프로젝트 주제인 가려짐에 강인한 Yolo를 구현하기 위해 가려진 물체가 존재하는 Dataset을 찾아서 적용하였습니다.
적용할 Dataset은 CrowdHuman Dataset이고, 아래 링크를 참고 해주세요
또 Annotation이 어떤 형식인지 찾아봐야했습니다.
Annotation은 Yolo는 txt형태인걸 지금까지 해왔으니 알 수 있고, 새로운 데이터의 annotation은 odgt파일 인것을 확인할 수 있습니다.
odgt파일을 txt형태로 변경해주는 code를 찾았고 그걸 적용했습니다. (감사합니다)
https://github.com/yaluruns/CrowdHuman2YOLOformat
코드를 먼저 수정할 부분은 수정하였습니다. 45번째 line이 원본 코드인데 이 부분에선 현재 디렉토리에서 image폴더/.. 등등 사전에 작성한 분의 경로로 되어 있기 때문에 유사하게 저의 경로에 맞도록 변경하였습니다.
그러면 기존에 odgt파일이 txt로 변경되는 것을 확인할 수 있습니다.
이렇게 Train과 Validation set을 모두 준비하여 학습 Dataset을 마련합니다. 구조는 Yolo와 동일한 구조로,
├── Crowdhuman
└── images
└── train
val
└── labels
└── train
val
위와 같이 꾸렸습니다.
학습을 위해선 yaml파일의 생성도 필요하고, 사용되는 class는 총 2개임을 인지한채로 생성을 시작합니다. coco.yaml의 구성을 참고해 train과 val경로를 정하였구요.
이게 끝입니다. 간단하죠?
그럼 yaml파일 생성도 다했고, Data도 준비가 다 되었으니 시험삼아 학습을 진행해보도록 합시다.
제가 적용한 Augmentation은 기존에 구현해봤던 Gridmask를 사용하고, Cutout은 사용하지 않는 방향으로 학습을 진행할 것입니다. Batch size는 몰랐는데 -1을 입력시 가장 최적화된 batch size를 적용해준다고 합니다. 그래서 이번엔 batchsize를 계산에 맡겼습니다.
python train.py --batch-size -1 --img 640 --epochs 1 --data crowdhuman.yaml --weights '' --cfg yolov5n.yaml --device 0
그랬더니 batchsize를 105로 잡아주더라구요. 기존에 한게 16인가 32인가 그런데 이게 과연 좋은 건지는 어느게 더 괜찮은지는 맞춰놓고 해봐야할 것 같습니다.
그래서 1번 돌려본 결과 중간에 Warning이 발생하는 것도 확인했고
yolov5_project\datasets\crowdhuman\images\train\273275,1104c1000d6cced60.jpg: ignoring corrupt image/label: negative label values [ -0.00625 -0.01875]
이런 것같이 label좌표가 음수인 부분이 있는데 여기서 이 부분을 어떻게 처리하는지 그 부분을 다음번에 한번 생각해봐야할 것 같습니다. -라함은 이미지를 넘는다는 얘기같은데 그럼 전부 0으로 처리해주는지? 가 제 생각입니다. 그래서 1에폭에 약 8분이라는 시간이 걸리고 잘 돌아갔는지 확인해본 결과?
잘 들어간 것을 확인할 수 있습니다! (label도 그렇고 gridmask도 그렇고)
성공적으로 Crowdhuman dataset으로 학습 시험을 마쳤으니 실제로 100Epoch정도를 돌려서 진행을 해보고, Cutout으로도 같은 과정을 해서 결과를 비교해보도록 하겠습니다.
아마 그 글이 Yolo에 대한 마지막 글이 될 것 같네요.