In streamvln/dataset/vln_action_dataset.py, line 657 calculates num_rounds using floor division (//):
num_rounds= (actions_len-valid_idx) //self.num_framesThenititeratesoverrange(num_rounds+1) andskipsthelastemptywindow (whenn*self.num_frames==actions_len-valid_idx), whichresultsinonlynum_roundssamplesbeingaddedperepisode.
Thismeans:
Foranyepisodewhere (actions_len-valid_idx) %self.num_frames!=0, thefinalactionsegment (includingtheSTOPstep) isdiscardedentirely.
ThetrainingsetlosesalargenumberofSTOPsignals, sotheagentneverseesenoughexamplesofwhentostopduringnavigation.
Thiscouldleadtotheagentfailingtostopatthetargetduringinference, severelyhurtingnavigationsuccessratesandSPLmetrics.
Exampleactions_len-valid_idx=87self.num_frames=32num_rounds=87//32=2Onlywindows0~31and32~63arekept; thefinalsegment64~87 (includingSTOP) islost.
SuggestedFixInsteadofdiscardingthefinalsegment, weshoulduseceilingdivisiontokeepallactionsegments (includingthelastpartialone) andpadshortersegmentstoself.num_frameslengthduringcollation. Thisway:
Noaction/STOPstepsarediscardedTheagentcanlearntorecognizeandexecutetheSTOPsignalTrainingstabilityismaintainedviapaddingCouldwemodifythesamplinglogictopreserveallactionsegments (includingpartialones) insteadofusingfloordivision?
In
streamvln/dataset/vln_action_dataset.py, line 657 calculatesnum_roundsusing floor division (//):