[Darkflow] 두달간 사용하며 알게된 것들

주관적인 글입니다. 이것이 학계의 정설은 아니며 피드백 환영합니다^ㅇ^
아직 모델개발에 성공하지 못했기 때문에 과정중에 느낀 것들이고 틀릴 수 있습니다!
질문에 답변해주신분들(이 모님, 신 모님), 정보를 제공해준 블로그(운영자님)들 모두 고맙습니다🙏

0. 서론

인턴을 하며 딥러닝 공부를 시작했고, 모델 개발을 위해 darkflow를 이용해서 데이터수집->전처리->학습->조금바꿔서학습->데이터수집->... 의 과정을 반복했습니다.
소소하게 개인적으로 개발일지만 작성하고 있었는데, 한 분기가 끝났고 10월이 된 기념으로 지난 몇 주간 모델개발을 하며 느낀 점(이라 쓰고 의식의 흐름이라고 읽는다.)을 기록하려고 합니다.

1. Label (class) 

자세의 라벨을 정할 때 나노단위로(방향따라) 나누는 것은 의미가 없다고 느낍니다.

(예. sleep_front, sleep_head, sleep_side)
어차피 잠(sleep)이라는 것은 동일하기 때문입니다. 대신 데이터셋은 충분히 많아야 합니다. (몇장..?) Yolo 기본 모델을 돌려보면 '사람, 동물, 차'를 방향과 관계없이 똑같은 '사람, 동물, 차'로 인식하는 것을 알 수 있습니다. 따라서 자는 데이터는 모두 sleep으로 라벨링 했습니다.

2. 전처리 순서

1. 조건에 맞지 않는 사진 지우기 (솎아내기)

데이터의 질이 중요하다고 생각한다 - 정확도&화질

2. 데이터 이름 일괄적으로 변경하기 (예. a1, a2, a3, ...)

꼭 할 필요는 없지만, 정리할 때 더 편한 느낌

3. 라벨링 궈궈 

Yolo_mark(txt), labelImg(xml) 등 이용

4. annotation 형식에 맞추기 

convert_txt_2_xml를 이용해서 txt로 라벨링한 것들만 xml로 바꿔주었다. (darkflow는 annotation으로 xml을 사용하기 때문) 


3. 데이터 수집에 대하여

1) 데이터를 확보할 수 있는 창구 필요

데이터를 확보할 수 있는 방법을 많이 생각해 봐야할 것 같다. 크롤링, 지인찬스, 구매 등

2) 데이터 수량이 정말 중요할까?

학습이 잘 되지 않자, 모든 것에 의심을 하기 시작했다. 알고보니 데이터의 수가 부족한게 아니라 내 Labeling에 문제가 있는 건 아닐까?! 이것에 대한 정답은 모르겠지만 (여전히 학습이 잘 안되기 때문^^!) 확실한건 데이터의 양은 다다익선
ㅠㅠ

4. 꿀팁

1) 문제가 생겼을 땐 Darkflow 깃헙의 Issues를 봐라.

특히 closed된 것은 해결된 것! 따봉 많이 받은 답변을 우선적으로~!

2) learning rate

초반엔 크게, 어느정도 내려오면 작게 설정하기. (시간단축)
--lr 0.0001 learning rate를 0.0001로 설정한다는 뜻.
cf) 1e-03 = 1*(10^(-3)) = 0.001

3) Darkflow는 weights파일대신 meta파일 사용!

test할 때! 아마도 이게 학습된 모델 학습시 --backup <폴더명>에 지정한 폴더에 생긴답니다. (디폴트: ckpt폴더)
--load -1 하면 제일 최근 학습된 모델 불러오기.
--load <체크포인트번호> 하면 <체크포인트>모델 불러오기.

4) Checkpoint 설정

\darkflow\darkflow\net\flow.py 70번째 줄에서 괄호부분을 바꿔준다.
ckpt = (i+1) % (self.FLAGS.save // self.FLAGS.batch) <- 이 괄호부분!
ckpt = (i+1) % 10 step10마다 저장한다는 뜻

5) threshold 설정

--threshold 0.3 30% 정확도로 박스를 친다는 뜻

6) Tensorboard

학습 커맨드에 --summary /<저장경로> 를 추가해준다.
그러면 <저장경로>/train 안에 events가 저장이 된다.
train폴더에서 cmd를 띄운 뒤
>tensorboard --logdir=./
를 입력해주고, 그 밑에 뜨는 링크로 접속하면 확인할 수 있다.

모든 존재하는 TensorBoard를 Kill하려면
>pkill -f "tensorboard"

댓글

  1. 와! 좋은정보 감사합니다

    답글삭제
  2. 좋은글 감사합니다 하나만 여쭤볼게요..ㅎㅎ초보라서..
    현재 학습 시키는중인데 ckpt 폴더에 너무 많이 저장되서 총 데이터가 300기가가 넘게 됐네요ㅠㅠ
    학습이 더 필요한데 앞에 있는 체크포인트 파일들 삭제하고 가장 최근꺼만 남기고 이어서 돌려도 되나요???

    답글삭제
    답글
    1. 네! 중간꺼는 날리셔도됩니다

      삭제
    2. 앗 너무 늦게 봤네용 ㅜㅜ 댓글 감사합니다!

      Darkflow에서 기본적으로 가장 최근 체크포인트파일부터 이어서 학습되게 돼있습니다. 중간파일을 쓰시지 않는다면 삭제하셔도 괜찮습니다.

      그런데 어느정도 학습이 된 상태라면 (loss값이 10 이내..?) 4-3번과 같이 중간 체크포인트도 몇 개는 한 번 테스트해보시고 지우셔도 좋을 것 같아요! 저는 오히려 중간 체크포인트파일중에서 잘되는 것도 있더라고요~~

      삭제
    3. Unknown님 대신 답변달아주셔서 감사합니다 ㅎㅎ!

      삭제

댓글 쓰기

이 블로그의 인기 게시물

[MFC] LNK2001 외부 기호를 확인할 수 없습니다.

[CG] 파일입출력 오류 / 해결