본문 바로가기

AI

YOLO 학습에 대한 잡다한 지식(기본, 배경 지식)

1. windows 버전 darknet이 darknet_no_gpu.sln 버전과 darknet.sln으로 나뉜 이유.

 

YOLO는 joseph redmon이라는 사람이 만들어 냈다. github나 트위터 등에서는 pjreddie라는 닉네임으로 활동하고 있다.

YOLO는 처음 제작되었을 때 Linux 전용으로 코딩되어 있었다. 따라서 darknet 실행 시 옵션으로 gpu를 사용할지 말 지 지정할 수가 있었다.

 

그러나 AlexeyAB라는 사용자가 darknet을 windows 버전에서 사용 할 수 있도록 수정했고, 이 과정에서 visual studio로 컴파일되도록 하였다. 이때 코드를 분리하면서 GPU를 사용하는 버전과 GPU를 사용하지 않는 버전을 따로 제작해야 할 필요가 있었고, 이로 인해 darknet.sln과 darknet_no_gpu.sln으로 나누어지게 되었다.

 

https://github.com/AlexeyAB/darknet

 

2. YOLO 학습 시 기존에 진행했던 학습에서부터 이어서 학습하는 것이 가능한가?

 

가능하기도 불가능 하기도 하다.

가능한 경우는 중간에 끊은 경우, 그대로 이어서 학습하고자 할 때 가능하다.

그러나 새로운 이미지를 추가하고, 설정을 바꾸는 등 여러가지 사항에 대하여 추가 학습이 필요 할 때는 안 된다.

 

결국 새로운 이미지 등을 '추가'적으로 학습시키고 싶으면, '추가된 이미지'와 '기존의 이미지'에 대하여 다시 처음부터 학습을 돌리는 수 밖에 없다. ( 말 그대로 '이어서' 학습은 가능하나, '붙여서' 학습하기가 안 된다. )

 

다음은 AlexyAB가 제공하는 이어서 학습하기 방법이다. https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

 

< 해당 내용 중 일부 >

 

< 40,000번대 부터 이어서 학습을 하는 것을 알 수 있다. >

 

3. YOLO는 색깔 인식이 가능한가?

YOLO는 물체를 색상으로 인식이 가능하다. 따라서 사람이라는 클래스에서 경찰복을 입은 사람과 그렇지 않은 사람. 즉 경찰관과 민간인 이라는 클래스로 분류가 가능하다. 사람이 입고 있는 옷에 따른 색깔을 인식하여, 일반 옷과는 다른 경찰복을 인식할 수 있기 때문이다.

 

색깔을 인식하기 위해서는 .cfg 파일에서 hue=.1로 설정을 해줘야 한다. ( 대부분 기본적으로 설정이 되어 있다. )

 

 

 

 

4. weights파일의 크기가 같은 이유? ( 공부 필요, 아직 정확하지 않음 )

딥러닝은 손실 기능을 최소화 하기 위해서 특정 값으로 시작하여 이상적인 최소값이 발견 될 때 까지 값을 지속적으로 개선한다.

이 때의 매개변수를 값을 늘리거나 줄이기 때문에 weights(가중치) 라고 한다.

 

(뇌피셜) 그렇기 때문에 최대값이 정해져 있고, 그 안에서 최소값을 찾기 때문에 파일의 크기가 항상 일정한게 아닌가 싶다. 예를 들면 1byte 크기의 weights 파일이라고 하면, 0 ~ 255 숫자 안에서 최적의 값을 찾는 것이니, 1차 학습 때 58(0x3A), 2차 학습 때 141(0x8D) 이런식으로 최소값이 나오더라도 결국 1byte 이기 때문에 weights파일이 항상 같은게 아닌가 라는 생각이 든다.

 

다만 12,000장의 이미지를 사용해서 학습시켰을 때랑, 140,000장의 이미지를 사용해서 학습시켰을 때랑 파일의 크기가 차이 나는데, 기본적인 input값에 따른 기본 용량이 정해져 있고, input값이 많아져서 그 만큼 많은 weights가 생성되었기 때문에 발생한 차이라고 생각한다. 

 

 

< (12,000장) 10,000번대 weights 파일 크기 >

 

< (140,000장) 500,000번대 weights 파일 크기 >