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년 석사 : 논문만 읽고, 본인 플젝없고, 새로운 실적 없고
=> 학졸 동일
*본인 실력 어필해야 한다.
'ASAC 빅데이터 분석가 7기 > ASAC 일일 기록' 카테고리의 다른 글
ASAC 빅데이터 분석가 과정 54일차 (25.02.26) (0) | 2025.02.26 |
---|---|
ASAC 빅데이터 분석가 과정 53일차 (25.02.25) (0) | 2025.02.25 |
ASAC 빅데이터 분석가 과정 51일차 (25.02.21) (0) | 2025.02.21 |
ASAC 빅데이터 분석가 과정 50일차 (25.02.20) (0) | 2025.02.20 |
ASAC 빅데이터 분석가 과정 49일차 (25.02.19) (0) | 2025.02.19 |