|
|
공통 조건
| Model : DDRNet DATASET : 2025 자율주행 AI 챌린지 dataset TEST CODE : 대회의 baseline code에서 predict.py수행 - nomalization추가 TEST DATASET :2025 자율주행 AI 챌린지 dataset Backbone : DDRNet_cityscape.pth |
클래스 목록
0(주행가능영역)
1(인도)
2(도로노면표시)
3(차선)
4(연석)
5(벽,울타리)
6(승용차)
7(트럭)
8(버스)
9(바이크, 자전거)
10(기타 차량)
11(보행자)
12(라이더)
13(교통용 콘 및 봉)
14(건물)
15(교통 표지)
16(교통 신호)
17(기타 수직 물체)
18 (기타)
개선 방법
| PC1 (4070 Super) | PC2 (5070) | PC3 (5070) |
| 1차 (150Epoch) > 클래스별 가중치 제거 > Backbone 없이 처음부터 수행. mIoU : 0.03 0 : 0.0014477770956244356, 1 : 0, 2 : 0.00005508409304448114, 3 : 0.00004190504239067092, 4 : 0, 5 : 0.07130949588726908, 6 : 0, 7 : 0, 8 : 0, 9 : 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0.006438360806261052, 15: 0, 16: 0, 17: 0, 18: 0.5173182430609488 | 1차 (150Epoch) > 클래스별 가중치 제거 > 백본 고정 mIoU : 0.155 0 : 0.45389231488958426, 1 : 0.05742127943311684, 2 : 0.12554833468210136, 3 : 0.03158854004577449, 4 : 0.007561967054790301, 5 : 0.20395948059565316, 6 : 0.47394449548247874, 7 : 0.08241473414817312, 8 : 0.22559794069201342, 9 : 0, 10 : 0, 11 : 0.04030066772164113, 12 : 0, 13 : 0, 14 : 0.3918989956803158, 15 : 0.11116687120652706, 16 : 0, 17 : 0.0005457207375051713, 18 : 0.7463094964960154 | 1차 (150Epoch) > 클래스별 가중치 제거 > backbone 전체 학습 mIoU : 0.23 0 : 0.6628339918722256, 1 : 0.1117276418473135, 2 : 0.2145751104308903, 3 : 0.29588166693616086, 4 : 0.17965588772989222, 5 : 0.27048174376628453, 6 : 0.5345013057421286, 7 : 0.1466276380145971, 8 : 0.3611772286957439, 9 : 0, 10 : 0.009167759662240434, 11 : 0.07055652587662545, 12 : 0, 13 : 0.06146084339728035, 14 : 0.5299165070264515, 15 : 0.26539226895746404, 16 : 0, 17 : 0.0009868772766978443, 18 : 0.814418039301696 |
| 클래스별 가중치 추가 : [3.0, 3.5, 4.0911, 4.0, 3.9619, 2.0864, 3.0, 4.5, 4.0, 5.0, 5.0, 5.0, 4.0, 5.0, 2.2137, 5.0, 5.0, 4.195, 1.0] | ||
| 2차 (300 Epoch) > cityscape_backbone사용 > 클래스별 가중치 추가 mIoU : 0.463 0 : 0.8415770404965868, 1 : 0.3704319872913554, 2 : 0.48886714849216434, 3 : 0.5385162622671507, 4 : 0.5400548712134462, 5 : 0.44284216037214064, 6 : 0.8168152809078236, 7 : 0.5448697282328222, 8 : 0.7408032130106089, 9 : 0.22073135478897668, 10 : 0.010146767277225167, 11 : 0.26861865315638345, 12 : 0, 13 : 0.3364158425401929, 14 : 0.6580261293127301, 15 : 0.5301358100966457, 16 : 0.3808343677595821, 17 : 0.16651965624894333, 18 : 0.9016708906671493 | 2차 (300 Epoch) > cityscape_backbone사용 > 클래스별 가중치 추가 > AdamW로 optimizer 적용 mIoU : 0.21625 0 : 0.6410137495339226 1 : 0.18582406685471234 2 : 0.14160210912491344 3 : 0.06922899486150211, 4 : 0.09417528006918335 5 : 0.27768350353891186 6 : 0.57697856530204 7 : 0.19116090639086397 8 : 0.24648496341761678 9 : 0 10 : 0 11 : 0.11112716132181422 12 : 0 13 : 0 14 : 0.5384532126505721 15 : 0.21340300531633347 16 : 0 17 : 0.008063602131730433 18 : 0.8135789483064144 | 2차 (300 Epoch) > cityscape_backbone사용 > 클래스별 가중치 추가 > 50Epoch까지 backbone freeze mIoU : 0.42 0 : 0.7920985773742929, 1 : 0.3625773198748118 2 : 0.4986012870433933, 3 : 0.5155487754530405 4 : 0.5158210808050239 5 : 0.4466055517684837 6 : 0.7615095625421073 7 : 0.3461636603063759 8 : 0.5924485936189668 9 : 0.1516595088510235 10 : 0.008273653733689972 11 : 0.222865527935133 12 : 0 13 : 0.3351906928988521 14 : 0.6167252388418882 15 : 0.5171645821846536 16 : 0.31139089513605595 17 : 0.13231582946550124 18 : 0.8818575643718526 |
2차 개선 평가
클래스 가중치의 존재 여부는 확실히 중요해 보임
하지만 12번 클래스 라이더는 가중치를 부여해줌에도 불구하고 0이 나오는 것을 보아 어려운 것으로 확인
(3차 평가에서는 12번 클래스에 대한 가중치를 1로 줄일 예정.)
AdamW를 부여해주었으나 PC1에 비해 낮은 점수를 달성하여 해당 optimizer는 제거해서 다음 학습 진행.
(떨어진 이유로는 AdamW를 진행하는 경우 LR 값을 1e-2정도 더 낮게 설정해주어야 하는데 초반에 적은 클래스에 대한 학습이 정상적으로 이루어져 있지 않다고 추정 후에 finetuning작업을 수행할 때는 고려할 수 있는 optimizer 기법으로 생각함.)
Deeplabv3에서 수행했던 데이터 증강 기법을 추가해서 PC1과 PC2를 증강 기법을 조금씩 다르게 하여 추가 학습 진행 예정.
3차 개선
공용 : Cityscape backbone\
데이터 증식 : 비오는 날, 어두운 날 등 환경에 따른 증식 추가.
12번 클래스 가중치에 대한 값 1.0으로 초기화 (1.0이 기본 높일수록 증가.)
| PC1 (4070 Super) | PC2 (5070) | PC3 (5070) |
| 3차 (100 Epoch) 기존 0.48점에서 finetuning작업 수행 mIoU : 0.4835 0 : 0.8263000192368181, 1 : 0.38797220771794455, 2 : 0.46659901386672775, 3 : 0.539181049158271, 4 : 0.4971600416941941, 5 : 0.4924921662825784, 6 : 0.8388820135430528, 7 : 0.6112111633275299, 8 : 0.8560255575133828, 9 : 0.23354527733017302, 10 : 0.021988078173618152, 11 : 0.2947326223501107, 12 : 0.07856816729065838, 13 : 0.37229959325988315, 14 : 0.6780665524148153, 15 : 0.5604076894123777, 16 : 0.364158855359889, 17 : 0.17322817602028953, 18 : 0.9005195269206352 | mIoU : 0.2162 0 : 0.6410137495339226 1 : 0.18582406685471234 2 : 0.14160210912491344 3 : 0.06922899486150211 4 : 0.09417528006918335 5 : 0.27768350353891186 6 : 0.57697856530204 7 : 0.19116090639086397 8 : 0.24648496341761678 9 : 0 10 : 0 11 : 0.11112716132181422 12 : 0 13 : 0 14 : 0.5384532126505721 15 : 0.21340300531633347 16 : 0 17 : 0.008063602131730433 18 : 0.8135789483064144 | 3차 (300 Epoch) 날씨 증식 추가 pytorch torchvision 사용 빛번짐, 안개, 물방울 효과(blur)등 조합 mIoU : 0.4668 0 : 0.8317223033598253, 1 : 0.35770205807206307, 2 : 0.4820522728655855, 3 : 0.525868159859067, 4 : 0.5329047792897916, 5 : 0.4808181672221329, 6 : 0.830203180955272, 7 : 0.5327128492176486, 8 : 0.7655356023595261, 9 : 0.22082939580453018, 10 : 0.03593996840442338, 11 : 0.2714336792244478, 12 : 0, 13 : 0.38196009532140107, 14 : 0.6450407987703652, 15 : 0.5562758028169348, 16 : 0.36026290719618664, 17 : 0.16187559373579666, 18 : 0.8976799292910042 |
PC1
폴더별 가중치에 대한 추가적 학습으로 진행한 100Epoch는 더이상 높은 정확도를 도출해내지 못함 모델의 크기를 키우는 등의 작업이 필요해 보인다.
PC2
이전 학습과 같이 성능이 낮게 나오나 명확한 이유 규명이 되지 않고 있어 PC3에 환경과 동일하게 설정하여 학습
코드를 살펴보았으나 학습 자체는 동일하게 되고있어 PC2의 코드를 그대로 끌고와서 적용 예정
이후 Neck의 레이어 크기를 올릴 예정 모델 구조도에서 어느 부위인지 다음 보고서에 그림으로 첨가
PC3
적절한 조합의 데이터 증식 기법을 사용하는 것으로 보임 이후 모델의 Neck과 Head의 영역을 각각 키워서 PC2와 함께 학습시킬 예정
Head 레이어 크기를 올릴 예정 모델 구조도에서 어느 부위인지 다음 보고서에 그림으로 첨가
데이터 증식 영역은 4차 학습에서는 유지할 예정
4차 개선
데이터 증식 : 비오는 날, 어두운 날 등 환경에 따른 증식 유지.
12번 클래스 가중치에 대한 값 1.0으로 초기화 (1.0이 기본 높일수록 증가.)
| PC1 (4070 Super) | PC2 (5070) | PC3 (5070) |
| 4차 DDRNet_39 진행 컴퓨터가 중간에 자꾸 종료되어 PC2에서 학습 이어서 진행 | 4차 (300 Epoch) neck영역의 채널 출력값 증가. mIoU : 0.45 0 : 0.8248393482164617 1 : 0.37400657921065045 2 : 0.4185430948795009 3 : 0.5306976894621949 4 : 0.4984404514546526 5 : 0.471190197440423 6 : 0.8103688594851651 7 : 0.5601540398696215 8 : 0.8172912320407986 9 : 0.1452369104219002 10 : 0.040929706858326934 11 : 0.23354097771675955 12 : 0 13 : 0.3507566446492982 14 : 0.6171475429189319 15 : 0.5376238044987967 16 : 0.3488823364223533 17 : 0.1521029666035424 18 : 0.8978285857591775 | 4차 (300 Epoch) Head영역의 채널 출력값 증가. mIoU : 0.44 0 : 0.8226461664497963 1 : 0.372806698599859 2 : 0.41623594902292427 3 : 0.5387409998028427 4 : 0.5187310453759788 5 : 0.34917921848403566 6 : 0.8086756225490638 7 : 0.5589857751939429 8 : 0.6741797196909354 9 : 0.1506637134111639 10 : 0.07994817702405889 11 : 0.26876411845970183 12 : 0 13 : 0.3032707974985666 14 : 0.6237133555522247 15 : 0.558664553926801 16 : 0.40653921029770856 17 : 0.14464854897484306 18 : 0.8941722358392246 |
PC1
학습 실패
PC2
neck영역의 채널 출력값 증가.
12번 이외에도 10번의 가중치 값 1.0으로 초기화하여 시킬 예정.
원래 y1~ y5의 출력 채널을 128로 설정되어 있는데 해당 값을 192로 설정
PC3
Head영역의 채널 출력값 증가.
Hed_seg 의 출력 채널을 64로 설정되어 있는데 해당 값을 128로 설정
Head의 출력 채널 값 증가는 GFLOPS값에 크게 영향을 미치지 않음 (33.85에서 36.12로 증가)
이후 학습 예정
이전 48점이 나왔던 환경 그대로 유지하여 Head와 Neck의 영역을 조절하여 최대 45GFLOPS로 증가 예정
