摘要:wandb這個庫真是深得我心,只要幾行代碼就可以把每一次實驗打包保存在雲端,而且提供了自家的可視化接口,不用每次都自己寫一個logger,也省掉了import matplotlib, tensorboard等一大堆重複堆積的代碼塊。深度學習實驗結果保存與分析是最讓我頭疼的一件事情,每個實驗要保存對應的log,training curve還有生成圖片等等,光這些visualization就需要寫很多重複的代碼。

        <div> 
加入極市專業CV交流羣,與  1 0000+來自港科大、北大、清華、中科院、CMU、騰訊、百度  等名校名企視覺開發者互動交流! 同時提供每月大咖直播分享、真實項目需求對接、乾貨資訊彙總,行業技術交流。關注  極市平臺  公衆號  , 回覆  加羣, 立刻申請入羣~ 來源: 知乎問答 https://www.zhihu.com/question/38451 9 338 極市特精選了部分優質回答供 大家參考學習。 回答已獲作者授權,禁止二次轉載。

1. Fing

https://www.zhihu.com/question/384519338/answer/1160886439 wandb,weights&bias,最近發現的一個神庫。 深度學習實驗結果保存與分析是最讓我頭疼的一件事情,每個實驗要保存對應的log,training curve還有生成圖片等等,光這些visualization就需要寫很多重複的代碼。跨設備的話還得把之前實驗的記錄都給拷到新設備去。 wandb這個庫真是深得我心,只要幾行代碼就可以把每一次實驗打包保存在雲端,而且提供了自家的可視化接口,不用每次都自己寫一個logger,也省掉了import matplotlib, tensorboard等一大堆重複堆積的代碼塊。 最關鍵的是,它是免費的:) https://github.com/wandb/client

2. Jeremy Zhou

https://www.zhihu.com/question/384519338/answer/1152322804 推薦一個基於PyTorch的Deep Learning框架PyTorch Lightning。 https://github.com/PyTorchLightning/pytorch-lightning 經過我的試用,這個框架現在優點很多,使用方便,節省大量時間,讓用戶只需要關注模型和數據。 1.  不再需要關注很多無關但必要的繁雜細節 ,例如控制訓練流程、保存模型checkpoint、fp16支持、多機多卡訓練、梯度累計等等。這些東西全部由框架實現。 2. 對於一般的模型訓練, 只需要關注模型設計和數據讀取 。模型部分就不談了。對於數據讀取,除了具體的讀數據,只需要寫一個如何將多個instance打包成一個batch的函數即可。 3. 擴展性強 。這是我認爲這個框架最優秀的地方。PyTorch實際上有很多不同的框架,但是增加的易(無)用(腦)性的同時,其擴展性往往大打折扣。PyTorch Lightning對於這點的處理很好。可能某高級鍊金術師不止需要控制模型設計和數據讀取,而是想要進行更精細的控制,例如學習率的自定義調節。PyTorch Lightning也通過hook的方式提供了支持,幾乎所有常見的可以插入自定義控制流程的地方都可以使用hook進行更精細的控制。 下面說說缺點: 1. 老生常談的第一點,對於某些國家鍊金術師,他們想要控制每一個細節,那麼PyTorch Lightning可能無法提供支持。但是我覺得這些人也沒必要用這個,自己從頭寫最好了。 2. 框架還處於高頻更新中,可能前後版本存在兼容性問題。甚至有一些小坑。

3. 金天

https://www.zhihu.com/question/384519338/answer/1150941204 謝藥。 來推廣一波我的Alfred庫,首先請大家pip安裝一波: <span><span>sudo</span> pip3 install alfred-py</span> 然後是Github鏈接: https://github.com/jinfagang/alfred 這個庫目前有143個star,30個fork,看完覺得有用的老鐵記得回過頭來三連(瘋狂暗示)。

alfred是什麼

