Boostcamp AI Tech (Day 045)
๐ Add ultralytics #95
Open
boyamie wants to merge 7 commits into main from feature-72/yolov11
Open
๐ Add ultralytics
#95
boyamie wants to merge 7 commits into main from feature-72/yolov11
+476 โ0
Conversation 17
Commits 7
Checks 0
Files changed 8
Conversation
boyamie
boyamie commented yesterday
Overview
convert.py: COCO -> YOLO ํ์ ๋ณํ
split.py: ๋ฐ์ดํฐ ๋ถํ (train/val)
train.py: YOLO ๋ชจ๋ธ ํ์ต
inference.py: ์ถ๋ก ๋ฐ CSV ๋ณํ
streamlit.py: ์ถ๋ก ๊ฒฐ๊ณผ ์๊ฐํ
train.py๋ฅผ ์คํ์ํค๋ฉด convert์ split์ ํจ์๋ฅผ ๋ถ๋ฌ์์ ์คํ๋ฉ๋๋ค.
Change Log
W&B๋ฅผ ํ์ฉํ mAP50 ์๊ฐํ ๋์
Streamlit์ ํตํ EDA ๋์
To Reviewer
๋ค ๊ฐ์์์์ต๋๋ค
Issue Tags
Closed | Fixed: [BUG] Ultralytics W&B mAP50 #94
See also: [BUG] Ultralytics W&B mAP50 #94
boyamie added 3 commits 2 days ago
@boyamie
โจ Add ultralytics
6e19ff0
@boyamie
๐ Refactor
eb340f2
@boyamie
๐ฉ Only train project
cbc63ec
@boyamie boyamie added โจ Model ๐จ Refactor Priority: High โ Setting(Utils) โก EDA labels yesterday
@boyamie boyamie requested a review from Haneol-Kijm yesterday
@boyamie boyamie self-assigned this yesterday
boyamie added 2 commits yesterday
@boyamie
๐ Split by ori_haneolcode
e536bc8
@boyamie
๐ Add elegant
17f907d
Haneol-Kijm
Haneol-Kijm requested changes yesterday
Haneol-Kijm left a comment
์ข
ํฉ์ ์ผ๋ก ์ฌ์ํ ๋ถ๋ถ์ ์ ์ธํ๋ฉด ๊น๋ํ ์ฝ๋๊ธด ํฉ๋๋ค. ์๋๋ ๋ฐ๋ก ๋ณํฉ์์ผ๋๋ฆฌ๋ ค๊ณ ํ๋๋ฐ์, 0.1์ฉ ์ฌ์ํ ๋ถ๋ถ์ ๋ชจ์๋๊ณ ๋ณด๋๊น 1์ด๋ผ๋ ๊ฐ์ด ๋์ด์ ๋ณํฉ ์ปคํธ๋ผ์ธ์ ๋ชป ๋๋ ๋๋์
๋๋ค. ์ข ๋๋ฌด ์ฌ์ํ ๋ถ๋ถ๋ค์ ์ง์ ํด์ ์ฃ์กํ์ง๋ง ๋ณดํ๋๊ป ๋์์ด ๋ ๋งํ ๋ถ๋ถ๋ค์ด ์์ผ๋ ํ ๋ฒ ์ฒดํฌํ๊ณ ๋์ด๊ฐ์
จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
yolov11/augmentation.py yolov11/cfg/data.yaml @Haneol-Kijm Haneol-Kijm yesterday ํด๋์ค๊ฐ ์๊น ์ ๋๋ก ํ๊ธฐ๋์ง ์๋ ์ค๋ฅ๊ฐ ์๋ค๊ณ ํ์๋๋ฐ์, ์คํ ๋๋ฆฌ๊ฒ ๋๋ฉด ์ฒดํฌํด๋ณด๋ฉด ์ข๊ฒ ๋ค์.
@boyamie Replyโฆ yolov11/convert.py @Haneol-Kijm Haneol-Kijm yesterday ์ฝ๋ ์์ฒด๋ ๊น๋ํ๊ณ ์ข์๋ฐ์, ์๋ณธ train.json๊ณผ์ ํผ๋์ ํผํ๊ธฐ ์ํด ์ต์ข ์ ์ฅ๋๋ ํ์ผ๋ช ์ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ํ๋ฉด ์ข๊ฒ ๋ค์. train3.json ์ด๊ฑด ์ ๊ฐ ๋์ถฉ ์๊ฐํ๋ ๊ฒ์ธ๋ฐ ์ข ๋๋ฌด ํท๊ฐ๋ฆฌ๊ฒ ์ง์๋ค๋ ์๊ฐ์ด ๋ค๊ตฌ์, train_aug๋ผ๋๊ฐ train_modified๋ผ๋๊ฐ ์ฑ์งํผํฐ ์ถ์ฒ์ ๋ฐ์๋๋ฉด ์ข์ ๋ฏ ํฉ๋๋ค. ์ญ์ ํ์์ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ์๋๋๋ค.
Author @boyamie boyamie 20 hours ago
์ต์ข ๋ณํ๋ json ํ์ผ๋ช ๋ณ๊ฒฝ
train_aug_json_path = โ/data/ephemeral/home/dataset/train_aug.jsonโ
๋ณํ ์คํ
convert_yolo(train_json_path, train_label_output_dir)
๋ณํ๋ ํ์ผ์ train_aug.json ๋๋ ์ ์ ํ ์ด๋ฆ์ผ๋ก ์ ์ฅ
print(fโYOLO ํ์์ผ๋ก ๋ณํ๋ ๋ผ๋ฒจ์ด {train_label_output_dir}์ ์ ์ฅ๋์์ต๋๋ค. ๋ณํ๋ JSON ํ์ผ์ {train_aug_json_path}์ ์ ์ฅ๋ฉ๋๋ค.โ) ์ข์ ์๊ฒฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์ถ๊ฐ๋ก print๋ก ์ถ๋ ฅํด์ ์ ์ฅ๋ ๋๋ ํ ๋ฆฌ ์ฐพ๊ธฐ ์ฝ๊ฒ ํด๋ดค์ต๋๋ค ใ ใ ๊ฐ์ฌํฉ๋๋ค!!
@boyamie Replyโฆ boyamie marked this conversation as resolved. yolov11/inference.py @Haneol-Kijm Haneol-Kijm yesterday ์ด ์ฝ๋๋ ์ ๊ฐ ์ ์ฌํ ๋ณผ ํ์๊ฐ ์์ด ์๋ณธ inference ์ฝ๋์ submission ํ์ผ์ ์ดํด๋ดค์ต๋๋ค. ์ ์ถ ํ์์ confidnece ์ค์ฝ์ด๋ฅผ .4f๋ก ์ง์ ํ์ฌ 4์๋ฆฌ๊น์ง๋ง ํ์๋๊ฒ ๋์ด์๋๋ฐ์,
for j in range(class_num): for o in out[j]: prediction_string += str(j) + โ โ + str(o[4]) + โ โ + str(o[0]) + โ โ + str(o[1]) + โ โ + str( o[2]) + โ โ + str(o[3]) + โ โ ์๋ณธ์ ์์ ์๋ฆฌ์ ์ง์ ์ด ์๋๋ผ๊ตฌ์. ์ค์ ๋ก submission ํ์ผ์๋ ์ปจํผ๋์ค ์ ์๊ฐ 8์๋ฆฌ ์ง๋ฆฌ๋ ์๊ณ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋์ ๊ทธ ๋ถ๋ถ์ ์์ ๋นผ์ ์ผํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ์ด์ธ์๋ ์๋ณธ ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ๋ฐ๊พธ์ ์ ๋ณด๊ธฐ ์ข๋ค๋ ์๊ฐ์ด ๋ง๋๋ค. ํ์ผ๋ช ์ ๋์ ์ submission.csv๋ณด๋จ submission_{๋ชจ๋ธ๋ช }.csv๋ฉด ์ข ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
Author @boyamie boyamie 20 hours ago Confidence ์ค์ฝ์ด์ ์๋ฆฌ์ ์ ํ์ ์ ๊ฑฐํ๊ณ , ์ถ๋ ฅ ํ์ผ๋ช ์ ๋ชจ๋ธ๋ช ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค!
prediction_string += fโ{int(cls)} {conf} {xmin} {ymin} {xmax} {ymax} โ Author @boyamie boyamie 20 hours ago model_name = โyolo11xโ submission_file = fโsubmission_{model_name}.csvโ @boyamie Replyโฆ boyamie marked this conversation as resolved. yolov11/split.py @Haneol-Kijm Haneol-Kijm yesterday ๊ทธ๋ฅ ํจ์ํ์์ผ๋ก ๋ฐ๊พธ๊ณ ๋ณต๋ถํด์ ํ์ดํ๋ผ์ธ์ ์ถ๊ฐํ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ, ์ค๋ณต๋๋ ๊ธฐ๋ฅ์ด์ง๋ง ๊ฐ์ด ํฌํจ์ํค๋ ๊ฒ ์ฝ๋ ๊ตฌ์กฐ ์ ์ฒด์์ ์ผ๊ด์ฑ ์๊ณ ๋ ๊น๋ํ ๊ฑฐ ๊ฐ์์ ๋ณด๊ธฐ ์ข์ต๋๋ค. ๊ทผ๋ฐ ์ ๊ฐ ์ง์ ๊ฑฐ์ง๋ง train2๋ val2๋ ์ด๋ฆ์ ์ข ๊ตฌ๋ฆฐ ๊ฑฐ ๊ฐ๋ค์.
Author @boyamie boyamie 20 hours ago train_file=โtrain_split.jsonโ val_file=โval_split.jsonโ ํ์ผ๋ช ๋ณ๊ฒฝํ์ต๋๋ค !! ใ ใ ใ ใ train2๋ val2๋ ๊ด์ฐฎ์..์!!
@boyamie Replyโฆ boyamie marked this conversation as resolved. yolov11/streamlit.py @Haneol-Kijm Haneol-Kijm yesterday streamlit์ ์ ๊ฐ ์ ์จ๋ด์ ์ ๋ชจ๋ฅด๋๋ฐ, ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํ ์ ์๋๋ก visualizeํ๋ ์ด๋ฏธ์ง๋ฅผ pr์ ์ฒจ๋ถํด์ฃผ์๋ฉด ์ข ๋ ์๋ฆ๋ค์ธ ๊ฑฐ ๊ฐ๋ค๊ณ ๋ค๋ฅธ ํ์๊ป์ ์ธ๊ธํ ์ ์ด ์๊ธด ํฉ๋๋ค.
Author @boyamie boyamie 20 hours ago ์ข์ ์๊ฐ์ ๋๋ค! streamlit ์ฑ์ ์คํ์ํค๊ณ ๋ณด์ํ๋ฉด์ pr๋ ๋ฆด ๋ ์ด๋ฏธ์ง๋ฅผ ์ฒจ๋ถํด๋ณด๊ฒ ์ต๋๋ค!
@boyamie Replyโฆ boyamie marked this conversation as resolved. yolov11/train.py @Haneol-Kijm Haneol-Kijm yesterday ์ด ํ์ต ์ฝ๋ ์์ฒด๊ฐ ์ ๋ฐ์ ์ผ๋ก ๋๊ฒ ๊น๋ํด์ ์๋นํ ๋ง์์ ๋๋ ์ฝ๋์ ๋๋ค. ๋ค๋ง ํ ๊ฐ์ง ๊ฑธ๋ฆฌ๋ ์ ์ด ์๋๋ฐ์,
results = model.train(data=โ/data/ephemeral/home/github/yolov11/cfg/data.yamlโ, epochs=50, imgsz=512, batch=16) ์ด ๋ถ๋ถ์์ validation set์ด ๋ฐ๋ก ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ด ์์ง ์๋์? ๋ณดํต ์ด๋ฐ ํจ์์ ๊ฒฝ์ฐ์ model.train(validation_data_path=~) ์ด๋ฐ ์์ผ๋ก ๋ค์ด๊ฐ๊ฑฐ๋, model.validate ๊ฐ์ ํจ์๋ฅผ ๋ฐ๋ก ์ถ๊ฐ๋ก ์จ์ค์ผํ์ง ์๋ ์ถ์ต๋๋ค. ๋ ์ง๊ธ ์ ๊ฑด๋ฐ image ์คํ๋ ์๋ค์. ์ด ๋ถ๋ถ ์ฒดํฌ ๋ถํ๋๋ฆฝ๋๋ค.
Author @boyamie boyamie 20 hours ago Ultralytics ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ชจ๋ธ์ ์ ๋ ฅ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ ํ ๋ imgsz ๋ผ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋๋ก ๋ง๋ค์์ต๋๋ค! (๏ฟฝ์ด๋ฏธ์ง ์ฌ์ด์ฆ๋ฅผ ์ค์ธ ๊ฒ ๊ฐ์ต๋๋น ) validation ๋ฐ์ดํฐ๋ data.yaml์์ ์ค์ ๋ ๋๋ก ์ฌ์ฉ๋๊ฒ ๋ณ๊ฒฝํ์ต๋๋ค!
@Haneol-Kijm Haneol-Kijm 17 hours ago ์ ์ด๋ฏธ์ง ์ฌ์ด์ฆ๊ณ yaml์์ ์ฌ์ฉํ๋ ๊ตฐ์. ์คํด๊ฐ ์์๋ค์ ์ฃ์กํฉ๋๋ค.
@boyamie Replyโฆ boyamie marked this conversation as resolved. @boyamie โป๏ธ After feedback b787d60 Haneol-Kijm Haneol-Kijm approved these changes 17 hours ago Haneol-Kijm left a comment ๋งค์ฐ ์ฝ๋๊ฐ ๊น๋ํ๊ณ ์ข์์ ธ์ ๋ณด๊ธฐ ์ข์ต๋๋ค! ๋ณํฉ์ ๋ฐ๋ก ํ์ค ๊ฑฐ ๊ฐ์ ์น์ธ๋ง ๋ฃ๊ณ ํ์ง ์๊ฒ ์ต๋๋ค. ์ด๊ฑด ๋ณ๋์ ์ง๋ฌธ์ธ๋ฐ์, ์๋ ๋ผ๋ฒจ๋ง ์ฝ๋๋ ๋ณ๊ฐ๋ก ์คํํด์ผ ๋๋ ํ์ผ์ธ๊ฐ์? main ์ฝ๋๊ฐ ๋ค์ด๊ฐ์๋ค์.
@boyamie ๐ฉน Add model path 4cb7611 Merge state Changes approved 1 approving review 1 approval This branch has no conflicts with the base branch Merging can be performed automatically.