ASAC 빅데이터 분석가 7기/ASAC 일일 기록

ASAC 빅데이터 분석가 과정 52일차 (25.02.24)

junslee 2025. 2. 24. 09:23

8_dl

1_code

6_yolo (이어서)

**최신 논문/ 최신 코드 이런 부분들을 보시면 직접 다 해결해야 함

=> 코드 쓴 사람의 코드 자체도 에러가 상당하다

-> gpt 잘안된다 

그냥 구글링 + 간단한 것 정도 물어보는 정도 

gpt 해보면 시간만 간다.

그 결과를 바탕으로 본인이 결론을 가지고 답을 해야 함

  • # 지금의 목적은 있는 모델을 그대로 사용하는 것이 아니라!!1
    # ==> 우리의 특수한 데이터에 맞춰서 학습을 다시 시키는 것!!!
    # 어떤 식으로 학습을 할지에 대해서 세팅!!!!(환경 설정 파일!!!)
    # yolo에서는 ~~~.yaml 파일로 학습에 대한 설정을 알려줘야 함!!!

    # 기존 yolo는 coco 데이터 셋을 기준으로 학습을 하였는데,,
    # 이것을 개발자 원하는 데이터셋으로 튜닝/재학습을 하려고 하면,,
    # ~~.yaml 파일을 직접 생성!!!!

    # yolo v5 기준으로 작성할 정보
    # 1) train폴더의 위치
    # 2) valid폴더의 위치
    # 3) txt 파일에 대한 작성한 종류의 수(탐지할 데이터 종류의 수)
    # 4) names에 구체적인 대상의 이름을 작성!!!
    # ===> yaml로 파일을 작성해야 함!!!!
# 작성방법1) 직접 메모장을 열어서 작성하는 방법!!!
# 작성방법2) 직접 코드로 작성하는 부분을 하겠습니다.
#            ==> 주의사항!! yaml의 정의상!!! 공백 처리에 주의해야 함!!!!
# 참고) 내가 이삭에 대한 품종별로 판별하는 모델로 학습하겠다!!!
#       nc: 7   #---> text 파일에서는 0~부터 라벨링!!!!!!!
#       names: ["us1","ass32","fdf3".,.,...]
# 참고) yaml파일에서 대상명: :을 바로 붙여야 함!!
#       그에 대한 속성값 : 뒤에 1칸 공백 세팅이 있어야 함!!
yaml_text ="""train: /content/convert/fold_0/images/train/
val: /content/convert/fold_0/images/valid/

nc: 1
names: ['wheat']
"""
# ===> 내가 작성할 내용에 대해서 문자열로 코드화!!!
# 위의 문자열에 대한 내용을 text 파일에 작성을 해서 ~~~.yaml
with open("wheat.yaml", "w") as f:
    f.write(yaml_text)
# 실제 작성한 파일을 확인!!!
# 1) colab 직접 파일을 클릭!!! --> 수정도 가능!!!
# 2) 리눅스 명령어로 확인!!!
# 3) 파이썬의 파일 IO 확인!!!!!
!cat wheat.yaml
train: /content/convert/fold_0/images/train/
val: /content/convert/fold_0/images/valid/

nc: 1
names: ['wheat']
  • # ===> 기본적으로 나만의 용도의 학습 데이터 준비는 끝!!!
    # : 원하는 데이터 수집 ---> 데이터 라벨링 ---> 폴더 구조화 & text 파일 작성!!!
    # : 모델이 어떻게 수집한 데이터에 대해서 어떻게 학습할지 세팅 : yaml 파일 작성!
!ls