這是個啥庫?這裏貼一個github官方的定義: 英文不大好,大概意思是這是一個lib,同時也是一個tool,你只要安裝了上面的命令,你就可以在terminal召喚alfred了! 大家安裝完了使一下?? <span><span>alfred</span> -h</span> 是不是感覺很順手?到目前爲止大家還是不知道alfred是幹啥的。但是你看看-h應該會看到一大堆指令。我感覺alfred裏面* 最裝比,最牛x,最掉炸天的應該是visualize你的任何格式的標註數據 *. 曾幾何時,我都有這樣的需求:我有一堆數據,目標檢測或者實力分割的,它是VOC或者coco的format,我每次想可視化一下,看看數據有沒有標錯,都需要自己寫腳本,很麻煩。現在有了alfred,你要可視化VOC,只需要: <span><span>alfred</span> data vocview -i JPEGImages/ -l Annotations/</span> 簡單嗎?只要把圖片路徑和標註路徑穿過去即可。然後你就可以看到了:

就可以可視化出來了。請注意,你標註和圖片放在同一個文件夾也是可以的噢,很魯幫性的哦。 這其實沒啥,當然coco的數據集也是一樣的,這裏我不做過多的演示。我想要介紹的alfred裏面一個很神奇的功能,也是十分牛逼的功能: *各式各樣的畫box的函數*. 你還在爲box煩惱嗎?每次做完一個檢測模型,畫框的代碼我覺得很麻煩,雖然複製粘貼很爽,但不是那麼的優雅。而在alfred裏面,你可以很方便的畫bounding box:

比如這個box的API,大概代碼如下:
from alfred.vis.image.det import visualize_det_cv2_part
from alfred.vis.image.get_dataset_label_map import coco_label_map_list
 
 
boxes = b.pred_boxes.tensor.cpu().numpy()
scores = b.scores.cpu().numpy()
classes = b.pred_classes.cpu().numpy()
visualize_det_cv2_part(ori_img, scores, classes, boxes, class_names=coco_label_map_list, thresh=0.16,
                                   is_show=True)
你只要把box,scores,和classes傳進去就可以了,甚至你連coco的labelmap你都可以省掉去了歪!然後出來的效果就是上圖所示,所有的畫框,score大小的抑制,顏色都可以自動幫你處理。 當然這不是說alfred裏面的畫框多牛逼,也有很多其他的好用的畫框庫,但我想說的不是某個庫不行,而是在座的庫都是...... 2D框好畫,3D框你行嗎? 很多人以爲alfred只是一個image相關的庫,圖樣圖森破,那衣服。點雲照樣處理! 甚至可以給你在點雲上畫3D的Boundingbox,還不夠,甚至可以幫助把點雲裏面的3D box投影到圖片顯示。。。 好了,介紹到這裏大家應該知道alfred庫是幹啥的吧。案例一個十分好用的snippet,來自於alfred。我們每次寫pytorch的代碼,都喜歡託褲子放屁: <span><span>if</span> <span>use_cuda:</span></span> <span> <span>a</span> = <span>a.cuda()</span></span> 實際上使用alfred你可以防止這種不優雅的if操作:
from alfred.dl.torch.common import device
 
a = a.to(device)
雖然代碼函數差不多,但是你只需要import一句,任何變量都可以使用,簡化的代碼就不止一行了。 最後告訴大家alfred它不是一個專注pytorch的庫,如果你用tensorflow,你照樣可以用它的一些API去簡化你的操作。譬如tensorflow煩人的log,你不用設置環境變量也可以去掉它:
from alfred.dl.tf.common import mute_tf()
mute_tf()
import tensorflow as tf
然後整個世界就清淨了許多。

alfred的彩蛋

其實要說彩蛋,那其實很多,挑比較有意思的將,其實alfred還有一個爬蟲功能,當你需要某些圖片的時候可以讓alfred給你爬: <span><span>alfred</span> scrap image -q <span>'美女'</span></span> 然後你就有了一堆美女。。。圖片。。 最後alfred其實有一個兄弟庫,純C++編寫的,功能差不多,只不過C++裏面也有很多人煩人的操作,用thor就可以讓世界安靜: https://github.com/jinfagang/thor

4. 董鑫

https://www.zhihu.com/question/384519338/answer/1123898006

”工欲善其事, 必先利其器“

