안녕하세요? 제가 지금 버그를 고치고 있는데 어떤 버그인지 말씀드리기 앞서 간단하게 현재 상황을 설명하겠습니다.
저는 딥러닝으로 화면내에 특정 물체가 있는지 감지하고, 특정 물체가 있으면 저에게 노티를 주는 작업을 하고 있습니다. 노트북 몇대로 하고 있는데 노트북은 그래픽 성능이 부족해서 3초 주기로 화면을 캡쳐해서 그 이미지를 중앙의 데탑 한대로 보내고, 데탑에서 물체 감지를 한 후 결과값만 노트북으로 보내고 있습니다.
노트북은 여러대이고 데탑은 한대이다 보니 데탑에서 쓰레드를 생성하고 쓰레드 하나 당 노트북 하나를 담당하게 해두었는데요, 물체를 인식할 경우 정확도 0.9를 넘으면 인식한 것으로 치고 있습니다. 대게의 경우 0.9999~0.95 사이에서 인식이 되고 있고, 당연하지만 1을 넘을 수 없는데요
가끔 버그로 4.7 15.5 이런 식의 정확도가 나옵니다. 그럴 땐 당연하지만 제가 눈으로 확인을 하게 되는데 해당 물체는 화면에 없고 그저 버그입니다. 이 버그는 한대의 노트북만 데탑에 연결되었을 때는 나타나지 않고, 두대 이상일 때, 댓수가 많아질 수록 더 자주 일어납니다. 또, 어느 한 노트북에서 해당 물체가 나타났을때 다른 노트북들에서도 그 물체가 있는 것처럼 처리되는 경우도 잦습니다.
이러한 증상만 놓고 보면 마땅히 여러 쓰레드들 간에 변수값이나 메모리 공간을 같이 쓰는 종류의 버그인거 같아서 혹시 변수 공유하는게 있는지 근 며칠간 철저히 검증했습니다만 그런건 없었습니다. 딥러닝 관련 버그인지, 쓰레드 버그인지 모르겠고 원인도 모르겠습니다.
저보다 파이썬 잘 하는 분들의 도움을 받고 싶어서 크몽, 오투잡 등등에 검색해서 몇몇 제작자들에게 연락해봤지만 하나같이 자기는 할 수 없다고 하더군요. 일단 같은 질문을 2cpu 딥러닝 게시판에 딥러닝 관련으로 쓸거긴 한데..
아무리 매달려도 저 혼자서는 해결할 수 없는 버그일꺼 같아서 가급적 비용을 지불하고 제대로 된 개발자에게 버그 수정을 받고 싶은데요 오투잡과 크몽 외에 다른 루트 뭐 없겠습니까? stackoverflow에는 여러차례 질문을 수정해가며 올려봤지만.. 단 한번도 답변을 받지 못했습니다.
파이썬은 무궁무진한 신세계인것 밖에 모르지만, 추측하건데 값이 이상하게 나올때 ROI크기가 다를것으로 추정합니다.
다만 제가 학습 문제가 아니고, 쓰레드나 서버 쪽 문제일거라고 생각한 이유는 1. 한번 버그가 나타나면 접속한 모든 쓰레드에서 동시에 버그가 나타나는 경우가 자주 있고 2. 어느 한 쓰레드에서 실제로 물체가 인식되었을 때 다른 쓰레드들에도 버그가 나타나는 등
쓰레드간의 연관성이 보이기 때문이었습니다.
지금 학습이 잘못되었다고 하셨는데.. 단순히 데이터셋이 부족한 문제라면야 더 모아서 학습시키면 되겠습니다만 학습 불량이라는 말씀은 아마 학습 시키는 과정 자체에 뭔가 셋팅이나, 설정값 등등에 문제가 있다는 말씀이실 것으로 생각됩니다. 만약 그렇다면.. 저는 지금까지 구글링, 유튜브 영상 등으로 배워왔는데 뭐가 문제인지 어디서부터 어떻게 검색해야 할지 감이 잘 안 옵니다. 학습은 파이썬과 무관하게 구글 코랩에서 리눅스 명령어로 해주고 있는데
제 학습 과정을 한번 개인적으로 검토해주시거나,아니면 이 학습 불량 문제를 해결하기 위한 방법을 조언해주시면 더 감사하겠습니다.
위에서 적은대로 신세계라는것 밖에요... 많이 책도 사고,,, 책 하나에서 하나의 배움이라도 건지기를 바라면서 배워야 하는데,
귀챠니즘이 승리중이라, 제가 미숙하여 도움이 되지 못할듯 합니다.
감사합니다.
어느 시점부터 계속해서 발생하는 이슈라면 메모리 환원관련 포인트를 찾아보는게 좋을듯 합니다.
문득 pilsuni님이 ROI크기가 다를걸 아셨다는게 왠지 이 버그 원인이 뭔지 알고 계시기 때문일거라고 생각이 들었습니다
원인이 뭔지 알고 계실거 같은데 힌트좀 부탁드립니다 조사해서 고치고 싶습니다
1 이상의 값이 나오는 경우가 하나의 ROI에 여러개의 개체가 발견되었을때 나오는 값으로 알고 있습니다. 사람의 경우는 1 이상이 없다고 생각하겠지만, 기계의 경우는 여러개가 나오면 다 합산할 수 있으니까요...
(이런 이유로 학습이 제대로 안된 케이스 일지도 모르겠다는 글을 적었습니다.)
하지만, 특정 시점에서 증상이 나온다는 글을 보고(난독이라,,, 댓글에서 확인함 ㅡㅡ;;) 학습보다는 메모리 관리라고 생각을 하게 되었습니다.
도움이 되어 드리지 못해 죄송합니다.
각 노트북 마다 다른 값이 되게 고정된 값을 보내는 거죠.
예를 들어 1번 노트북에서 쿼리 이미지가 날아오면 약간의 딜레이 후 0.1
2번 노트북은 0.2
이런식으로..
이렇게 프로그래밍 해서 여러대의 노트북이 붙었을 때 정확도 값이 꼬이지 않고 받아진다면 문제는 딥러닝 쪽에서 병렬처리 하는 쓰레드쪽 문제가 아닐까요?
이 버그가 일어날 땐, 모든 쓰레드에 (이미지에 목표 오브젝트가 있건, 없건 상관 없이) confidence가 비정상적으로 확 튀는걸 확인했습니다.
그러니까 노트북에서 값 받는건 아무 이상 없고 서버 쪽에서 confidence가 실제로 이상이 있었던 셈이죠
아래 적어주신 내용은 실제로 해보려면 시간이 좀 걸릴껀데.. 그렇게 해서 버그를 잡은 들, 지금 쓰레드를 사용하는건 병렬적으로 처리하기 위함인데
메인 프로세스에서 신호가 오는대로 한건 한건 처리하는것과 다를 바 없어질꺼 같아서 좀 답답하네요..
1보다 큰 정확도가 나온다는 건 아마도 AI 쪽 프로그램에서 오동작 하는 것 같습니다.