!python train.py -h
!python train.py --img 512 --batch-size 2 --epochs 2 --data wheat.yaml --weights yolov5s.pt --device 0
  • # 참고) https://docs.ultralytics.com/ko/modes/train/#usage-examples
    # ==> yolo 패키지를 설치해서 기존에 했던 방식대로 편히 사용하는 방법!!!
    # 왜 굳이 이런 식으로 하는 방법으로 설명했냐?
    # ==> 새로운 github에 있는 최신 코드들을 돌려보거나 적용해보는 방식!!!

  • # =====> 위의 과정은 나의 데이터로 새로운 weight를 생성!!!!!!!!
    # 시간 + 데이터를 보면서,,,최적화를 하면 됨!!!!
    # 가정 : 최적화 되었다고 가정!!!!!

  • # yolo
    # 학습 : train.py
    # 적용 : detect.py ( 다른 github predict.py, inference.py, test.py, : 개발자 개취!!!)

  • # detect.py
    # 실제 내용을 열어서 보면 여러가지 세팅!!!
    # - weights : 적용할 모델을 지정!!!! ==> 기존 모델이 아니라 내가 직접 만든!!!
    # - img : 이미지 처리할 사이즈
    # - source : 테스트할 이미지가 있는 경로....
    # - conf : 기준값!!!
    # ( 기준값은 너무 낮게 : 이삭이 아닌 경우 박스가 많이 쳐질 수 있음!!)
    # ( 기준값이 너무 높게 : 이삭이 많아도,,1~2개만 찾을 수 있다!!!)
    # ===> 현실적으로는 굉장히 중요한 기준값!!!!!

%cd /content/yolov5
# 참고) 경로에 대한 부분을 잘 맞춰서 해야함!!!!
# ==> 위에서는 혹시 설명하다가 다른 부분으로 기준 경로가 이동했을 수
# 있어서,,명확하게 변경하고 하는 것임!!!
/content/yolov5
!python detect.py --weights runs/train/exp2/weights/best.pt --img 512 --source ../data/test --conf 0.1 --save-txt --save-conf
  • # ===> 내가 풀어야 할 문제에 대해서
    #      푼 결과들이
    #      runs 폴더 안에 detect 폴더 안에 존재를 함!!!
    #      1) 실제 탐지한 경우에 대한 박스 그림
    #      2) labels 에는 탐지한 박스에 대한
    #         탐지대상라벨값, 상대적위치값

  • # 이 상태로는 kaggle에 업로드가 불가능 함!!
    # ==> 처리된 결과를 바탕으로 제출하는 양식으로 변경!!!!!
    # ( 다시 좌표의 이슈)

  • # 1. 좌표를 처리를 yolo를 사용했기 때문에
    # ==> 중심 좌표를 기준으로 사용을 하였음!!!!!+ 상대좌표!!
    # ==> To Do : 입력 yolo기준(중심좌표& 상대)
    #           ---> 출력(좌측상단좌표&절대 1024기준 픽셀)

  • def convert_yo_kaggle( yolo_pos):
        # 입력 : 라벨값, x,y,w,h + 1024 크기의 픽셀로 변경!!
        x = int(1024*(yolo_pos[1] - yolo_pos[3]/2)) # 좌표변경+비율
        y = int(1024*(yolo_pos[2] - yolo_pos[4]/2)) # 좌표변경+비율
        w = int(1024*(yolo_pos[3] )) # 비율만 조정
        h = int(1024*(yolo_pos[4] )) # 비율만 조정
        # 참고: 이렇게 불편한 이유는 제공한 데이터와 다른 양식의 yolo 학습을 해서!!!

        # + 제출 양식 중에 맨 앞에 conf 값을
        conf = 0.1 # ---> detect 실행 시 사용한 값....

        return (str(conf)+" "+str(x)+" "+str(y)+" "
                    + str(w)+" "+str(h))
import os
# ==> 제출할 파일에 대한 작성할 위치에 대한 경로 + 파일명
with open("/content/data/my_submission.csv", "w") as mf:
    # test한 결과들에 대해서 txt 파일을 읽어서 정릴--> csv 작성!!
    mf.write("image_id"+","+"PredictionString"+"\n")
    result_folder = "/content/yolov5/runs/detect/exp2/labels/"
    for f in os.listdir(result_folder):
        file_name = result_folder+f
        # /content/yolov5/runs/detect/exp2/labels/f5a1f0358.txt
        data = pd.read_csv(file_name, sep=" ", header=None)
        temp_box = " ".join( data.apply( lambda x:
                                        convert_yo_kaggle(x), axis=1))
        f = f[:-4] #abcd.txt --> abcd 파일명만 추리기!!!
        mf.write(f+","+temp_box+"\n")
    mf.close()
