KT 에이블스쿨 : 딥러닝 심화 1일차 - 객체인식

     




    딥러닝 심화  

    24.04.16 (화) 

    딥러닝 심화로 무엇을 배울지 궁금했는데, 객체인식에 대해서 공부하게 됐다.


    배운걸 간략하게 정리하자면, Object detection 구성요소랑 실습을 했다. 

    • 객체 인식 요소

      • Bounding Box (x, y, w, h 위치정보)
      • Confidence Score : 확신 정도
      • IoU (Intersection over Union) : 정답박스랑 예측박스가 겹치는 영역
      • NMS (Non-Maximum Suppression) : 중복 박스 제거
        • Confidence Score의 한계점이 높을수록, IoU 한계점이 낮을수록 중복 박스에 대한 판단이 엄밀해짐 
      • Precision, Recall
      • AP (average precision) : precision - recall 곡선 그래프 아래의 면적
      • mAP (mean Average Precision)각 클래스 별 AP를 합산하여 평균을 낸 것
      • Annotation : 이미지 내 Detection 정보를 별도의 설명 파일로 제공되는 것
        • image 파일에서 감지한 객체의 위치, 클래스 구분정보를 txt 파일로 저장





    • 객체인식 코드 흐름

      • 라이브러리 설치 
        • !pip install ultralytics 
      • 라이브러리 불러오기 
        • from ultralytics import YOLO
      • YOLO 모델 선언 
        • model = YOLO()  
        • (선택) 모델 구조(model = 'yolov8n.pt')
        • (선택) 가중치 설정(task = 'detect' 'OBB', 'pose', 'classification') 
      • 모델 학습
        • model.train() 
        • (선택) 학습 파라미터 설정 가능 
      • (선택) 모델 검증
      • 모델 예측 - 예측 결과 생성
        • model.predict(save=True, save_txt=True)



    • Roboflow 

    • 객체인식 데이터셋, 모델 공유 사이트(링크)
      Roboflow에서 데이터셋 불러와 모델 학습 
      •  roboflow 라이브러리를 설치하고 데이터셋 불러옴
        • roboflow 의 데이터셋을 쓰기 위함
        • 데이터셋 설치 : roboflow 홈피의 풋볼 데이터셋의 api_key를 복붙
      • ultralytics 라이브러리 설치하고, Yolo, settings 불러옴
        • 모델링하기 위함
        • settings에서 ‘datasets_dir’ 경로 변경 
          • settings['datasets_dir'] = '/content/' 
          • 변경 이유 : 코랩에서 폴더를 열면, content인데 datasets 폴더가 없어서임
        • yaml 라이브러리를 불러와서, data.yaml 파일의 train, val 경로를 수정
          • 변경 이유 : 경로 중복을 피하기 위함
            yaml파일이 현재 있는 디렉토리를 기준으로 해서 더 타고 들어가는 경로이기 때문임.
      • YOLO 모델 가져와서 학습 
        • model_tmp = YOLO()
        • model_tmp.train(model = (모델 경로복사), data = (data.yaml 경로복사), epochs = 30)
        • 파라미터 많지만, model의 경로, data의 경로, epochs 파라미터는 꼭 쓰기
      • YOLO 모델 예측 
        • path = 이미지 사진 주소 or 파일 경로
        • model_tmp.predict(source=path, save=True, (택)conf=0.1, (택)iou=0.9 )


    • data.yaml 정보 

      • nc 는 클래스의 수   
      • test는 옵션이라서 신경 안써도됨 
      • train, val은 꼭 필요함 
      • val 파일 없으면, 경로수정해서 test 가져오면 됨   
    roboflow에서 임의로 들고온 풋볼 플레이어 데이터셋 


    추가 정리 

    • Q) 모델 학습할때 model.fit을 쓰던 이전과 달리, model.train을 쓰는 이유

      • A) 텐서플로우 모델은 .fit을 사용하고, 파이토치는 .train을 사용해서임.
        yolo 모델은 파이토치로 만들어져 있다보니, train을 사용하고 있는 것
        의미는 동일

    • Q) 예측결과에 객체인식이 안되는건, epochs 횟수가 부족인가 ?

      • A) 일부분 맞음. epochs가 많을수록 좋고, 기본값은 100임
        epochs 뿐만 아니라, confidence랑 iou값이 높으면 객체인식이 적게 나옴
        그리고, 데이터셋의 양이 적을때(600개도 좀 작)도 잘 안나옴


    • Q) 예측결과에서 전혀 다른 클래스로 예측하는 이유는 ? 

      • 사람이 그네타는걸 보고, bus라고 하고, 사람 뒷 엉덩이보고 wine glass라 하고, 그네 의자 밑부분을 oven 이라고 예측함
      • A) 학습된 클래스 안에 있는걸로만 예측하다보니까 최대한 유사한거를 표시하는 것임
        그네 의자 밑부분, 사람 뒷 엉덩이 등을 학습하지 않아서 모르는 거임





    • Q) 데이터셋을 불러왔는데, train 혹은 valid 폴더가 없는 경우

      • A) 간혹 데이터셋에 valid 폴더가 없기도함. test의 경로로 수정해도됨

    face detect 데이터셋을 들고왔을때, val가 없어서 위의 방법으로 해결함 



    • Overriding model.yaml의 의미

      • 학습시키면 나오는 Overriding model.yaml nc=80 with nc=25 
      • 원래 ms coco로 학습할때는 80개의 클래스로 학습되었었음,
        그 위에 construction 데이터셋(클래스 25개)으로 학습을 시키니까 25개의 클래스로 덮혔다는 의미
        = 오버라이딩


    모델 학습하면 매번 이렇게 나옴 


    • Object Detection 모델 구조

      • Backbone
        • Object Detection 모델 구조에서 앞단에 배치되어
          "이미지의 일반적인 특징을 잘 추출해내리라" 믿고 사용하는 부분
        • 입력 이미지를 feature map으로 변형시켜주는 부분
      • Head
        • Object Detection 모델 구조에서 뒷단에 배치되어 "문제에 맞게 추가하거나 변형한" 부분



    모델링 실습 

    강아지, 고양이 인식

    roboflow에서 강아지, 고양이를 인식하는 데이터셋을 활용함

    처음에는 인식률이 되게 낮았지만, 칭구들의 고양이 강아지로 검증해보니 나름 인식률이 좋았다. 





    칭구 얼굴이 개상인지 고양이 상인지도 확인해봄 

    ㅈㅁㅈ는 개상이었다

    재밌ㄷr






    체스 게임의 피스 인식

    roboflow 의 데이터셋 중에서 체스 게임의 말을 인식하는 걸 골랐다. 

    이미지의 갯수가 3백개가 안되서, 모델링 학습과정에 시간을 줄일 수 있을것 같아 선택했는

    아무리 epochs 횟수를 늘려도 bounding box가 하나도 안나왔다. 

    좌절하고 다른 데이터셋으로 바꿔서 했는데, 알고보니 predict 할때 다른 모델링 변수명을 써서였다 .. ㅋ 

    OTL 




    사람얼굴 인식

    roboflow에서 내가 원하는 데이터셋을 골라서 모델링하는 실습을 몇번해보니 감을 잡았다

    이번에는 얼굴인식으로 해봤는데 

    epochs를 낮게 줬는데도  잘나왔다 ! 


    굳 





    친구 사진으로도 예측을 해봤는데, 강아지에 가려져있어서 인지 가방을 얼굴로 인식하기도 했다 
     

    칭구가 홈캠에 강아지얼굴이 자꾸 사람인식으로 뜬다고 해서, 

    강아지로도 돌려봤더니 confidence score가 0.46정도로 낮기는 하나 사람얼굴로 인식했다






    댓글

    이 블로그의 인기 게시물

    [KT 에이블스쿨 - IT 트랜드] 국내외 AI 관련 규제

    KT 에이블스쿨 : 핀테크 아이디어 공모전

    KT 에이블스쿨 : 6-7차 미니프로젝트 - 제안서 기반 솔류션 기획 및 설계