hpc進度筆記--自駕車AI === 當周目標:用YOLOR訓練Waymo的Dataset # 02/09(三) ## 看資料、了解YOLOR, YOLO及如何訓練 ### YOLOR(you only learn one representation) 論文pdf:https://click.endnote.com/viewer?doi=arxiv%3A2105.04206&token=WzMzNTA4MTksImFyeGl2OjIxMDUuMDQyMDYiXQ.YuFSLyKBAmWjnyHaU0iBUTMxk-o 論文github:https://github.com/WongKinYiu/yolor 講解影片1:https://www.youtube.com/watch?v=y1XM9zrY4c0 講解影片2(AINTU):https://www.youtube.com/watch?v=HdQqAF-rMKc ### YOLO(you only look once) 論文:https://click.endnote.com/viewer?doi=arxiv%3A1506.02640&token=WzMzNTA4MTksImFyeGl2OjE1MDYuMDI2NDAiXQ.KNZp0EjOCms691JzkVvxQDzi3l4 論文(中文翻譯):https://hackmd.io/@allen108108/r1-wSTAjS ### 訓練方式 https://blog.roboflow.com/train-yolor-on-a-custom-dataset/ wiki:https://zh.wikipedia.org/wiki/%E8%AE%AD%E7%BB%83%E9%9B%86%E3%80%81%E9%AA%8C%E8%AF%81%E9%9B%86%E5%92%8C%E6%B5%8B%E8%AF%95%E9%9B%86 ## 執行YPLOR ## 關鍵字 YOLO | YOLOv4 | YOLOR | AINTU | Waymo | t-SNE | manifold learning | # 02/10(四) ## run YOLOR - [x] 看YT How to Run YOLOR Object Detection on GPU and CPU - Images and Webcam Tutorial(https://www.youtube.com/watch?v=vttJxYF-2gw) - [x] 看YT How to Run YOLOR Object Detection in COLAB | FREE CLOUD GPU(https://www.youtube.com/watch?v=AxHJaFF7eKs) - [ ] 照著在server上run一遍 - [x] 照著在colab上run一遍(「YOLOR Object Detection - Images & Video_Base」的副本)**Noe:最後display `video 的ffmpeg -i {save_path} -vcodec libx264 {compressed_path}`打成`-vofec` Orz - YOLO3在COLab的實作:https://towardsdatascience.com/yolov3-pytorch-on-google-colab-c4a79eeecdea - 流程:執行YOLOR官方github的Installation的Colab environment和Prepare pretrained weight,再執行Inference(改--source [path];加--output [path]) - [ ] read paper review(https://medium.com/augmented-startups/is-yolor-better-and-faster-than-yolov4-54812da66cc1) ## Train YOLOR by Waymo Open Dataset - 困境:Waymo Open Dataset是TFRecord,但YOLOR是用PYTorch(YOLOR沒法讀資料) - [x] 看YT 【扫盲】YOLOR训练:https://www.youtube.com/watch?v=EAP4dqIkhIUhttps://hackmd.io/l9vc8BU0SZKLH7r6IyxWug?both# - [ ] 看2nd Place Solution for Waymo Open Dataset Challenge -- Real-time 2D Object Detection:https://drive.google.com/file/d/1ZwaTVlVqymBU71Q-1RiFm9HaxErBEH89/view # 02/11(五) ## Train - [x] 直接試試看(roboflow)(「Training YOLOR on a Custom Dataset.ipynb」的副本)用Rovoflow裡面的Hard Hat Sample Dataset,結果:可以train 照這個colab執行:https://colab.research.google.com/drive/1e1Uk9SjxBaagu7aoGZ4oTcqePhnMLM23?usp=sharing#scrollTo=cy8NlkoKg9lC 流程: git clone yolor跟相關套件(mish cuda、pytorch-wavelets,yolor官網的installation有寫 -> 下載dataset放到yolor資料夾裡,如果是用Roboflow就繼續照著執行(要先到Roboflow網站下載) ![](https://i.imgur.com/3hVUB4J.png) ![](https://i.imgur.com/rgvHvG5.png) 如果不是用Roboflow就直接上傳放到yolor的資料夾裡(記得要有.yaml檔,可以用[https://codebeautify.org/yaml-validator](https://)確認格式對不對) -> prepare pre-trained weights(也是照官網的Installation裡有寫) -> 改.cfg配置檔裡面的head裡面四個[yolo]下的`classes=`和neck後面、head前面的`files=`的數量: ![](https://i.imgur.com/n2aW8Kb.png) 要加`/` 其他照著執行就能讀取.yaml檔知道classes數、算files數(`(classes數+5)*3)`)然後改.cfg檔 -> train 也是照官網,這個colab是執行一個GPU的版本 ![](https://i.imgur.com/BMsACoA.png) -> train完的結果會在`/yolor/runs/train/yolor_p6`之類的資料夾裡面,會有`results.png`檔(train的效果圖表)和`train_batch0.jpg`檔(train完框的結果?)可以看 -> 可以用`runs/train/yolor_p6/weights`裡的`best_overall.pt`當新的權重Run YOLOR 顯示執行結果 -> 可以把train完產生的權重存下來,以便之後使用 (完)(流程打於2/14) # 02/14(一) - [x] 跟大家講解如何train - [ ] 搞懂train完吐出的資料->半懂不懂,要去熟悉混淆矩陣、AP相關資料 - [x] 重新再繼續train的方式 - [x] 確定YOLO v5 Pytorch寫法,把Waymo database的資料準備好(寫yaml檔)->還不確定YOLO v5 Pytorch寫法,但用現在的yaml檔可以train(友網站可以判斷有沒有寫好[https://codebeautify.org/yaml-validator](https://)) - [ ] 在國網上train看看 # 02/15(二) - [ ] 搞懂train完吐出的資料->半懂不懂,要去熟悉混淆矩陣、AP相關資料 - [ ] 確定YOLO v5 Pytorch寫法 - [x] 讀處理waymo dataset 的.py檔->6成懂 - [x] 在國網上train看看->創了新環境(tzu_yolor) 1.出現error,解法: ``` pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio===0.9.0 -f https://download.pytorch.org/whl/torch_stable.html pip install -U cython pip install "git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI" ``` 2.git clone了yolor跟mish-cuda,卡在mish-cuda的setup.py(CUDA_HOME environment variable)、`pip install -qr requirements.txt`可能有error也可能沒事 ![](https://i.imgur.com/qlYDo8x.png) ![](https://i.imgur.com/lUp4ehx.png) (02/16(三)請假) # 02/17(四) - [ ] 搞懂train完吐出的資料->半懂不懂,要去熟悉混淆矩陣、AP相關資料 - [ ] 確定YOLO v5 Pytorch寫法 - [x] 讀處理waymo dataset 的.py檔->學姊講解,9成懂 - [x] 提交job跑處理資料的.py檔->有成功,但不確定全部跑完要花多久,怕timeout,新設的是設15小時,RUNNING - [x] 努力更新自己的電腦(因為很卡,而且之前一直有錯誤碼)->從1909手動更新到2021年11月更新 - [x] 在國網上train看看->Pytorch_wavelet可以了,但mish_cuda還是不行,可能得試試看下載其他cuda;有嘗試直接RUN YOLOR,但沒辦法(注意要get pre-trained weight) ![](https://i.imgur.com/IAyTT5h.png) ![](https://i.imgur.com/j3yzzt1.png) # 02/18(五) - [x] 昨天提交的job TimeOut了,跑到valid的108_184_SIDE_LEFT.txt,所以今天繼續(學姊有改data_create.py檔,讓我們可以看print出來的訊息) - [x] 在國網上train看看->get pretrained weight出問題,應該是整體的問題,不是國網的問題,因為在之前可以執行的colab上跑也出事 ```shell= cd /yolor bash scripts/get_pretrain.sh ``` ![](https://i.imgur.com/RDyVVF8.png) ```shell= #scripts/get_pretrain.sh curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=1Tdn3yqpZ79X7R1Ql0zNlNScB1Dv9Fp76" > /dev/null curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=1Tdn3yqpZ79X7R1Ql0zNlNScB1Dv9Fp76" -o yolor_p6.pt rm ./cookie curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=1UflcHlN5ERPdhahMivQYCbWWw7d2wY7U" > /dev/null curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=1UflcHlN5ERPdhahMivQYCbWWw7d2wY7U" -o yolor_w6.pt rm ./cookie ``` *現在策略:直接train(因為train不用weight;據資工組所說,也不用install mish-cuda和pytorch_wavelets,因為用不到) 先train epochs數一次,看要跑多久,再train epochs數多的 train完把runs資料夾下載下來上傳到雲端用colab跑tesorboard看圖表,因為我們試著在國網上用tensorboard,可以產生網址,但應該只能在國網上開來看,不過國往沒法開網路,所以:) - [x] 研究要上傳什麼到waymo的網站([Challenge 4 Real-time 2D Detection](https://waymo.com/open/challenges/2021/real-time-2d-prediction/))->剛開始看,一成懂 # 02/19(六) - [x] 在國網上train看看 train job 1: ![](https://i.imgur.com/0hTCC8l.png) 修正1 ![](https://i.imgur.com/12Oyhbt.png) Importerror ![](https://i.imgur.com/wDgsKlh.png) /usr/lib64/libstdc++.so.6.0.19 ![](https://i.imgur.com/qCGpxU1.png) /usr/lib64/libstdc++.so.6* ![](https://i.imgur.com/skHfKnh.png) try 1: 嘗試將`/home/nckuhpclab11/.conda/envs/data_env/lib`裡的`libstdc++.so.6`刪掉,用軟連結`ln -s libstdc++.so.6.0.28 libstdc++.so.6` ->結果沒用(可能要在`/usr/lib64/`用軟連結?可是`/usr/lib64/`無法寫入`rm: cannot remove ‘libstdc++.so.6’: Permission denied` ) try 2: 在`/home/nckuhpclab11/jocelin/env.sh`裡加`export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nckuhpclab11/.conda/envs/yolor/lib/` 有進展~ ![](https://i.imgur.com/BwZolnM.png) - [ ] 研究要怎麼上傳到waymo的網站([Challenge 4 Real-time 2D Detection](https://waymo.com/open/challenges/2021/real-time-2d-prediction/)) - [ ] 有機會的話研究`scripts/get_pretrain.sh`跟`curl`指令 # 02/21(一) - [x] 在國網上train看看 (15hr沒能跑完,所以改時長跟gpu數、ntasks-per-node、--nproc_per_node) 因為train的時候會改到yolor裡面的檔案,所以重新在tzuyu裡git clone yolor來train ![](https://i.imgur.com/MBoMwOo.png) gtest(後來截的,TIME應該是30min): ![](https://i.imgur.com/VvncYjY.png) ![](https://i.imgur.com/utc1XYL.png) 應該有在準備要train了 gp2d 40hr PD中: ![](https://i.imgur.com/yN93ItO.png) - [x] 研究要怎麼上傳到waymo的網站([Challenge 4 Real-time 2D Detection](https://waymo.com/open/challenges/2021/real-time-2d-prediction/)) 應該有用的、關於waymo challenge3,4的docker image的網站:https://github.com/waymo-research/waymo-open-dataset/blob/master/waymo_open_dataset/latency/README.md Official challenge rule:https://waymo.com/open/terms - [ ] 有機會的話研究`scripts/get_pretrain.sh`跟`curl`指令 - [ ] 研究Link to the latency submission Docker image stored in Google Storage bucket or pushed to Google Container/Artifact Registry.(Waymo challenge submit需要) - [ ] 研究yolor train指令的參數 # 02/23(三) - [x] 在國網上train看看 result檔開頭: ![](https://i.imgur.com/DnEYhfo.png) (中間在scaning images和scaning labels,恕略) result檔結尾: ![](https://i.imgur.com/c4NjKLL.png) => 時間:3:22:43 做完前置,真正開始train時出現error: ![](https://i.imgur.com/6szlMph.png) ![](https://i.imgur.com/fTSlMx3.png) single gpu job(想試會不會一樣執行不了、出現同個error): ![](https://i.imgur.com/pIFghR1.png) =>應該差不多是同個原因,再看看 ![](https://i.imgur.com/EnU559T.png) 資工:可以把batch-size改大一點(32 or 64) batch-size:例如有1000張圖片,設batch-size=10,則會一次train 1000/10=100張圖;會出現error可能是因為batch-size設太小,cuda memory塞不下。 --nproc_per_node呼應gpu數,可以改到最大值8,--device要記得跟著改成=0,1,2,3,4,5,6,7 #SBATCH --ntasks-per-node=1(可以只設1) 解tfrecord檔時,存檔檔名可以用uuid避免檔名重複到 batch-size=32 ![](https://i.imgur.com/6KkwJdP.png) ```shell= #!/bin/bash #SBATCH -p gp2d #SBATCH -A ACD110038 #SBATCH --nodes=1 #SBATCH -J jocelin #SBATCH --time=0-40:00:00 #SBATCH --nodelist=gn1215 #SBATCH --gres=gpu:8 #SBATCH --ntasks-per-node=1 #SBATCH --output=/home/nckuhpclab11/tzuyu/yolor/best_result/job_train_result_32 echo "Test start" date hostname free -h source /home/nckuhpclab11/jocelin/env.sh cd /home/nckuhpclab11/tzuyu/yolor/ echo "gpu run" echo "==============================" python -m torch.distributed.launch --nproc_per_node 8 --master_port 9527 train.py --batch-size 32 --img 1920 1920 --data /home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/data.yaml --cfg cfg/yolor_p6_waymo.cfg --weights '' --device 0,1,2,3,4,5,6,7 --sync-bn --name yolor_p6_32 --hyp /home/nckuhpclab11/tzuyu/yolor/data/hyp.scratch.1280.yaml --epochs 1 echo "==============================" date echo "Test end" ``` batch-size=64: ![](https://i.imgur.com/pPY2ju0.png) (`env.sh`: ![](https://i.imgur.com/GzWUXYd.png) module load intel/2018是因為本來想要試mpirun,但後來沒有要用此方法,所以可以不用) - [ ] 研究要怎麼上傳到waymo的網站 - [ ] 研究Link to the latency submission Docker image stored in Google Storage bucket or pushed to Google Container/Artifact Registry.(Waymo challenge submit需要) - [ ] 研究yolor train指令的參數 - [ ] 研究hackmd # 02/24(四) - [x] 在國網上train看看 還在pending 試gp1d ![](https://i.imgur.com/BEYGh1K.png) batch-suze大好像比較耗記憶體(還在研究) https://www.itread01.com/content/1545969487.html 大概是:假設有1600筆資料,1600筆資料train完就是一個epochs跑完。如果batch-size設16,他一次會抓16筆資料來train,所以會抓100次才是跑完(完成一次epochs)。 - [ ] 研究要怎麼上傳到waymo的網站 - [ ] 研究Link to the latency submission Docker image stored in Google Storage bucket or pushed to Google Container/Artifact Registry.(Waymo challenge submit需要) - [ ] 研究yolor train指令的參數 - [x] 研究hackmd:https://hackmd.io/features-tw?both # 03/01(二) - [x] 在國網上train看看 gpu=8 batch-size=4, 20hr => 不是gpu數的倍數,所以沒法跑 batch-size=8, 20hr => 跑到training的7%,running time out batch-size=16, 20hr=> 跑到training的9%,running time out batch-size=32, => 1-09:44:13時跑到training的26%,還在跑 batch-size=64, => 做完前置後RuntimeError: CUDA out of memory.(04:02:31~05:25:08,共01:22:37,猜測前置差不多一個半到三小時=>batch-size=32的可能大概32小時train26%=>1小時14分鐘跑1%、130hr才能train完,但這樣會超過台灣山二號的時間限制) 所以猜測適合的batch-size大小應該也是大概呈微笑曲線 03/17更新: batch-size=24, 20hr=> 跑到training的12%,running time out batch-size=32, 20hr=> 跑到training的15% ,running time 03/19更新: 40=>17% 48=>20% 56=>22% 策略:試gpu=8, batch-size=16跟batch-size=32的96hr ![](https://i.imgur.com/4laK85h.png) ![](https://i.imgur.com/CIxqfZc.png) 策略2:試gpu=8, batch-size=16跟batch-size=32的96hr加上pretrained weight `yolor_p6.pt` ![](https://i.imgur.com/Sykvnd7.png) ![](https://i.imgur.com/h9OPGfx.png) - [ ] 研究要怎麼上傳到waymo的網站 - [ ] 研究Link to the latency submission Docker image stored in Google Storage bucket or pushed to Google Container/Artifact Registry.(Waymo challenge submit需要) - [x] 研究yolor train指令的參數 weight (03/02自動控制補課,請假) # 03/03(四) - [x] 在國網上train看看=>RUNNING,應該沒受停電影響(? # 03/04(五) - [x] 在國網上train看看=>RUNNING batch-size=32, 不管有無pre-trained權重都跑到54%(時間 無權重:2-22:08:27;有權重:2-21:39:56 左右),有無權重不太有差 batch-size=16,無權重跑到32%(時間:2-22:57:49),有權重跑到56%(時間:2-22:22:23),有無權重差異頗大 好神奇OAO 因為應該train不完,所以想先train一部份(train:100 tfrecord;valid:25 tfrecord),得到weight後再加更多資料去train =>寫複製檔案的python檔 - [x] propsal=>寫了一點點 # 03/05(六) - [x] 在國網上train看看 寫好python檔,可以直接大量複製images和labels檔了 ```python= import shutil tfnum=100 #想要跑幾個tfrecord檔 for i in range(0,tfnum+1): tf_num="%03d" % i #產生最前面的那三位數字,不足補零 for j in range(0,198): image_num="%03d"%j #產生第二組三位數字(每個tfrecord檔裡的幀數),不足補零 #第一個相機(FRONT) file_name1=tf_num+'_'+image_num+'_FRONT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name1 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name1 shutil.copy(src, des) #複製.jpg檔 file_name1=tf_num+'_'+image_num+'_FRONT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name1 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name1 shutil.copy(src, des) #複製.txt檔 #第二個相機(FRONT_LEFT) file_name2=tf_num+'_'+image_num+'_FRONT_LEFT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name2 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name2 shutil.copy(src, des) #複製.jpg檔 file_name2=tf_num+'_'+image_num+'_FRONT_LEFT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name2 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name2 shutil.copy(src, des) #複製.txt檔 #第三個相機(FRONT_RIGHT) file_name3=tf_num+'_'+image_num+'_FRONT_RIGHT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name3 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name3 shutil.copy(src, des) #複製.jpg檔 file_name3=tf_num+'_'+image_num+'_FRONT_RIGHT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name3 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name3 shutil.copy(src, des) #複製.txt檔 #第四個相機(SIDE_LEFT) file_name4=tf_num+'_'+image_num+'_SIDE_LEFT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name4 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name4 shutil.copy(src, des) #複製.jpg檔 file_name4=tf_num+'_'+image_num+'_SIDE_LEFT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name4 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name4 shutil.copy(src, des) #複製.txt檔 #第五個相機(SIDE_RIGHT) file_name5=tf_num+'_'+image_num+'_SIDE_RIGHT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name5 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name5 shut il.copy(src, des) #複製.jpg檔 file_name5=tf_num+'_'+image_num+'_SIDE_RIGHT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name5 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name5 shutil.copy(src, des) #複製.txt檔 ``` *要再寫可以偵測哪些檔案沒有就跳過之類的部分(for FileNotFoundError) 比較少data的job script(gpu=8, batch-size=16 + pre-trained weight) ![](https://i.imgur.com/afxdmf9.png) 比較少data的job script(gpu=8, batch-size=32 + pre-trained weight) ![](https://i.imgur.com/5UIIPR3.png) =>大概50分鐘左右開始traing 補個開始train的畫面 ![](https://i.imgur.com/agYHXoG.jpg) 目前最後面(時間:3-19:50:59)=>應該跑不完 ![](https://i.imgur.com/2vJogbd.png) # 03/06(日) 終於有東西train完了(撒花花 ![](https://i.imgur.com/Wm7MB9l.png) (結果32 batch-size的比16 batch-size的在少資料的時候快(16的還沒train完 (32的:Test start Sat Mar 5 16:08:31 CST 2022 ... 1 epochs completed in 15.900 hours. ... Sun Mar 6 08:43:06 CST 2022 Test end) result.png(應該是因為epochs=1所以只有一個點) ![](https://i.imgur.com/OVrOdj0.png) 96/15.9=6.0372多=>設個epochs=6(有點太緊繃,希望可以) ![](https://i.imgur.com/XM5kjfz.png) # 03/08(二) light 16 batch-size:27.337 hours ![](https://i.imgur.com/ou6hWnR.png) 拿batch-size=32, epochs=1 train完的`best_overall.pt` ![](https://i.imgur.com/A5Yp64W.png) # 03/10(四) - [x] 在國網上train看看 結果epochs=6(weight=yolor_p6.pt)的train不完 - [ ] 研究.cfg檔 - [x] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output 隨機抽training input去train? # 03/11(五) - [x] 在國網上train看看 結果epochs=6(weight=yolor_p6.pt)的train不完 - [ ] 研究.cfg檔 momentum讓他有足夠的慣性繼續往loss比較少的weight找 learning_rate要夠小避免忽略掉loss最低的點,但會比較慢 - [x] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output - [x] 研究yolor的`train.py` 待查: 不同神經層差異? `optimizer='adam'` 損失函數(LOSS) 效能衡量指標(metrics) `metrics=['accuracy']` 凸集合 Hyperparameter(超參數):在模型訓練前可調的參數 # 03/12(六) - [x] 在國網上train看看 - batch-size=32+W(batch-size=32+W light epoch1) light epoch6 result.png: ![](https://i.imgur.com/IPgGpGc.png) - batch-size=32+W(batch-size=32+W light epoch1) epoch1=>error: ![](https://i.imgur.com/DZBbIGG.png) sol. epoch數設錯,因為原本的weight已經train了1次,所以這次是從第二次開始train,epochs數要設(1+想train的epoch次數) 參考資料:https://github.com/ultralytics/yolov5/issues/249 - batch-size=32+W(batch-size=32+W light epoch6) epoch1 試試看這次能不能train完=>error ![](https://i.imgur.com/l4wjHde.png) ![](https://i.imgur.com/blYjwE8.png) =>(昨天加的)再把它註解調試試看 ![](https://i.imgur.com/PeO6Dew.png) - batch-size=32+W(batch-size=32+W light epoch6) light epoch6 ![](https://i.imgur.com/o9ZXly8.png) - [ ] 研究`.cfg`檔 - [x] 研究deep learning 基礎理論&yolor演算法 - [x] 研究yolor的`train.py` pytorch的神經層 指令:`torch.nn` https://pytorch.org/docs/stable/nn.html yolor `train.py`: ![](https://i.imgur.com/FgDXFvy.png) pytorch官網: ![](https://i.imgur.com/UPfEuwO.png) - [ ] 研究output - [ ] 做偵測waymo照片的demo(run yolor) ![](https://i.imgur.com/dc8vTX9.png) ![](https://i.imgur.com/ef3ItOs.png) - 之後: 1.先試用我們train出來的module來run 2.創大概一半大小(train:400 trfecord;valid:101 tfrecord)的dataset,繼續train 3.繼續補基礎理論 # 03/15(二) - [ ] 研究`.cfg`檔 - [x] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究yolor的`train.py` - [ ] 研究output - [x] 做偵測waymo照片的demo(run yolor) ![](https://i.imgur.com/lX7YiKI.png) ![](https://i.imgur.com/b8LRKqI.jpg) 淒淒慘慘戚戚 - [x] 在國網上train看看 - batch-size=32+W(batch-size=32+W light epoch6) light epoch6 因為改資料改到資料夾名稱,所以它出現error,重提交一次job ![](https://i.imgur.com/fmfhqng.png) 研究跨機(gpu=32) 繼續創dataset(train的) 繼續補理論、看cfg檔 # 03/16(三) - [ ] 在國網上train看看 gp4d 96hr gn1206 batch-size=32+W(352932)=>timeout,一樣只到75% - [x] 研究跨機 試gpu=16的job ![](https://i.imgur.com/TaPp5Zf.png) 之後看到資料(https://blog.csdn.net/baidu_19518247/article/details/89635181)應該不行 - [ ] 研究`.cfg`檔、yolor的`train.py` - [x] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output - 複製waymo資料的程式(可以知道有幾幀,不用等notfound後重新執行): ```python= import shutil import glob exe_result=[] tfnum=400 for i in range(236,tfnum+1): tf_num="%03d" % i #找這個trfecord檔有幾幀,或是說第一組數字相同的檔案有幾個 file_glob=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+tf_num+'*' file_glob_list=glob.glob(file_glob) file_num_all=len(file_glob_list) #輸出成result.txt,單純debug時用 exe_result.append(('file number of this tfrecord:' + str(file_num_all) + '\n')) exe_result.append((str(file_glob_list) + '\n')) # create result.txt with open('result.txt', 'w') as f: f.writelines(exe_result) #因為有五台相機名稱不同,在這個迴圈內有分別寫,所以迴圈執行次數要除以五 for j in range(0,int(file_num_all/5)): image_num="%03d"%j #分別複製五台相機的jpg檔跟txt檔 (跟之前的一樣) file_name1=tf_num+'_'+image_num+'_FRONT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name1 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name1 shutil.copy(src, des) file_name1=tf_num+'_'+image_num+'_FRONT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name1 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name1 shutil.copy(src, des) file_name2=tf_num+'_'+image_num+'_FRONT_LEFT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name2 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name2 shutil.copy(src, des) file_name2=tf_num+'_'+image_num+'_FRONT_LEFT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name2 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name2 shutil.copy(src, des) file_name3=tf_num+'_'+image_num+'_FRONT_RIGHT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name3 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name3 shutil.copy(src, des) file_name3=tf_num+'_'+image_num+'_FRONT_RIGHT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name3 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name3 shutil.copy(src, des) file_name4=tf_num+'_'+image_num+'_SIDE_LEFT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name4 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name4 shutil.copy(src, des) file_name4=tf_num+'_'+image_num+'_SIDE_LEFT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name4 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name4 shutil.copy(src, des) file_name5=tf_num+'_'+image_num+'_SIDE_RIGHT.jpg' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name5 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name5 shutil.copy(src, des) file_name5=tf_num+'_'+image_num+'_SIDE_RIGHT.txt' src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name5 des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name5 shutil.copy(src, des) ``` (之前的會卡住: ![](https://i.imgur.com/ZeY26gr.png) # 03/17(四) - [x] 在國網上train看看 傳了batch-size=40, 48, 56(gpu=8, time=20hr, all data)的試batch-size大小趨勢 - [x] 研究跨機 error ![](https://i.imgur.com/s18WOB5.png) ![](https://i.imgur.com/U2AOYI5.png) - [ ] 研究`.cfg`檔、yolor的`train.py` - [ ] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output - [ ] 寫train的教學 # 03/19(六) - [x] 在國網上train看看 創了每十幀取一次的dataset(程品奕說他們的是40幀取一次) 發現waymo_partof_small的data.yaml裡的路徑沒改到,還是waymo_partof Orz 試waymo_partof - [x] 研究跨機=>問了資工的程品奕,PD - [ ] 研究`.cfg`檔、yolor的`train.py` - [X] 研究deep learning 基礎理論&yolor演算法 - [X] 研究output - [ ] 寫train的教學 # 03/22 - [x] 在國網上train看看 356615 gp4d 96hr gn1209 batch-size=56+W(352932) light ep6的在RUNNING,其他在PENDING - [x] 研究跨機=>PD 但交了其他JOB試,還是不行 - RuntimeError: NCCL error in: /pytorch/torch/lib/c10d/ProcessGroupNCCL.cpp:784, unhandled system error, NCCL version 2.7.8 ![](https://i.imgur.com/TkZxRUz.png) ![](https://i.imgur.com/CxFpW8s.png) ![](https://i.imgur.com/c2tuZ7G.png) ![](https://i.imgur.com/Ba9MP69.png) 最後想試的,PD ![](https://i.imgur.com/sm8616r.png) (加NCCL_DEBUG=INFO 結果還是error(3/24) ![](https://i.imgur.com/qi0TyFe.png) - [ ] 研究`.cfg`檔、yolor的`train.py` - [X] 研究deep learning 基礎理論&yolor演算法 - [X] 研究output - [ ] 寫train的教學 # 03/24(四) ![](https://i.imgur.com/ZvCVNCg.png) - [x] 在國網上train看看 - [x] 研究跨機=>`job_multi.sh`跟`a_multi.sh`的可以,之後繼續研究`job.sh`和`a.sh`的為什麼不行 - [ ] 研究`.cfg`檔、yolor的`train.py` - [ ] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output - [ ] 寫train的教學 # 03/25(五) - [x] 在國網上train看看=>試檔案大小跟train的時間的關係 waymo_partof ![](https://i.imgur.com/QTSCDqg.png) waymo_jump_40(每四十幀取一次的dataset) ![](https://i.imgur.com/QV36pA3.png) - [ ] 研究跨機`job_multi.sh`跟`a_multi.sh`的可以,之後繼續研究`job.sh`和`a.sh`的為什麼不行 `job_multi.sh`跟`a_multi.sh`的(/home/nckuhpclab11/tzuyu/yolor/best_result/output_train_yolor_3_nodes.txt): 5 epochs completed in 8.091 hours. - [ ] 研究`.cfg`檔、yolor的`train.py`、`yolor/data/hyp.scratch.1280.yaml` - [x] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output - [x] 寫train的教學 =>發現之前有寫過colab的(哭笑 但還是重新整理了一下,並加上在國網上train的細節([yolor操作手冊](https://hackmd.io/@smiley-guava/H1VOyQiM9)) # 03/26(六) - [ ] 在國網上train看看=>試檔案大小跟train的時間的關係 waymo_jump_40(每四十幀取一次的dataset) batch-size32, gpu=8:3.157 hours 交job:waymo_jump(每十幀取一次的dataset) ![](https://i.imgur.com/Vdjw5Tf.png) - [x] 研究跨機`job_multi.sh`跟`a_multi.sh`的可以,之後繼續研究`job.sh`和`a.sh`的為什麼不行 `job_multi.sh` #SBATCH --wait-all-nodes=1 #SBATCH --nodelist=gn1225(還是可以#SBATCH --nodelist=gn1225,gn1226?)=>可以 #SBATCH --cpus-per-task=32為什麼設32? 沒有#SBATCH --ntasks-per-node=1=>加了也可 `a_multi.sh` 有多設OMP_NUM_THREADS=1=>註解掉後可以RUN 在train之前又conda activate yolor了一次=>下面的註解掉後可以RUN,可以只source env.sh(activate環境和export參數)(不要在activate環境後把他丟到null,顯示出來的會有點怪但還是可以train `--nproc_per_node=$NPROC_PER_NODE`=>`--nproc_per_node=8`=>可以 `--nnodes=$SLURM_JOB_NUM_NODES`=>`--nodes=2` 目前卡住=>改錯了!改到`--node_rank=$SLURM_PROCID`成`--node_rank=2`,難怪卡住 ![](https://i.imgur.com/73T55sd.png) 所以`--nnodes=$SLURM_JOB_NUM_NODES`=>`--nodes=2`可以 `--master_addr=gn1221`(還是可以`--master_addr=gn1221.twcc.ai`?)=>可以 不是用設變數的方式,而是直接打在參數設定指令那 `MASTER=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -n 1)` 結論:結果是batch-size要是總gpu的倍數!!!從56改成128就可以了 ![](https://i.imgur.com/cEi0VS3.png) *以後可以用變數去設,比較好改東西,或是改節點他就能自動偵測,不用一一手動改;長的指令可以分行,比較好修改東西跟比較好讀 - [ ] 研究`.cfg`檔、yolor的`train.py`、`yolor/data/hyp.scratch.1280.yaml` - [ ] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output - [ ] 研究平行化運算 - [ ] 看GPCNet(新主題)相關資料 # 03/29(二) - [ ] 在國網上train看看=>試檔案大小跟train的時間的關係 - train/imags和labels裡的檔案數量分別是:**78736** (waymo_jump;每十幀取一次的dataset) batch-size32, gpu=8:**12.594 hours** - [x] 準備報告 - [ ] 研究`.cfg`檔、yolor的`train.py`、`yolor/data/hyp.scratch.1280.yaml` - [ ] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output - [ ] 研究平行化運算 - [ ] 看GPCNet(新主題)相關資料 - [ ] yoloX # 03/30(三) - [ ] 在國網上train看看=>train 多一些epochs,看有沒有偵測起來比較好的 - [ ] 研究`.cfg`檔、yolor的`train.py`、`yolor/data/hyp.scratch.1280.yaml` - [ ] 研究deep learning 基礎理論&yolor演算法 - [ ] 研究output - [ ] 研究平行化運算 - [ ] yoloX - [ ] Pytorch跟Tensorflow