t = pd.read_csv("/content/yolov5/runs/detect/exp2/labels/2fd875eaa.txt", sep=" ", header=None)
t

t.apply(lambda x : convert_yo_kaggle(x), axis=1)

list(t.apply(lambda x : convert_yo_kaggle(x), axis=1))
['0.1 822 469 200 213', '0.1 464 467 149 142']
" X ".join(["AAA","BBB","CCC"])
'AAA X BBB X CCC'
" ".join(t.apply(lambda x : convert_yo_kaggle(x), axis=1))
'0.1 822 469 200 213 0.1 464 467 149 142'
list(t.apply(lambda x : convert_yo_kaggle(x), axis=1))
['0.1 822 469 200 213', '0.1 464 467 149 142']
pd.read_csv("/content/data/my_submission.csv", sep=",")

  • # result_folder = "/content/yolov5/runs/detect/exp2/labels/"
    # for f in os.listdir(result_folder):
    #    print(f)

  • ### 그 쪽에서 제출하고자 하는 양식대로 만들어서 제출해야 함!!!
    # 1. 데이터에 대한 양식 + 전처리
    # 2. 직접 학습할 것인가 vs 있는 다른 모델을 튜닝!!!!
    #    직접 학습 + : 내가 처음부터 다 핸들링이 가능함!!
    #              - : weight를 처음부터 내가 다 찾아야 한다..cost
    #    있는 모델 + : 잘 되는 것에서 내 목적에 맞도록 튜닝!!! cost (///)
    #              - : 뭔가 변동이 제약이 있다!!!!
    # ==> yolo : 데이터 기준(중심좌표+상대좌표+학습양식yaml+데이터폴더구조)
    #          : 데이터만 세팅하면,,,,원하는대로 학습 + 적용이런 것들이 가능!!
    # 3. 적용하는 과정 // 제출하는 과정에서 프로토콜 맞추기!!
    # ==> 최대한 코드화 작업으로 하시도록 해야함!!!!!
    #     + 조별 프로젝트 하실 떄도 이렇게 하셔야,,,다른 조원이 해도 쉽게 적용!!

    # /////////////////////////////////////////////
    # *** 목적 : github에 있는 코드들을 바탕으로 어떻게 실행시킬까에 대한 연습!!!
    # ==> 잘 정리된 버전 중심으로 한 것이고,,실제는 엉망인 것들이 많아요!!!
    # ==> 참조 코드를 싹 돌아서 코드적인 이슈가 없다면,,
    #     그 때부터 본인 생각대록 데이터도 변경, 구조 변경,,,: 실험!!
    # 개인적인 의견 : 학위 과정/회사에서 빠르게 일을 함!!!
    #                 논문이나 실적 :실험이나 다시 시도에 대한 결과!!!
    #               : 코드가 여러 사람의 코드가 포장되어 있음!!! 종속성이 많이!!!
    #               : 최신 것들을 하면...이런 부분이 좀 있음!!!!

    # ===> 이런쪽이 현실적으로 지금 자리도 많고,,,돈도 좀 줍니다!!! **
    # 오히려 대기업보다 많이 주는 곳들도 많아요!!! + 대신 검증은 타이트함!!
    # 본인 실력이 있어야 하고!!!
    # ==> 공식화 : 논문/ 학회
    # ==> 내공 : 직접 에러들을 욕하면서 해결해나가야 함!!!

 


이번주 할 내용 프리뷰

style_transfer

 

*주된 내용들에 대한 족보 논문들을 공부도 해야함

=> 이것만 하면 과거만 하기 때문에 새로운 본인 것을 못할 수 있다.

(앞으로 가는 부분+ 뒤에서 차분히 오는 부분 같이 해야한다.)

=> 너무 이론에 쌓여서 논문만 보고 땡

 

2년 석사 : 논문만 읽고, 본인 플젝없고, 새로운 실적 없고 

=> 학졸 동일

*본인 실력 어필해야 한다.