【问题标题】:Labeled folders in test and train data and sorting the data into them based on label在测试和训练数据中标记文件夹,并根据标签将数据分类到其中
【发布时间】:2019-06-20 06:32:43
【问题描述】:

我正在寻找训练 CoreML 图像分类器,它需要为测试和训练数据中的每个标签创建一个文件夹,并将带有该标签的数据放在正确的文件夹中。我有一个这样的文件夹结构:

Train
 -1
 -2
 -3
 -4
Test
 -1
 -2
 -3
 -4

我已经对测试和训练数据进行了拆分,但我没有将数据拆分为类。

我有一个 excel csv 文件,开头看起来像这样。

图像名称的结构是10_left.jpeg, 10_right.jpeg, 13_left.jpeg等。

有超过 15,000 张图像,因此手动操作并不是最好的。有没有办法根据excel中vba中的标签名称将文件移动到正确的文件夹中?还是其他方式?谢谢!

编辑: 根据下面的答案,我尝试了这个:

Option Explicit
Dim iRow


Sub SaveFilesToFolders()

Dim Folder0 As String, Folder1 As String, Folder2 As String, Folder3 As String, Folder4 As String
Dim FileNameRange As Range
Dim actCell As Range
Dim SelFolder As Integer
Dim ActFileName As String

    Folder0 = "/Volumes/G-DRIVE\ mobile\ USB-C/trainDataInClasses/0"
    Folder1 = "/Volumes/G-DRIVE\ mobile\ USB-C/trainDataInClasses/1"
    Folder2 = "/Volumes/G-DRIVE\ mobile\ USB-C/trainDataInClasses/2"
    Folder3 = "/Volumes/G-DRIVE\ mobile\ USB-C/trainDataInClasses/3"
    Folder4 = "/Volumes/G-DRIVE\ mobile\ USB-C/trainDataInClasses/4"

    Set FileNameRange = Range("A2:A21")


    For Each actCell In FileNameRange
        'Debug.Print actCell.Address
        ActFileName = actCell.Value
        SelFolder = actCell.Offset(0, 1).Value
        Select Case SelFolder
            Case 0
                Call Save2Folder(ActFileName, Folder0)
            Case 1
                Call Save2Folder(ActFileName, Folder1)
            Case 2
                Call Save2Folder(ActFileName, Folder2)
            Case 3
                Call Save2Folder(ActFileName, Folder3)
            Case 4
                Call Save2Folder(ActFileName, Folder4)
        End Select
    Next actCell


End Sub

'Sub Save2Folder() '(locFileName As String, FolderStr As String)
Sub Save2Folder(locFileName, FolderStr)
    Dim Po15k As String 'Path to the 15k Files
    Po15k = "/Volumes/G-DRIVE\ mobile\ USB-C/resortTrainFirst24 "

    FileCopy Po15k & locFileName & ".jpg", FolderStr & locFileName & ".jpg"
End Sub

但收到错误“找不到路径”有什么建议吗?

【问题讨论】:

  • 您可能需要在“...resortTrainFirst24”之后添加/或\:Po15k = "/Volumes/G-DRIVE\ mobile\ USB-C/resortTrainFirst24\"。此外,Folder0 到 Folder4 需要在字符串末尾加上斜杠或反斜杠!

标签: excel vba machine-learning dataset coreml


【解决方案1】:
Option Explicit
Dim iRow

Sub InitSampleData()
    Range("B1") = "10_left"
    Range("B2") = "10_right"
    Range("B3") = "13_left"
    Range("B4") = "13_right"
    Range("B5") = "13_left"
    Range("B6") = "13_right"

    Range("C1") = 0
    Range("C2") = 0
    Range("C3") = 1
    Range("C4") = 1
    Range("C5") = 2
    Range("C6") = 4
End Sub

Sub SaveFilesToFolders()

Dim Folder0 As String, Folder1 As String, Folder2 As String, Folder3 As String, Folder4 As String
Dim FileNameRange As Range
Dim actCell As Range
Dim SelFolder As Integer
Dim ActFileName As String

    Folder0 = "C:\temp\xxx\MySpecialFolder0\"
    Folder1 = "C:\temp\xxx\MySpecialFolder1\"
    Folder2 = "C:\temp\xxx\MySpecialFolder2\"
    Folder3 = "C:\temp\xxx\MySpecialFolder3\"
    Folder4 = "C:\temp\xxx\MySpecialFolder4\"

    'Set FileNameRange = Range("B2:B15001")
    Set FileNameRange = Range("B1:B6")

    For Each actCell In FileNameRange
        'Debug.Print actCell.Address
        ActFileName = actCell.Value
        SelFolder = actCell.Offset(0, 1).Value
        Select Case SelFolder
            Case 0
                Call Save2Folder(ActFileName, Folder0)
            Case 1
                Call Save2Folder(ActFileName, Folder1)
            Case 2
                Call Save2Folder(ActFileName, Folder2)
            Case 3
                Call Save2Folder(ActFileName, Folder3)
            Case 4
                Call Save2Folder(ActFileName, Folder4)
        End Select
    Next actCell


End Sub

'Sub Save2Folder() '(locFileName As String, FolderStr As String)
Sub Save2Folder(locFileName, FolderStr)
    Dim Po15k As String 'Path to the 15k Files
    'Po15k = "C:\MyFolderWith15000Files\"
    Po15k = "C:\temp\xxx\"
    FileCopy Po15k & locFileName & ".jpg", FolderStr & locFileName & ".jpg"
End Sub

'With the below routines you can get a listing of your 15000 files.
'Or you can check the destination folders.
'You need to add "Microsoft Scripting Runtime" via IBE Menu "Tools - References"

Sub ListFiles()
    ThisWorkbook.Worksheets.Add
    On Error Resume Next
    ActiveSheet.Name = "ListOf_15000_Files"
    On Error GoTo 0
    Call ListMyFiles("C:\MyFolderWith15000Files\", IncludeSubfolders:=False)
End Sub

Sub ListMyFiles(mySourcePath, IncludeSubfolders)
Dim MyObject, mySource, myFile, mySubFolder
Dim iCol As Integer, iRow As Integer

    Set MyObject = New Scripting.FileSystemObject
    Set mySource = MyObject.GetFolder(mySourcePath)
    On Error Resume Next
    For Each myFile In mySource.Files
        iCol = 2
        Cells(iRow, iCol).Value = myFile.Path
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Name
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Size
        iRow = iRow + 1
    Next
    If IncludeSubfolders Then
        For Each mySubFolder In mySource.SubFolders
            Call ListMyFiles(mySubFolder.Path, True)
        Next
    End If
End Sub

【讨论】:

  • 我尝试了一个较小的测试,但收到错误“找不到路径”,请检查我上面的实现。非常感谢!
猜你喜欢
  • 2019-12-09
  • 2018-05-04
  • 2021-08-24
  • 2021-02-03
  • 2019-10-07
  • 2020-03-09
  • 2020-10-31
  • 2018-05-28
  • 2020-11-02
相关资源
最近更新 更多