---
# System prepended metadata

title: hpc進度筆記--自駕車AI

---

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