各位大神好,小弟目前正在實作如何增加影像辨識模型的識別類別,以YOLOv7為主要模型,
主要的目的是希望讓模型持續地,透過不同的資料集認識更多類別的物件,
但目前執行結果不如預期因此發文請教,以下是我執行的步驟。
1.下載YOLOv7官方github模型與權重(COCO資料集訓練)
2.下載KITTI資料集
3.修改YOLOv7訓練資料設定:
把KITTI資料集中的八個類別扣除重複的三類別,
把其餘的五個增加到 .yaml的names list後面並修改nc為85,
新增的類別是「Van」、「Person_sitting」、「Cyclist」、「Tram」和「Misc」,共五個。
4.修改KITTI標籤檔案:原始KITTI從0到7編號,現在增加到COCO資料集後,需要更改編號,
修改的規則如下(跟COCO重複的改為相同編號,不同的則往後新增)
KITTI Category | Original ID | New Category ID |
---|---|---|
Car | 0 | 2 |
Van | 1 | 81 |
Truck | 2 | 7 |
Pedestrian | 3 | 0 |
Person_sitting | 4 | 82 |
Cyclist | 5 | 83 |
Tram | 6 | 84 |
Misc | 7 | 85 |
預備好了資料,則開始訓練。
5.修改凍結層訓練參數:
parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone of yolov7=50, first3=0 1 2')
在這裡嘗試凍結0、50、101層進行訓練(ex: default=[101])。
希望透過上述步驟,讓模型既可以保有辨識原來的80個類別,並且增加認得KITTI提供的新類別
例如COCO中包含了'traffic light'的類別,希望可以在訓練後保有認得交通燈號,又可以增加認識Van...等交通項目。
執行結果:
1.原始COCO資料集辨識結果
2.加入KITTI且設定凍結101層結果(凍結0與50層結果相似)
變得只能辨識KITTI的資料集出現過的類別,原始的'traffic light'與其他類別都辨識不出來。
有此發想是因為LLM模型似乎也是不斷的增加訓練資料,讓模型越來越強大,
因此想實作在影像資料集上,看能有否有一樣的效果。
非常建議大家的各種建議,謝謝大家。
YOLO 要使用自訂的資料集訓練專屬的模型,通常要重新訓練,如果要模仿transfer learning作法,凍結top n layers,也是要準備所有的資料,不能只準備額外的類別資料,目前沒有看過incremental training案例,如果額外的類別與既有的類別近似,也許可以使用few-shot training,以上只是個人淺見,也許其他專家有更好的解法。