今天介紹的是 NVIDIA 推出的一款專門用於記錄深度學習調 (lian) 參 (dan) 的工具,runx。(爲即將的新東家打免費廣告了,哈哈) https://github.com/NVIDIA/runx runx非常的新,大概是五天前正式開源的。正好在 Github 上面看到,感覺挺有意思的,就拿來仔細的看了一下。這篇文章也應該是中文全網第一個介紹這個工具。 簡單來說,runx 生來就是用來方便深度煉丹師記錄各種實驗數據的。 因爲深度學習裏面,一個大模型一跑少則幾個小時,多則幾天或者幾個星期,如果沒有很好的把已經跑過實驗很好的記錄下來,會是一件非常低效而且惱火的事情。 我在我之前的文章也介紹過一些方便記錄實驗數據的小方法,比如: https://zhuanlan.zhihu.com/p/112583368 而 runx 則更像是把各種常用的工具做了一個集合,可以把他理解爲深度學習煉丹中的”瑞士軍刀“。工具很小,本身也很簡單簡潔,但是很多時候可以給你很大方便。 目前 runx 的文檔還很不全,我先來介紹他的一個用法—- 記錄實驗輸出及方便的Tensorboard記錄 主要用的是 runx 下面的子模塊, runx .logx  

logx.initialize

在實驗開始前進行一些必要的設置。 <span>logx.initialize(logdir=args.logdir, coolname=<span>True</span>, tensorboard=<span>True</span>,</span> <span> hparams=vars(args))</span> 上面就是定義了: logdir 把所有保存的結果存在哪。 如果指定的文件夾不存在,會自動的新建,不用再手 動的 os.makedirs(logroot, exist_ok= True ) 了哦。 方便~ tensorboard 是否開啓 tensorboard 記錄。 這個也很方便,不用再手動的  writer = SummaryWriter() 了哦。 方便~ global_rank 分佈式訓練的時候,防止多個輸出,自動只log rank=0,不用自己寫判斷了哦。 方便~ coolname 是否在  logdir 下面再新建一個隨機命名的文件夾來用 logging(這樣你可以在  logdir 下面存一些除了logging之外的東西,方便分類)。 隨機命名的文件夾的畫風是這樣的  industrious-chicken arrogant-buffalo ,哈哈哈哈哈。 hparams 把所有的超參數都存起來,功能和我上面推薦的文章基本一樣,雖然砸了我上面文章的”飯碗“,但是不得不說,方便~ eager_flush 如果每次 tensorboard 寫的東西比較多,那就把這個打開,以防因爲IO太快沒寫上。 (有些服務器開啓了IO限制,經常會遇到實際沒寫上的情況,建議常開)

logx.msg()

把你程序之前  pirnt 都換成這個就對了,他會幫你自動保存所有 print 輸出,方便日後查看。 方便~

logx.metrics

用來記錄各種變量的,比如
# capture metrics
metrics = {'loss': loss.item()}
iteration = epoch * len(train_loader) + batch_idx
logx.metric('train', metrics, iteration)
phase 指定是 train 還是 test metrics 一個字典,裏 面裝着 所有你打算在這一步你要記錄的值。 global_step 這個是第幾步的結果。 這其實就是一個  保存訓練變量+TensorBoard自動寫入  器。

save_model

用法
logx.save_model(
        save_dict,
        metric=accuracy,
        epoch=epoch,
        higher_better=True)
epoch 會用這個來命名存的模型 metric 以什麼爲標準來決定當前模型是否是最好的模型,並由此決定要不要存。 如果你的 metric 是準確率,那麼  higher_better 就要置爲  True delete_old 是否每個 epoch 都保存一個一個新的,還是永遠只存一個最好的。 不用自己寫判斷的代碼了哦。 方便~

極市獨家福利 40萬獎金的AI移動應用大賽,參賽就有獎,入圍還有額外獎勵

添加極市小助手微信 (ID : cv-mart) ,備註: 研究方向-姓名-學校/公司-城市 (如:目標檢測-小極-北大-深圳),即可申請加入 目標檢測、目標跟蹤、人臉、工業檢測、醫學影像、三維&SLAM、圖像分割等極市技術交流羣 ,更有 每月大咖直播分享、真實項目需求對接、求職內推、算法競賽、 乾貨資訊彙總、行業技術交流 一起來讓思想之光照的更遠吧~

△長按添加極市小助手

△長按關注極市平臺,獲取 最新CV乾貨 覺得有用麻煩給個在看啦~   
相關文章