소프트웨어 [후원] 다크넷 딥러닝으로 데이타셋을 학습시키는 프로그램. (Darknet)
페이지 정보
본문
※ 후원은 만원(10,000)부터^^a
안녕하세요. 엔지엠소프트웨어입니다. 근래에 갑자기 딥러닝을 요청하시는 분들이 많아졌습니다. 홈페이지에 딥러닝 환경을 구축할 수 있는 메뉴얼이 있지만, 개발을 안해본 일반 사용자분들은 환경을 구성하는게 어려울겁니다. 개발자도 C++을 안해본 상태에서 컴파일하기란 쉽지 않은 일이죠^^; 아무튼, 어떤 이유인지는 모르겠지만~ 딥러닝으로 캐릭터나 몬스터를 학습시켜 달라는 요구가 많은데요. 혼자서 모두 처리해드릴 수 없기도 하고, 한번 컴파일 해두면 두고두고 사용할 수 있기 때문에 가능하면 직접 하시는걸 권해드리고 있습니다. 아래와 같은걸 할 수 있어요!
- 딥러닝 모델 제작 의뢰: 50,000원
- 의뢰 문의: https://open.kakao.com/o/s5NJbpke
딥러닝을 사용하면 룬 풀기도 가능합니다.
개발자가 아닌 일반인도 쉽게 사용할 수 있도록 메뉴얼이 준비되어 있습니다. 참고로, CUDA와 cuDNN은 11.0 버전으로 설치해야 합니다. 또한, 윈도우의 환경 변수에 사용자 변수를 추가하고, CUDA와 OpenCV도 설정해줘야 합니다.
[ 학습 이미지 만들기 ] [ 딥러닝 학습 하기 ]
OpenCV도 같이 설정해주세요.
대부분 다크넷 컴파일을 어려워 하시더라구요. 쿠다쪽에서 많이 문제가 발생하는데요. 대부분은 버전과 시스템 설정에서 미스가 나는 경우입니다. 일반적인 매크로 프로그램들보다 한단계 더 수준 높은 매크로를 만들려면 딥러닝은 좋은 선택이 될겁니다. 현재 딥러닝을 활용할 수 있는 매크로는 없거든요~ 아래 계좌로 후원 후 [ 후원 게시판 ]에 글을 남겨주시면 파일을 보내드립니다^^
다크넷 딥러닝을 학습하려면 yolo_mark로 만든 데이타셋이 필요합니다. 이 데이타셋으로 학습할 수 있습니다. 관리자로부터 받은 압축 파일을 해제하면 아래와 같이 폴더에 파일들이 존재합니다. 뭔가 복잡하게 파일들이 많아서 어떻게 사용해야 하는지 잘 감이 오지 않을겁니다.
yolo-obj.cfg (학습에 필요한 속성 콘피그 파일)
이 파일은 데이타셋을 학습할 때 필요한 여러가지 속성들을 설정할 수 있습니다. 좋은 품질의 학습 데이타를 얻으려면 몇가지 수정해야 합니다.
- batch: 기본 값은 64로 특별히 변경하지 않아도 됩니다. 이 값은 한 사이클에 몇장을 처리할지 정하는 값입니다.
- subdivisions: batch를 이 값만큼 나누어서 처리합니다. 기본값은 8이지만 Out of memory 에러가 날 경우 16 또는 32, 64로 조절하여 시도해야 합니다.
- height, width: 입력되는 이미지의 크기입니다. 이미지의 크기가 클수록 정확도가 높아지지만 성능은 하락합니다.
- angle: HARR 또는 Tensorflow Inception과 동일하게 입력되는 데이터로부터 다양한 학습을 위한 설정값입니다. 보통은 0으로 두지만, 기울기에 따라 15~90도까지 가능합니다.
- saturation: 이미지의 채도를 조절할 때 설정하는 값입니다.
- exposure: 이미지의 노출을 조절할 때 설정하는 값입니다.
- hue: 이미지의 색조를 조절할 때 사용하는 값입니다.
- learning_rate: 기본 값은 0.001입니다. multi-gpu 사용시 0.001 / gpu수만큼 조절해서 사용할 수 있습니다.
- burn_in: 기본 값은 1000입니다. multi-gpu 사용시 Iteration이 지날 때 마다 학습률을 조정할 것인지 설정합니다. gpu 수 * 1000으로 설정합니다.
- max_batches: Iteration(반복) 횟수를 설정할 수 있습니다. 일반적으로 Class 수 * 2,000입니다. 더 복잡한 작업이라면 3,000 또는 4,000을 곱합니다. 추가로 200을 더해줍니다. 클래스가 3이라면 3*2,000+200=6,200입니다. 200은 전후로 알맞은 가중치를 얻기 위한 값입니다.
- steps: 100, 500, 1000과 같이 입력합니다. 500, 1000을 입력해도 됩니다. 입력한 스텝까지 배치 후 학습 속도를 조정합니다.
- scales: 0.1, 0.2, 0.3과 같이 입력합니다. 이 값은 steps에 입력한 값에 대응합니다. steps 100 후에 LR에 0.1을 곱한 다음 500 후에 다시 0.2를 곱합니다. 1000에서 0.3을 곱합니다.
이외에도 학습과 관련된 옵션들이 많습니다. 다른 옵션들은 특별하게 조정할 필요가 없거나 기본 값을 사용하여 학습하는걸 추천드립니다. 이 옵션들에 대해 더 자세히 알고 싶다면 아래 링크에서 도움을 받을 수 있습니다.
https://pjreddie.com/darknet/yolo/
공통적으로 수정해야 하는 부분은 2가지입니다.
classes와 filters입니다. 메모장에서 Ctrl+F를 눌러서 classes와 filters를 모두 수정하세요.
classes: 감지 또는 검출할 이미지의 수입니다. 이 예제에서는 air, bird, person으로 3개입니다.
filters: 5*(클래스 수+5) 입니다. 이 예제에서는 40입니다.
obj.names 파일 설정
클래스의 이름입니다. 이 예제에서는 air, bird, person 3개이며, 아래 그림과 같이 한줄에 하나씩 입력해야 합니다.
obj.data 파일 설정
아래 이미지를 보면 크게 어려운 부분은 없습니다. train과 valid가 동일하게 설정되어 있는데요. 이 부분을 분리하여 처리가 가능합니다. valid image(유효한 이미지)를 별도로 목록화하여 valid = data/valid.txt로 만든 후 수정하여 사용하면 됩니다. 그리고, 마지막 backup은 학습을 반복하면서 weight가 저장되는 폴더 위치를 말합니다.
트레이닝을 위해 이미지넷에서 프리트레이닝(미리 훈련된)된 컨볼루션 웨이트와 다크넷의 darknet53 모델의 가중치를 사용합니다. 아래 링크에서 컨볼루션 레이어의 가중치를 다운로드 할 수 있습니다.
https://pjreddie.com/darknet/yolo/
※ 컨볼루션(합성곱): 트레이닝 함수를 반전시키고 이동시켜 값을 곱해 구간에 대해 적분하는 공식
대략 용량이 150메가쯤 합니다. 이 파일을 다운로드 받은 후 다크넷 프로젝트의 build/x64 폴더에 복사합니다.
yolo mark 프로젝트의 data폴더안의 모든 파일을 다크넷의 data폴더에 복사합니다. 그리고, yolo mark의 yolo-obj.cfg파일은 data밖(x64)에 저장하세요.
Windows Command를 관리자 권한으로 실행한 후 다크넷의 x64디렉토리로 이동합니다.
아래 명령으로 트레이닝을 실행시킵니다.
darknet detector train data/obj.data data/yolo-obj.cfg darknet53.conv.74
학습이 완료되면 아래와 같이 backup 폴더에 가중치 파일이 생성된걸 확인할 수 있습니다.
Windows Command에서 아래 명령으로 간단하게 테스트 해볼 수 있습니다.
darknet detector test data/obj.data yolo-obj.cfg backup/yolo-obj_2000.weights air.png
이미지 몇장으로 테스트한거라서 그런지... 정확도는 높지 않네요. 보통 최소 300에서 30,000장을 학습시켜야 괜찮은 결과를 얻을 수 있다고 합니다. 물론, 전처리도 중요하죠. 생각해보면 수백에서 수만장의 사진을 수작업으로 train과 valid 이미지를 만든다는건~ 많은 노력과 시간이 들어가는 작업인걸 알 수 있습니다. 이 내용을 토대로 원하는 결과를 얻을 수 있었으면 좋겠네요.
딥러닝 학습에 대한 자세한 내용은 아래 글을 참고하세요.
[ 다크넷 욜로 학습하기 ]
개발자에게 후원하기
추천, 구독, 홍보 꼭~ 부탁드립니다.
여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~
감사합니다~
- 이전글[후원] 다크넷 딥러닝으로 이미지 데이타셋을 만드는 프로그램. (Yolo Mark) 21.01.23
- 다음글하루만에 구글에서 광고 수익으로 12만원 넣어 줬습니다. 정말 서프라이즈하네요ㅠㅠ; 21.01.22